ariblib 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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__