Class: Ariblib::String

Inherits:
Object
  • Object
show all
Defined in:
lib/ariblib/String.rb

Constant Summary collapse

DesignationGSET =
{
	0x42 => [:set_code_group, [:put_kanji        ,true ].freeze].freeze,#:CODE_KANJI             
	0x4A => [:set_code_group, [:put_alphanumeric ,false].freeze].freeze,#:CODE_ALPHANUMERIC      
	0x30 => [:set_code_group, [:put_hiragana     ,false].freeze].freeze,#:CODE_HIRAGANA          
	0x31 => [:set_code_group, [:put_katakana     ,false].freeze].freeze,#:CODE_KATAKANA          
	0x32 => [:set_code_group, [:put_ignore       ,false].freeze].freeze,#:CODE_MOSAIC_A          
	0x33 => [:set_code_group, [:put_ignore       ,false].freeze].freeze,#:CODE_MOSAIC_B          
	0x34 => [:set_code_group, [:put_ignore       ,false].freeze].freeze,#:CODE_MOSAIC_C          
	0x35 => [:set_code_group, [:put_ignore       ,false].freeze].freeze,#:CODE_MOSAIC_D          
	0x36 => [:set_code_group, [:put_alphanumeric ,false].freeze].freeze,#:CODE_PROP_ALPHANUMERIC 
	0x37 => [:set_code_group, [:put_hiragana     ,false].freeze].freeze,#:CODE_PROP_HIRAGANA     
	0x38 => [:set_code_group, [:put_katakana     ,false].freeze].freeze,#:CODE_PROP_KATAKANA     
	0x49 => [:set_code_group, [:put_jis_katakana ,false].freeze].freeze,#:CODE_JIS_X0201_KATAKANA
	0x39 => [:set_code_group, [:put_kanji        ,true ].freeze].freeze,#:CODE_JIS_KANJI_PLANE_1 
	0x3A => [:set_code_group, [:put_kanji        ,true ].freeze].freeze,#:CODE_JIS_KANJI_PLANE_2 
	0x3B => [:set_code_group, [:put_symbols      ,true ].freeze].freeze,#:CODE_ADDITIONAL_SYMBOLS
}.freeze
DesignationDRCS =
{
	0x40 => [:set_code_group, [:put_ignore,true ].freeze].freeze,# DRCS-0
	0x41 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-1
	0x42 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-2
	0x43 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-3
	0x44 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-4
	0x45 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-5
	0x46 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-6
	0x47 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-7
	0x48 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-8
	0x49 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-9
	0x4A => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-10
	0x4B => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-11
	0x4C => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-12
	0x4D => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-13
	0x4E => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-14
	0x4F => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-15
	0x70 => [:set_code_group, [:put_ignore,false].freeze].freeze,# Macro
}.freeze
Esc_4th =
DesignationDRCS.freeze
Esc_3rd_drcs =
DesignationDRCS.merge({0x20 => [:esc_seq,Esc_4th,nil].freeze}).freeze
Esc_3rd_gset =
DesignationGSET.merge({0x20 => [:esc_seq,Esc_4th,nil].freeze}).freeze
Esc_2nd =
{
	0x20 => [:esc_seq,Esc_3rd_drcs ,nil].freeze,
	0x28 => [:esc_seq,Esc_3rd_drcs ,  0].freeze,
	0x29 => [:esc_seq,Esc_3rd_gset ,  1].freeze,
	0x2A => [:esc_seq,Esc_3rd_gset ,  2].freeze,
	0x2B => [:esc_seq,Esc_3rd_gset ,  3].freeze,
}.merge(DesignationGSET).freeze
Esc_1st =
{
	# Invocation of code elements
	0x6E => [:set_locking_gl,2].freeze,# LS2
	0x6F => [:set_locking_gl,3].freeze,# LS3
	0x7E => [:set_locking_gr,1].freeze,# LS1R
	0x7D => [:set_locking_gr,2].freeze,# LS2R
	0x7C => [:set_locking_gr,3].freeze,# LS3R
		# Designation of graphic sets
	0x24 => [:esc_seq,Esc_2nd,0].freeze,
	0x28 => [:esc_seq,Esc_2nd,0].freeze,
	0x29 => [:esc_seq,Esc_2nd,1].freeze,
	0x2A => [:esc_seq,Esc_2nd,2].freeze,
	0x2B => [:esc_seq,Esc_2nd,3].freeze,
}.freeze
Esc_Error =
[:escape_error].freeze
Ctrl_code =
{
	0x0F => [:set_locking_gl , 0 ].freeze,# LS0
	0x0E => [:set_locking_gl , 1 ].freeze,# LS1
	0x19 => [:set_single_gl  , 2 ].freeze,# SS2
	0x1D => [:set_single_gl  , 3 ].freeze,# SS3
	0x1B => [:esc_seq ,Esc_1st,nil].freeze,  # ESC
	#0x89 => [:set_em_str_size , :STR_MEDIUM ].freeze,# MSZ
	#0x8A => [:set_em_str_size , :STR_NORMAL ].freeze,# NSZ
	0x20 => [:put_alphanumeric_narrow, 0x20 ].freeze,# space
	0xA0 => [:put_alphanumeric_narrow, 0x20 ].freeze,# space(ARIB)
	0x09 => [:put_alphanumeric_narrow, 0x20 ].freeze,# HT
	0x0D => [:put_alphanumeric_narrow, 0x0d ].freeze,
	0x0A => [:put_alphanumeric_narrow, 0x0d ].freeze,
}.freeze
Code_kanji =
[0x1B, 0x24, 0x40,nil,nil,0x1B,0x28,0x4a]
Code_alphanumeric =
(
"                "+
"                "+
" !”#$%&’()*+,-./"+
"0123456789:;<=>?"+
"@ABCDEFGHIJKLMNO"+
"PQRSTUVWXYZ[¥]^_"+
" abcdefghijklmno"+
"pqrstuvwxyz{|} ̄ ").freeze
Code_hiragana =
(
"                "+
"                "+
" ぁあぃいぅうぇえぉおかがきぎく"+
"ぐけげこごさざしじすずせぜそぞた"+
"だちぢっつづてでとどなにぬねのは"+
"ばぱひびぴふぶぷへべぺほぼぽまみ"+
"むめもゃやゅゆょよらりるれろゎわ"+
"ゐゑをん   ゝゞー。「」、・ ").freeze
Code_katakana =
(
"                "+
"                "+
" ァアィイゥウェエォオカガキギク"+
"グケゲコゴサザシジスズセゼソゾタ"+
"ダチヂッツヅテデトドナニヌネノハ"+
"バパヒビピフブプヘベペホボポマミ"+
"ムメモャヤュユョヨラリルレロヮワ"+
"ヰヱヲンヴヵヶヽヾー。「」、・ ").freeze
Code_jis_katakana =
(
"                "+
"                "+
" 。「」、・ヲァィゥェォャュョッ"+
"ーアイウエオカキクケコサシスセソ"+
"タチツテトナニヌネノハヒフヘホマ"+
"ミムメモヤユヨラリルレロワン゛゜"+
"                "+
"                ").freeze
Code_gaiji =
{
 0x7A => [ nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x21-0x2f
       nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x30-0x3f
       nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x40-0x4f
       "【HV】","【SD】","【P】","【W】","【MV】","【手】","【字】","【双】",
       "【デ】","【S】","【二】","【多】","【解】","【SS】","【B】","【N】",
       ""    ,""    ,"【天】","【交】","【映】","【無】","【料】","【年齢制限】",
       "【前】","【後】","【再】","【新】","【初】","【終】","【生】","【販】",
       "【声】","【吹】","【PPV】","(秘)","ほか",],
 0x7C=>[      ""  ,""  ,""  ,""  ,""  ,""  ,""  ,
       ""  ,""  ,""  ,""  ,""  ,""  ,""  ,""  ,
       "0." ,"1." ,"2." ,"3." ,"4." ,"5." ,"6." ,"7." ,
       "8." ,"9." ,""  ,""  ,""  ,""  ,""  ,"[新]",
       "0," ,"1," ,"2," ,"3," ,"4," ,"5," ,"6," ,"7," ,
       "8," ,"9," ,"(社)","(財)","(有)","(株)","(代)","(問)",
       ""   ,""   ,""  ,""  ,""   ,"^2"  ,"^3"  ,"(CD)",
       "(vn)","(ob)","(cb)","(ce" ,"mb)" ,"(hp)","(br)","(p)" ,
       "(s)" ,"(ms)","(t)" ,"(bs)","(b)" ,"(tb)","(tp)","(ds)",
       "(ag)","(eg)","(vo)","(fl)","(ke" ,"y)"  ,"(sa" ,"x)"  ,
       "(sy" ,"n)"  ,"(or" ,"g)"  ,"(pe" ,"r)"  ,"(R)" ,"(C)" ,
       "(箏)","DJ"  ,"[演]","Fax",],
 0x7D=>[         ""     ,""     ,""     ,
       ""     ,""     ,""     ,""     ,
       ""     ,""     ,""     ,""     ,
       ""     ,""     ,""     ,""     ,
       ""     ,"〔本〕" ,"〔三〕" ,"〔二〕" ,
       "〔安〕" ,"〔点〕" ,"〔打〕" ,"〔盗〕" ,
       "〔勝〕" ,"〔敗〕" ,"〔S〕" ,"[投]" ,
       "[捕]" ,"[一]" ,"[二]" ,"[三]" ,
       "[遊]" ,"[左]" ,"[中]" ,"[右]" ,
       "[指]" ,"[走]" ,"[打]" ,""     ,
       ""     ,""     ,"ha"     ,""     ,
       ""     ,""     ,""     ,""     ,
       "1/2"    ,"0/3"    ,"1/3"    ,"2/3"    ,
       "1/4"    ,"3/4"    ,"1/5"    ,"2/5"    ,
       "3/5"    ,"4/5"    ,"1/6"    ,"5/6"    ,
       "1/7"    ,"1/8"    ,"1/9"    ,"1/10"   ,
       ""     ,""     ,""     ,""     ,
       ""     ,""     ,""     ,""     ,
       ""      ,""      ,""      ,""      ,
       ""      ,"⦿"     ,""      ,""      ,
       "(曇/晴)",""      ,"(雨)"   ,"(雪)"   ,
       "(大雪)" ,""      ,"(雷雨)" ," "     ,
       ""     ,""     ,""      ""      ,],
 0x7E=>[     "" ,"" ,"" ,"" ,"" ,"" ,"" ,
       "" ,"" ,"" ,"" ,"" ,"" ,"" ,"" ,
       "" ,"" ,"" ,"" ,"" ,"" ,"" ,"" ,
       "" ,"" ,"" ,"" ,"" ,"" ,"" ,"" ,
       "" ,"(A)","(B)","(C)","(D)","(E)","(F)","(G)",
       "(H)","(I)","(J)","(K)","(L)","(M)","(N)","(O)",
       "(P)","(Q)","(R)","(S)","(T)","(U)","(V)","(W)",
       "(X)","(Y)","(Z)","" ,"" ,"" ,"" ,"" ,
       "" ,"" ,"" ,"" ,"" ,"" ,"" ,"" ,
       "" ,"" ,"" ,"" ,"" ,"" ,"" ,"" ,
       "" ,"" ,"" ,"" ,"" ,"" ,"" ,"" ,
       "" ,"" ,"" ,"" ,"" ,"" ,],
 0x75=>[    "","","","仿","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","","涿","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","","","","",],
 0x76=>[    "","","","筿","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","","","","","",
       "","","","",],
}

Instance Method Summary collapse

Constructor Details

#initialize(bs, len) ⇒ String



259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
# File 'lib/ariblib/String.rb', line 259

def initialize(bs,len)
	@len=bs.pos+len*8
	@bs=bs
	@dst=''.force_encoding('utf-8')

	# 状態初期設定
	@m_CodeG =[ DesignationGSET[0x42][1],
	            DesignationGSET[0x4a][1],
	            DesignationGSET[0x30][1],
	            DesignationGSET[0x31][1]]
	@m_pLockingGL = 0
	@m_pLockingGR = 2
	@m_pSingleGL = nil

	#@str=bs.str(len).unpack('C*')
	#bs.pos-=len*8
	#@debug_pos=bs.pos
	#@debug_len=len

	conv
end

Instance Method Details

#convObject



285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
# File 'lib/ariblib/String.rb', line 285

def conv
	#@m_emStrSize = :STR_NORMAL
	while(@bs.pos < @len)
		dwSrcData = @bs.getc

		if((dwSrcData >= 0x21) && (dwSrcData <= 0x7E)) #GL領域
			curCodeSet = @m_CodeG[@m_pSingleGL || @m_pLockingGL];
			@m_pSingleGL=nil
			char2 = (curCodeSet[1])? @bs.getc  : nil #// 2バイトコード
			send( curCodeSet[0],dwSrcData,char2) if @bs.pos <= @len

		elsif((dwSrcData >= 0xA1) && (dwSrcData <= 0xFE)) #// GR領域
			curCodeSet = @m_CodeG[@m_pLockingGR];
			char2 = (curCodeSet[1])? @bs.getc  : nil #// 2バイトコード
			send( curCodeSet[0],dwSrcData & 0x7f,char2 & 0x7f) if @bs.pos <= @len

		else
			#// 制御コード
			case(dwSrcData)
				when 0x0F then @m_pLockingGL = 0 # LS0
				when 0x0E then @m_pLockingGL = 1 # LS1
				when 0x19 then @m_pSingleGL  = 2 # SS2
				when 0x1D then @m_pSingleGL  = 3 # SS3
				when 0x1B then esc_seq(Esc_1st,nil)  # ESC
				#when 0x89 then @m_emStrSize = :STR_MEDIUM # MSZ
				#when 0x8A then @m_emStrSize = :STR_NORMAL # NSZ
				when 0x20 then @dst+=' ' # space
				when 0xA0 then @dst+=' ' # space(ARIB)
				when 0x09 then @dst+=' ' # HT
				when 0x0D then @dst+="\r"
				when 0x0A then @dst+="\r"
			else
			end
		end
	end
	@dst
end

#esc_seq(hash, byIndexG) ⇒ Object



101
102
103
104
105
# File 'lib/ariblib/String.rb', line 101

def esc_seq(hash , byIndexG)
	@byIndexG=byIndexG if byIndexG
	args=hash.fetch(@bs.getc,Esc_Error)
	send *args if @bs.pos <= @len
end

#escape_errorObject



99
100
# File 'lib/ariblib/String.rb', line 99

def escape_error
end

#put_alphanumeric(char1, char2) ⇒ Object

rescue => e puts e.message p (@bs.pos-@debug_pos)/8 @bs.pos=@debug_pos p @bs.str(@debug_len).unpack(‘C*’) puts @dst exit



234
235
236
# File 'lib/ariblib/String.rb', line 234

def put_alphanumeric(char1,char2)
	@dst+=char1.chr
end

#put_alphanumeric_narrow(char1, char2) ⇒ Object



237
238
239
# File 'lib/ariblib/String.rb', line 237

def put_alphanumeric_narrow(char1,char2)
	@dst+=char1.chr
end

#put_alphanumeric_wide(char1, char2) ⇒ Object



240
241
242
# File 'lib/ariblib/String.rb', line 240

def put_alphanumeric_wide(char1,char2)
	@dst+=Code_alphanumeric[char1]
end

#put_hiragana(char1, char2) ⇒ Object



243
244
245
# File 'lib/ariblib/String.rb', line 243

def put_hiragana(char1,char2)
	@dst+=Code_hiragana[char1]
end

#put_ignore(char1, char2) ⇒ Object



256
257
# File 'lib/ariblib/String.rb', line 256

def put_ignore(char1,char2)
end

#put_jis_katakana(char1, char2) ⇒ Object



249
250
251
# File 'lib/ariblib/String.rb', line 249

def put_jis_katakana(char1,char2)
	@dst+=Code_jis_katakana[char1]
end

#put_kanji(char1, char2) ⇒ Object



222
223
224
225
226
227
228
229
230
231
232
233
# File 'lib/ariblib/String.rb', line 222

def put_kanji(char1,char2)
	Code_kanji[3]=char1
	Code_kanji[4]=char2
	@dst+=Code_kanji.pack('C*').force_encoding('ISO-2022-JP').encode('utf-8')
#rescue => e
#	puts e.message
#	p (@bs.pos-@debug_pos)/8
#	@bs.pos=@debug_pos
#	p @bs.str(@debug_len).unpack('C*')
#	puts @dst
#	exit
end

#put_katakana(char1, char2) ⇒ Object



246
247
248
# File 'lib/ariblib/String.rb', line 246

def put_katakana(char1,char2)
	@dst+=Code_katakana[char1]
end

#put_symbols(char1, char2) ⇒ Object



252
253
254
255
# File 'lib/ariblib/String.rb', line 252

def put_symbols(char1,char2)
	return if char2 < 0x21
	@dst+=Code_gaiji[char1][char2-0x21]||''
end

#set_code_group(val) ⇒ Object



96
97
98
# File 'lib/ariblib/String.rb', line 96

def set_code_group(val)
	@m_CodeG[@byIndexG]=val
end

#set_em_str_size(val) ⇒ Object



84
85
86
# File 'lib/ariblib/String.rb', line 84

def set_em_str_size(val)
	@m_emStrSize = val
end

#set_locking_gl(val) ⇒ Object



90
91
92
# File 'lib/ariblib/String.rb', line 90

def set_locking_gl(val)
	@m_pLockingGL = val
end

#set_locking_gr(val) ⇒ Object



93
94
95
# File 'lib/ariblib/String.rb', line 93

def set_locking_gr(val)
	@m_pLockingGR = val
end

#set_single_gl(val) ⇒ Object



87
88
89
# File 'lib/ariblib/String.rb', line 87

def set_single_gl(val)
	@m_pSingleGL = val
end

#to_utf8Object



281
282
283
# File 'lib/ariblib/String.rb', line 281

def to_utf8
	@dst
end