ariblib 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,325 +1,325 @@
1
- #! ruby
2
- # -*- encoding: utf-8 -*-
3
-
4
- module Ariblib
5
- class String
6
- DesignationGSET={
7
- 0x42 => [:set_code_group, [:put_kanji ,true ].freeze].freeze,#:CODE_KANJI
8
- 0x4A => [:set_code_group, [:put_alphanumeric ,false].freeze].freeze,#:CODE_ALPHANUMERIC
9
- 0x30 => [:set_code_group, [:put_hiragana ,false].freeze].freeze,#:CODE_HIRAGANA
10
- 0x31 => [:set_code_group, [:put_katakana ,false].freeze].freeze,#:CODE_KATAKANA
11
- 0x32 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_A
12
- 0x33 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_B
13
- 0x34 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_C
14
- 0x35 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_D
15
- 0x36 => [:set_code_group, [:put_alphanumeric ,false].freeze].freeze,#:CODE_PROP_ALPHANUMERIC
16
- 0x37 => [:set_code_group, [:put_hiragana ,false].freeze].freeze,#:CODE_PROP_HIRAGANA
17
- 0x38 => [:set_code_group, [:put_katakana ,false].freeze].freeze,#:CODE_PROP_KATAKANA
18
- 0x49 => [:set_code_group, [:put_jis_katakana ,false].freeze].freeze,#:CODE_JIS_X0201_KATAKANA
19
- 0x39 => [:set_code_group, [:put_kanji ,true ].freeze].freeze,#:CODE_JIS_KANJI_PLANE_1
20
- 0x3A => [:set_code_group, [:put_kanji ,true ].freeze].freeze,#:CODE_JIS_KANJI_PLANE_2
21
- 0x3B => [:set_code_group, [:put_symbols ,true ].freeze].freeze,#:CODE_ADDITIONAL_SYMBOLS
22
- }.freeze
23
- DesignationDRCS={
24
- 0x40 => [:set_code_group, [:put_ignore,true ].freeze].freeze,# DRCS-0
25
- 0x41 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-1
26
- 0x42 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-2
27
- 0x43 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-3
28
- 0x44 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-4
29
- 0x45 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-5
30
- 0x46 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-6
31
- 0x47 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-7
32
- 0x48 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-8
33
- 0x49 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-9
34
- 0x4A => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-10
35
- 0x4B => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-11
36
- 0x4C => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-12
37
- 0x4D => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-13
38
- 0x4E => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-14
39
- 0x4F => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-15
40
- 0x70 => [:set_code_group, [:put_ignore,false].freeze].freeze,# Macro
41
- }.freeze
42
-
43
- Esc_4th=DesignationDRCS.freeze
44
- Esc_3rd_drcs=DesignationDRCS.merge({0x20 => [:esc_seq,Esc_4th,nil].freeze}).freeze
45
- Esc_3rd_gset=DesignationGSET.merge({0x20 => [:esc_seq,Esc_4th,nil].freeze}).freeze
46
- Esc_2nd={
47
- 0x20 => [:esc_seq,Esc_3rd_drcs ,nil].freeze,
48
- 0x28 => [:esc_seq,Esc_3rd_drcs , 0].freeze,
49
- 0x29 => [:esc_seq,Esc_3rd_gset , 1].freeze,
50
- 0x2A => [:esc_seq,Esc_3rd_gset , 2].freeze,
51
- 0x2B => [:esc_seq,Esc_3rd_gset , 3].freeze,
52
- }.merge(DesignationGSET).freeze
53
- Esc_1st={
54
- # Invocation of code elements
55
- 0x6E => [:set_locking_gl,2].freeze,# LS2
56
- 0x6F => [:set_locking_gl,3].freeze,# LS3
57
- 0x7E => [:set_locking_gr,1].freeze,# LS1R
58
- 0x7D => [:set_locking_gr,2].freeze,# LS2R
59
- 0x7C => [:set_locking_gr,3].freeze,# LS3R
60
- # Designation of graphic sets
61
- 0x24 => [:esc_seq,Esc_2nd,0].freeze,
62
- 0x28 => [:esc_seq,Esc_2nd,0].freeze,
63
- 0x29 => [:esc_seq,Esc_2nd,1].freeze,
64
- 0x2A => [:esc_seq,Esc_2nd,2].freeze,
65
- 0x2B => [:esc_seq,Esc_2nd,3].freeze,
66
- }.freeze
67
- Esc_Error=[:escape_error].freeze
68
-
69
- Ctrl_code={
70
- 0x0F => [:set_locking_gl , 0 ].freeze,# LS0
71
- 0x0E => [:set_locking_gl , 1 ].freeze,# LS1
72
- 0x19 => [:set_single_gl , 2 ].freeze,# SS2
73
- 0x1D => [:set_single_gl , 3 ].freeze,# SS3
74
- 0x1B => [:esc_seq ,Esc_1st,nil].freeze, # ESC
75
- #0x89 => [:set_em_str_size , :STR_MEDIUM ].freeze,# MSZ
76
- #0x8A => [:set_em_str_size , :STR_NORMAL ].freeze,# NSZ
77
- 0x20 => [:put_alphanumeric_narrow, 0x20 ].freeze,# space
78
- 0xA0 => [:put_alphanumeric_narrow, 0x20 ].freeze,# space(ARIB)
79
- 0x09 => [:put_alphanumeric_narrow, 0x20 ].freeze,# HT
80
- 0x0D => [:put_alphanumeric_narrow, 0x0d ].freeze,
81
- 0x0A => [:put_alphanumeric_narrow, 0x0d ].freeze,
82
- }.freeze
83
-
84
- def set_em_str_size(val)
85
- @m_emStrSize = val
86
- end
87
- def set_single_gl(val)
88
- @m_pSingleGL = val
89
- end
90
- def set_locking_gl(val)
91
- @m_pLockingGL = val
92
- end
93
- def set_locking_gr(val)
94
- @m_pLockingGR = val
95
- end
96
- def set_code_group(val)
97
- @m_CodeG[@byIndexG]=val
98
- end
99
- def escape_error
100
- end
101
- def esc_seq(hash , byIndexG)
102
- @byIndexG=byIndexG if byIndexG
103
- args=hash.fetch(@bs.getc,Esc_Error)
104
- send *args if @bs.pos <= @len
105
- end
106
-
107
- Code_kanji = [0x1B, 0x24, 0x40,nil,nil,0x1B,0x28,0x4a]
108
- Code_alphanumeric = (
109
- "                "+
110
- "                "+
111
- " !”#$%&’()*+,-./"+
112
- "0123456789:;<=>?"+
113
- "@ABCDEFGHIJKLMNO"+
114
- "PQRSTUVWXYZ[¥]^_"+
115
- " abcdefghijklmno"+
116
- "pqrstuvwxyz{|} ̄ ").freeze
117
- Code_hiragana = (
118
- "                "+
119
- "                "+
120
- " ぁあぃいぅうぇえぉおかがきぎく"+
121
- "ぐけげこごさざしじすずせぜそぞた"+
122
- "だちぢっつづてでとどなにぬねのは"+
123
- "ばぱひびぴふぶぷへべぺほぼぽまみ"+
124
- "むめもゃやゅゆょよらりるれろゎわ"+
125
- "ゐゑをん   ゝゞー。「」、・ ").freeze
126
- Code_katakana = (
127
- "                "+
128
- "                "+
129
- " ァアィイゥウェエォオカガキギク"+
130
- "グケゲコゴサザシジスズセゼソゾタ"+
131
- "ダチヂッツヅテデトドナニヌネノハ"+
132
- "バパヒビピフブプヘベペホボポマミ"+
133
- "ムメモャヤュユョヨラリルレロヮワ"+
134
- "ヰヱヲンヴヵヶヽヾー。「」、・ ").freeze
135
- Code_jis_katakana = (
136
- "                "+
137
- "                "+
138
- " 。「」、・ヲァィゥェォャュョッ"+
139
- "ーアイウエオカキクケコサシスセソ"+
140
- "タチツテトナニヌネノハヒフヘホマ"+
141
- "ミムメモヤユヨラリルレロワン゛゜"+
142
- "                "+
143
- "                ").freeze
144
- Code_gaiji = {
145
- 0x7A => [ nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x21-0x2f
146
- nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x30-0x3f
147
- nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x40-0x4f
148
- "【HV】","【SD】","【P】","【W】","【MV】","【手】","【字】","【双】",
149
- "【デ】","【S】","【二】","【多】","【解】","【SS】","【B】","【N】",
150
- "■" ,"●" ,"【天】","【交】","【映】","【無】","【料】","【年齢制限】",
151
- "【前】","【後】","【再】","【新】","【初】","【終】","【生】","【販】",
152
- "【声】","【吹】","【PPV】","(秘)","ほか",],
153
- 0x7C=>[ "→" ,"←" ,"↑" ,"↓" ,"●" ,"○" ,"年" ,
154
- "月" ,"日" ,"円" ,"㎡" ,"㎥" ,"㎝" ,"㎠" ,"㎤" ,
155
- "0." ,"1." ,"2." ,"3." ,"4." ,"5." ,"6." ,"7." ,
156
- "8." ,"9." ,"氏" ,"副" ,"元" ,"故" ,"前" ,"[新]",
157
- "0," ,"1," ,"2," ,"3," ,"4," ,"5," ,"6," ,"7," ,
158
- "8," ,"9," ,"(社)","(財)","(有)","(株)","(代)","(問)",
159
- "▶" ,"◀" ,"〖" ,"〗" ,"⟐" ,"^2" ,"^3" ,"(CD)",
160
- "(vn)","(ob)","(cb)","(ce" ,"mb)" ,"(hp)","(br)","(p)" ,
161
- "(s)" ,"(ms)","(t)" ,"(bs)","(b)" ,"(tb)","(tp)","(ds)",
162
- "(ag)","(eg)","(vo)","(fl)","(ke" ,"y)" ,"(sa" ,"x)" ,
163
- "(sy" ,"n)" ,"(or" ,"g)" ,"(pe" ,"r)" ,"(R)" ,"(C)" ,
164
- "(箏)","DJ" ,"[演]","Fax",],
165
- 0x7D=>[ "㈪" ,"㈫" ,"㈬" ,
166
- "㈭" ,"㈮" ,"㈯" ,"㈰" ,
167
- "㈷" ,"㍾" ,"㍽" ,"㍼" ,
168
- "㍻" ,"№" ,"℡" ,"〶" ,
169
- "○" ,"〔本〕" ,"〔三〕" ,"〔二〕" ,
170
- "〔安〕" ,"〔点〕" ,"〔打〕" ,"〔盗〕" ,
171
- "〔勝〕" ,"〔敗〕" ,"〔S〕" ,"[投]" ,
172
- "[捕]" ,"[一]" ,"[二]" ,"[三]" ,
173
- "[遊]" ,"[左]" ,"[中]" ,"[右]" ,
174
- "[指]" ,"[走]" ,"[打]" ,"㍑" ,
175
- "㎏" ,"㎐" ,"ha" ,"㎞" ,
176
- "㎢" ,"㍱" ,"・" ,"・" ,
177
- "1/2" ,"0/3" ,"1/3" ,"2/3" ,
178
- "1/4" ,"3/4" ,"1/5" ,"2/5" ,
179
- "3/5" ,"4/5" ,"1/6" ,"5/6" ,
180
- "1/7" ,"1/8" ,"1/9" ,"1/10" ,
181
- "☀" ,"☁" ,"☂" ,"☃" ,
182
- "☖" ,"☗" ,"▽" ,"▼" ,
183
- "♦" ,"♥" ,"♣" ,"♠" ,
184
- "⌺" ,"⦿" ,"‼" ,"⁉" ,
185
- "(曇/晴)","☔" ,"(雨)" ,"(雪)" ,
186
- "(大雪)" ,"⚡" ,"(雷雨)" ," " ,
187
- "・" ,"・" ,"♬" "☎" ,],
188
- 0x7E=>[ "Ⅰ" ,"Ⅱ" ,"Ⅲ" ,"Ⅳ" ,"Ⅴ" ,"Ⅵ" ,"Ⅶ" ,
189
- "Ⅷ" ,"Ⅸ" ,"Ⅹ" ,"Ⅺ" ,"Ⅻ" ,"⑰" ,"⑱" ,"⑲" ,
190
- "⑳" ,"⑴" ,"⑵" ,"⑶" ,"⑷" ,"⑸" ,"⑹" ,"⑺" ,
191
- "⑻" ,"⑼" ,"⑽" ,"⑾" ,"⑿" ,"㉑" ,"㉒" ,"㉓" ,
192
- "㉔" ,"(A)","(B)","(C)","(D)","(E)","(F)","(G)",
193
- "(H)","(I)","(J)","(K)","(L)","(M)","(N)","(O)",
194
- "(P)","(Q)","(R)","(S)","(T)","(U)","(V)","(W)",
195
- "(X)","(Y)","(Z)","㉕" ,"㉖" ,"㉗" ,"㉘" ,"㉙" ,
196
- "㉚" ,"①" ,"②" ,"③" ,"④" ,"⑤" ,"⑥" ,"⑦" ,
197
- "⑧" ,"⑨" ,"⑩" ,"⑪" ,"⑫" ,"⑬" ,"⑭" ,"⑮" ,
198
- "⑯" ,"❶" ,"❷" ,"❸" ,"❹" ,"❺" ,"❻" ,"❼" ,
199
- "❽" ,"❾" ,"❿" ,"⓫" ,"⓬" ,"㉛" ,],
200
- 0x75=>[ "㐂","亭","份","仿","侚","俉","傜",
201
- "儞","冼","㔟","匇","卡","卬","詹","吉",
202
- "呍","咖","咜","咩","唎","啊","噲","囤",
203
- "圳","圴","塚","墀","姤","娣","婕","寬",
204
- "﨑","㟢","庬","弴","彅","德","怗","恵",
205
- "愰","昤","曈","曙","曺","曻","桒","・",
206
- "椑","椻","橅","檑","櫛","・","・","・",
207
- "毱","泠","洮","海","涿","淊","淸","渚",
208
- "潞","濹","灤","・","・","煇","燁","爀",
209
- "玟","・","珉","珖","琛","琡","琢","琦",
210
- "琪","琬","琹","瑋","㻚","畵","疁","睲",
211
- "䂓","磈","磠","祇","禮","・","・",],
212
- 0x76=>[ "・","秚","稞","筿","簱","䉤","綋",
213
- "羡","脘","脺","・","芮","葛","蓜","蓬",
214
- "蕙","藎","蝕","蟬","蠋","裵","角","諶",
215
- "跎","辻","迶","郝","鄧","鄭","醲","鈳",
216
- "銈","錡","鍈","閒","雞","餃","饀","髙",
217
- "鯖","鷗","麴","麵",],
218
- }
219
- Code_gaiji.default=[]
220
- Code_gaiji.freeze
221
-
222
- def put_kanji(char1,char2)
223
- Code_kanji[3]=char1
224
- Code_kanji[4]=char2
225
- @dst+=Code_kanji.pack('C*').force_encoding('ISO-2022-JP').encode('utf-8')
226
- #rescue => e
227
- # puts e.message
228
- # p (@bs.pos-@debug_pos)/8
229
- # @bs.pos=@debug_pos
230
- # p @bs.str(@debug_len).unpack('C*')
231
- # puts @dst
232
- # exit
233
- end
234
- def put_alphanumeric(char1,char2)
235
- @dst+=char1.chr
236
- end
237
- def put_alphanumeric_narrow(char1,char2)
238
- @dst+=char1.chr
239
- end
240
- def put_alphanumeric_wide(char1,char2)
241
- @dst+=Code_alphanumeric[char1]
242
- end
243
- def put_hiragana(char1,char2)
244
- @dst+=Code_hiragana[char1]
245
- end
246
- def put_katakana(char1,char2)
247
- @dst+=Code_katakana[char1]
248
- end
249
- def put_jis_katakana(char1,char2)
250
- @dst+=Code_jis_katakana[char1]
251
- end
252
- def put_symbols(char1,char2)
253
- return if char2 < 0x21
254
- @dst+=Code_gaiji[char1][char2-0x21]||''
255
- end
256
- def put_ignore(char1,char2)
257
- end
258
-
259
- def initialize(bs,len)
260
- @len=bs.pos+len*8
261
- @bs=bs
262
- @dst=''.force_encoding('utf-8')
263
-
264
- # 状態初期設定
265
- @m_CodeG =[ DesignationGSET[0x42][1],
266
- DesignationGSET[0x4a][1],
267
- DesignationGSET[0x30][1],
268
- DesignationGSET[0x31][1]]
269
- @m_pLockingGL = 0
270
- @m_pLockingGR = 2
271
- @m_pSingleGL = nil
272
-
273
- #@str=bs.str(len).unpack('C*')
274
- #bs.pos-=len*8
275
- #@debug_pos=bs.pos
276
- #@debug_len=len
277
-
278
- conv
279
- end
280
-
281
- def to_utf8
282
- @dst
283
- end
284
-
285
- def conv
286
- #@m_emStrSize = :STR_NORMAL
287
- while(@bs.pos < @len)
288
- dwSrcData = @bs.getc
289
-
290
- if((dwSrcData >= 0x21) && (dwSrcData <= 0x7E)) #GL領域
291
- curCodeSet = @m_CodeG[@m_pSingleGL || @m_pLockingGL];
292
- @m_pSingleGL=nil
293
- char2 = (curCodeSet[1])? @bs.getc : nil #// 2バイトコード
294
- send( curCodeSet[0],dwSrcData,char2) if @bs.pos <= @len
295
-
296
- elsif((dwSrcData >= 0xA1) && (dwSrcData <= 0xFE)) #// GR領域
297
- curCodeSet = @m_CodeG[@m_pLockingGR];
298
- char2 = (curCodeSet[1])? @bs.getc : nil #// 2バイトコード
299
- send( curCodeSet[0],dwSrcData & 0x7f,char2 & 0x7f) if @bs.pos <= @len
300
-
301
- else
302
- #// 制御コード
303
- case(dwSrcData)
304
- when 0x0F then @m_pLockingGL = 0 # LS0
305
- when 0x0E then @m_pLockingGL = 1 # LS1
306
- when 0x19 then @m_pSingleGL = 2 # SS2
307
- when 0x1D then @m_pSingleGL = 3 # SS3
308
- when 0x1B then esc_seq(Esc_1st,nil) # ESC
309
- #when 0x89 then @m_emStrSize = :STR_MEDIUM # MSZ
310
- #when 0x8A then @m_emStrSize = :STR_NORMAL # NSZ
311
- when 0x20 then @dst+=' ' # space
312
- when 0xA0 then @dst+=' ' # space(ARIB)
313
- when 0x09 then @dst+=' ' # HT
314
- when 0x0D then @dst+="\r"
315
- when 0x0A then @dst+="\r"
316
- else
317
- end
318
- end
319
- end
320
- @dst
321
- end
322
- end
323
- end
324
-
325
- __END__
1
+ #! ruby
2
+ # -*- encoding: utf-8 -*-
3
+
4
+ module Ariblib
5
+ class String
6
+ DesignationGSET={
7
+ 0x42 => [:set_code_group, [:put_kanji ,true ].freeze].freeze,#:CODE_KANJI
8
+ 0x4A => [:set_code_group, [:put_alphanumeric ,false].freeze].freeze,#:CODE_ALPHANUMERIC
9
+ 0x30 => [:set_code_group, [:put_hiragana ,false].freeze].freeze,#:CODE_HIRAGANA
10
+ 0x31 => [:set_code_group, [:put_katakana ,false].freeze].freeze,#:CODE_KATAKANA
11
+ 0x32 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_A
12
+ 0x33 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_B
13
+ 0x34 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_C
14
+ 0x35 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_D
15
+ 0x36 => [:set_code_group, [:put_alphanumeric ,false].freeze].freeze,#:CODE_PROP_ALPHANUMERIC
16
+ 0x37 => [:set_code_group, [:put_hiragana ,false].freeze].freeze,#:CODE_PROP_HIRAGANA
17
+ 0x38 => [:set_code_group, [:put_katakana ,false].freeze].freeze,#:CODE_PROP_KATAKANA
18
+ 0x49 => [:set_code_group, [:put_jis_katakana ,false].freeze].freeze,#:CODE_JIS_X0201_KATAKANA
19
+ 0x39 => [:set_code_group, [:put_kanji ,true ].freeze].freeze,#:CODE_JIS_KANJI_PLANE_1
20
+ 0x3A => [:set_code_group, [:put_kanji ,true ].freeze].freeze,#:CODE_JIS_KANJI_PLANE_2
21
+ 0x3B => [:set_code_group, [:put_symbols ,true ].freeze].freeze,#:CODE_ADDITIONAL_SYMBOLS
22
+ }.freeze
23
+ DesignationDRCS={
24
+ 0x40 => [:set_code_group, [:put_ignore,true ].freeze].freeze,# DRCS-0
25
+ 0x41 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-1
26
+ 0x42 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-2
27
+ 0x43 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-3
28
+ 0x44 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-4
29
+ 0x45 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-5
30
+ 0x46 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-6
31
+ 0x47 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-7
32
+ 0x48 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-8
33
+ 0x49 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-9
34
+ 0x4A => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-10
35
+ 0x4B => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-11
36
+ 0x4C => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-12
37
+ 0x4D => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-13
38
+ 0x4E => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-14
39
+ 0x4F => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-15
40
+ 0x70 => [:set_code_group, [:put_ignore,false].freeze].freeze,# Macro
41
+ }.freeze
42
+
43
+ Esc_4th=DesignationDRCS.freeze
44
+ Esc_3rd_drcs=DesignationDRCS.merge({0x20 => [:esc_seq,Esc_4th,nil].freeze}).freeze
45
+ Esc_3rd_gset=DesignationGSET.merge({0x20 => [:esc_seq,Esc_4th,nil].freeze}).freeze
46
+ Esc_2nd={
47
+ 0x20 => [:esc_seq,Esc_3rd_drcs ,nil].freeze,
48
+ 0x28 => [:esc_seq,Esc_3rd_drcs , 0].freeze,
49
+ 0x29 => [:esc_seq,Esc_3rd_gset , 1].freeze,
50
+ 0x2A => [:esc_seq,Esc_3rd_gset , 2].freeze,
51
+ 0x2B => [:esc_seq,Esc_3rd_gset , 3].freeze,
52
+ }.merge(DesignationGSET).freeze
53
+ Esc_1st={
54
+ # Invocation of code elements
55
+ 0x6E => [:set_locking_gl,2].freeze,# LS2
56
+ 0x6F => [:set_locking_gl,3].freeze,# LS3
57
+ 0x7E => [:set_locking_gr,1].freeze,# LS1R
58
+ 0x7D => [:set_locking_gr,2].freeze,# LS2R
59
+ 0x7C => [:set_locking_gr,3].freeze,# LS3R
60
+ # Designation of graphic sets
61
+ 0x24 => [:esc_seq,Esc_2nd,0].freeze,
62
+ 0x28 => [:esc_seq,Esc_2nd,0].freeze,
63
+ 0x29 => [:esc_seq,Esc_2nd,1].freeze,
64
+ 0x2A => [:esc_seq,Esc_2nd,2].freeze,
65
+ 0x2B => [:esc_seq,Esc_2nd,3].freeze,
66
+ }.freeze
67
+ Esc_Error=[:escape_error].freeze
68
+
69
+ Ctrl_code={
70
+ 0x0F => [:set_locking_gl , 0 ].freeze,# LS0
71
+ 0x0E => [:set_locking_gl , 1 ].freeze,# LS1
72
+ 0x19 => [:set_single_gl , 2 ].freeze,# SS2
73
+ 0x1D => [:set_single_gl , 3 ].freeze,# SS3
74
+ 0x1B => [:esc_seq ,Esc_1st,nil].freeze, # ESC
75
+ #0x89 => [:set_em_str_size , :STR_MEDIUM ].freeze,# MSZ
76
+ #0x8A => [:set_em_str_size , :STR_NORMAL ].freeze,# NSZ
77
+ 0x20 => [:put_alphanumeric_narrow, 0x20 ].freeze,# space
78
+ 0xA0 => [:put_alphanumeric_narrow, 0x20 ].freeze,# space(ARIB)
79
+ 0x09 => [:put_alphanumeric_narrow, 0x20 ].freeze,# HT
80
+ 0x0D => [:put_alphanumeric_narrow, 0x0d ].freeze,
81
+ 0x0A => [:put_alphanumeric_narrow, 0x0d ].freeze,
82
+ }.freeze
83
+
84
+ def set_em_str_size(val)
85
+ @m_emStrSize = val
86
+ end
87
+ def set_single_gl(val)
88
+ @m_pSingleGL = val
89
+ end
90
+ def set_locking_gl(val)
91
+ @m_pLockingGL = val
92
+ end
93
+ def set_locking_gr(val)
94
+ @m_pLockingGR = val
95
+ end
96
+ def set_code_group(val)
97
+ @m_CodeG[@byIndexG]=val
98
+ end
99
+ def escape_error
100
+ end
101
+ def esc_seq(hash , byIndexG)
102
+ @byIndexG=byIndexG if byIndexG
103
+ args=hash.fetch(@bs.getc,Esc_Error)
104
+ send *args if @bs.pos <= @len
105
+ end
106
+
107
+ Code_kanji = [0x1B, 0x24, 0x40,nil,nil,0x1B,0x28,0x4a]
108
+ Code_alphanumeric = (
109
+ "                "+
110
+ "                "+
111
+ " !”#$%&’()*+,-./"+
112
+ "0123456789:;<=>?"+
113
+ "@ABCDEFGHIJKLMNO"+
114
+ "PQRSTUVWXYZ[¥]^_"+
115
+ " abcdefghijklmno"+
116
+ "pqrstuvwxyz{|} ̄ ").freeze
117
+ Code_hiragana = (
118
+ "                "+
119
+ "                "+
120
+ " ぁあぃいぅうぇえぉおかがきぎく"+
121
+ "ぐけげこごさざしじすずせぜそぞた"+
122
+ "だちぢっつづてでとどなにぬねのは"+
123
+ "ばぱひびぴふぶぷへべぺほぼぽまみ"+
124
+ "むめもゃやゅゆょよらりるれろゎわ"+
125
+ "ゐゑをん   ゝゞー。「」、・ ").freeze
126
+ Code_katakana = (
127
+ "                "+
128
+ "                "+
129
+ " ァアィイゥウェエォオカガキギク"+
130
+ "グケゲコゴサザシジスズセゼソゾタ"+
131
+ "ダチヂッツヅテデトドナニヌネノハ"+
132
+ "バパヒビピフブプヘベペホボポマミ"+
133
+ "ムメモャヤュユョヨラリルレロヮワ"+
134
+ "ヰヱヲンヴヵヶヽヾー。「」、・ ").freeze
135
+ Code_jis_katakana = (
136
+ "                "+
137
+ "                "+
138
+ " 。「」、・ヲァィゥェォャュョッ"+
139
+ "ーアイウエオカキクケコサシスセソ"+
140
+ "タチツテトナニヌネノハヒフヘホマ"+
141
+ "ミムメモヤユヨラリルレロワン゛゜"+
142
+ "                "+
143
+ "                ").freeze
144
+ Code_gaiji = {
145
+ 0x7A => [ nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x21-0x2f
146
+ nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x30-0x3f
147
+ nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x40-0x4f
148
+ "【HV】","【SD】","【P】","【W】","【MV】","【手】","【字】","【双】",
149
+ "【デ】","【S】","【二】","【多】","【解】","【SS】","【B】","【N】",
150
+ "■" ,"●" ,"【天】","【交】","【映】","【無】","【料】","【年齢制限】",
151
+ "【前】","【後】","【再】","【新】","【初】","【終】","【生】","【販】",
152
+ "【声】","【吹】","【PPV】","(秘)","ほか",],
153
+ 0x7C=>[ "→" ,"←" ,"↑" ,"↓" ,"●" ,"○" ,"年" ,
154
+ "月" ,"日" ,"円" ,"㎡" ,"㎥" ,"㎝" ,"㎠" ,"㎤" ,
155
+ "0." ,"1." ,"2." ,"3." ,"4." ,"5." ,"6." ,"7." ,
156
+ "8." ,"9." ,"氏" ,"副" ,"元" ,"故" ,"前" ,"[新]",
157
+ "0," ,"1," ,"2," ,"3," ,"4," ,"5," ,"6," ,"7," ,
158
+ "8," ,"9," ,"(社)","(財)","(有)","(株)","(代)","(問)",
159
+ "▶" ,"◀" ,"〖" ,"〗" ,"⟐" ,"^2" ,"^3" ,"(CD)",
160
+ "(vn)","(ob)","(cb)","(ce" ,"mb)" ,"(hp)","(br)","(p)" ,
161
+ "(s)" ,"(ms)","(t)" ,"(bs)","(b)" ,"(tb)","(tp)","(ds)",
162
+ "(ag)","(eg)","(vo)","(fl)","(ke" ,"y)" ,"(sa" ,"x)" ,
163
+ "(sy" ,"n)" ,"(or" ,"g)" ,"(pe" ,"r)" ,"(R)" ,"(C)" ,
164
+ "(箏)","DJ" ,"[演]","Fax",],
165
+ 0x7D=>[ "㈪" ,"㈫" ,"㈬" ,
166
+ "㈭" ,"㈮" ,"㈯" ,"㈰" ,
167
+ "㈷" ,"㍾" ,"㍽" ,"㍼" ,
168
+ "㍻" ,"№" ,"℡" ,"〶" ,
169
+ "○" ,"〔本〕" ,"〔三〕" ,"〔二〕" ,
170
+ "〔安〕" ,"〔点〕" ,"〔打〕" ,"〔盗〕" ,
171
+ "〔勝〕" ,"〔敗〕" ,"〔S〕" ,"[投]" ,
172
+ "[捕]" ,"[一]" ,"[二]" ,"[三]" ,
173
+ "[遊]" ,"[左]" ,"[中]" ,"[右]" ,
174
+ "[指]" ,"[走]" ,"[打]" ,"㍑" ,
175
+ "㎏" ,"㎐" ,"ha" ,"㎞" ,
176
+ "㎢" ,"㍱" ,"・" ,"・" ,
177
+ "1/2" ,"0/3" ,"1/3" ,"2/3" ,
178
+ "1/4" ,"3/4" ,"1/5" ,"2/5" ,
179
+ "3/5" ,"4/5" ,"1/6" ,"5/6" ,
180
+ "1/7" ,"1/8" ,"1/9" ,"1/10" ,
181
+ "☀" ,"☁" ,"☂" ,"☃" ,
182
+ "☖" ,"☗" ,"▽" ,"▼" ,
183
+ "♦" ,"♥" ,"♣" ,"♠" ,
184
+ "⌺" ,"⦿" ,"‼" ,"⁉" ,
185
+ "(曇/晴)","☔" ,"(雨)" ,"(雪)" ,
186
+ "(大雪)" ,"⚡" ,"(雷雨)" ," " ,
187
+ "・" ,"・" ,"♬" "☎" ,],
188
+ 0x7E=>[ "Ⅰ" ,"Ⅱ" ,"Ⅲ" ,"Ⅳ" ,"Ⅴ" ,"Ⅵ" ,"Ⅶ" ,
189
+ "Ⅷ" ,"Ⅸ" ,"Ⅹ" ,"Ⅺ" ,"Ⅻ" ,"⑰" ,"⑱" ,"⑲" ,
190
+ "⑳" ,"⑴" ,"⑵" ,"⑶" ,"⑷" ,"⑸" ,"⑹" ,"⑺" ,
191
+ "⑻" ,"⑼" ,"⑽" ,"⑾" ,"⑿" ,"㉑" ,"㉒" ,"㉓" ,
192
+ "㉔" ,"(A)","(B)","(C)","(D)","(E)","(F)","(G)",
193
+ "(H)","(I)","(J)","(K)","(L)","(M)","(N)","(O)",
194
+ "(P)","(Q)","(R)","(S)","(T)","(U)","(V)","(W)",
195
+ "(X)","(Y)","(Z)","㉕" ,"㉖" ,"㉗" ,"㉘" ,"㉙" ,
196
+ "㉚" ,"①" ,"②" ,"③" ,"④" ,"⑤" ,"⑥" ,"⑦" ,
197
+ "⑧" ,"⑨" ,"⑩" ,"⑪" ,"⑫" ,"⑬" ,"⑭" ,"⑮" ,
198
+ "⑯" ,"❶" ,"❷" ,"❸" ,"❹" ,"❺" ,"❻" ,"❼" ,
199
+ "❽" ,"❾" ,"❿" ,"⓫" ,"⓬" ,"㉛" ,],
200
+ 0x75=>[ "㐂","亭","份","仿","侚","俉","傜",
201
+ "儞","冼","㔟","匇","卡","卬","詹","吉",
202
+ "呍","咖","咜","咩","唎","啊","噲","囤",
203
+ "圳","圴","塚","墀","姤","娣","婕","寬",
204
+ "﨑","㟢","庬","弴","彅","德","怗","恵",
205
+ "愰","昤","曈","曙","曺","曻","桒","・",
206
+ "椑","椻","橅","檑","櫛","・","・","・",
207
+ "毱","泠","洮","海","涿","淊","淸","渚",
208
+ "潞","濹","灤","・","・","煇","燁","爀",
209
+ "玟","・","珉","珖","琛","琡","琢","琦",
210
+ "琪","琬","琹","瑋","㻚","畵","疁","睲",
211
+ "䂓","磈","磠","祇","禮","・","・",],
212
+ 0x76=>[ "・","秚","稞","筿","簱","䉤","綋",
213
+ "羡","脘","脺","・","芮","葛","蓜","蓬",
214
+ "蕙","藎","蝕","蟬","蠋","裵","角","諶",
215
+ "跎","辻","迶","郝","鄧","鄭","醲","鈳",
216
+ "銈","錡","鍈","閒","雞","餃","饀","髙",
217
+ "鯖","鷗","麴","麵",],
218
+ }
219
+ Code_gaiji.default=[]
220
+ Code_gaiji.freeze
221
+
222
+ def put_kanji(char1,char2)
223
+ Code_kanji[3]=char1
224
+ Code_kanji[4]=char2
225
+ @dst+=Code_kanji.pack('C*').force_encoding('ISO-2022-JP').encode('utf-8')
226
+ #rescue => e
227
+ # puts e.message
228
+ # p (@bs.pos-@debug_pos)/8
229
+ # @bs.pos=@debug_pos
230
+ # p @bs.str(@debug_len).unpack('C*')
231
+ # puts @dst
232
+ # exit
233
+ end
234
+ def put_alphanumeric(char1,char2)
235
+ @dst+=char1.chr
236
+ end
237
+ def put_alphanumeric_narrow(char1,char2)
238
+ @dst+=char1.chr
239
+ end
240
+ def put_alphanumeric_wide(char1,char2)
241
+ @dst+=Code_alphanumeric[char1]
242
+ end
243
+ def put_hiragana(char1,char2)
244
+ @dst+=Code_hiragana[char1]
245
+ end
246
+ def put_katakana(char1,char2)
247
+ @dst+=Code_katakana[char1]
248
+ end
249
+ def put_jis_katakana(char1,char2)
250
+ @dst+=Code_jis_katakana[char1]
251
+ end
252
+ def put_symbols(char1,char2)
253
+ return if char2 < 0x21
254
+ @dst+=Code_gaiji[char1][char2-0x21]||''
255
+ end
256
+ def put_ignore(char1,char2)
257
+ end
258
+
259
+ def initialize(bs,len)
260
+ @len=bs.pos+len*8
261
+ @bs=bs
262
+ @dst=''.force_encoding('utf-8')
263
+
264
+ # 状態初期設定
265
+ @m_CodeG =[ DesignationGSET[0x42][1],
266
+ DesignationGSET[0x4a][1],
267
+ DesignationGSET[0x30][1],
268
+ DesignationGSET[0x31][1]]
269
+ @m_pLockingGL = 0
270
+ @m_pLockingGR = 2
271
+ @m_pSingleGL = nil
272
+
273
+ #@str=bs.str(len).unpack('C*')
274
+ #bs.pos-=len*8
275
+ #@debug_pos=bs.pos
276
+ #@debug_len=len
277
+
278
+ conv
279
+ end
280
+
281
+ def to_utf8
282
+ @dst
283
+ end
284
+
285
+ def conv
286
+ #@m_emStrSize = :STR_NORMAL
287
+ while(@bs.pos < @len)
288
+ dwSrcData = @bs.getc
289
+
290
+ if((dwSrcData >= 0x21) && (dwSrcData <= 0x7E)) #GL領域
291
+ curCodeSet = @m_CodeG[@m_pSingleGL || @m_pLockingGL];
292
+ @m_pSingleGL=nil
293
+ char2 = (curCodeSet[1])? @bs.getc : nil #// 2バイトコード
294
+ send( curCodeSet[0],dwSrcData,char2) if @bs.pos <= @len
295
+
296
+ elsif((dwSrcData >= 0xA1) && (dwSrcData <= 0xFE)) #// GR領域
297
+ curCodeSet = @m_CodeG[@m_pLockingGR];
298
+ char2 = (curCodeSet[1])? @bs.getc : nil #// 2バイトコード
299
+ send( curCodeSet[0],dwSrcData & 0x7f,char2 & 0x7f) if @bs.pos <= @len
300
+
301
+ else
302
+ #// 制御コード
303
+ case(dwSrcData)
304
+ when 0x0F then @m_pLockingGL = 0 # LS0
305
+ when 0x0E then @m_pLockingGL = 1 # LS1
306
+ when 0x19 then @m_pSingleGL = 2 # SS2
307
+ when 0x1D then @m_pSingleGL = 3 # SS3
308
+ when 0x1B then esc_seq(Esc_1st,nil) # ESC
309
+ #when 0x89 then @m_emStrSize = :STR_MEDIUM # MSZ
310
+ #when 0x8A then @m_emStrSize = :STR_NORMAL # NSZ
311
+ when 0x20 then @dst+=' ' # space
312
+ when 0xA0 then @dst+=' ' # space(ARIB)
313
+ when 0x09 then @dst+=' ' # HT
314
+ when 0x0D then @dst+="\r"
315
+ when 0x0A then @dst+="\r"
316
+ else
317
+ end
318
+ end
319
+ end
320
+ @dst
321
+ end
322
+ end
323
+ end
324
+
325
+ __END__