Class: TECSIO
- Defined in:
- lib/tecsgen/core/bnf.tab.rb,
lib/tecsgen/core/bnf-deb.tab.rb
Overview
TECSIO
Ruby2.0(1.9) 対応に伴い導入したクラス
SJIS 以外では、ASCII-8BIT として入力する
Class Method Summary collapse
-
.foreach(file) ⇒ Object
ブロック引数 { |line| }.
-
.str_code_convert(msg, str) ⇒ Object
文字コードが相違する場合一致させる msg と str の文字コードが相違する場合、str を msg の文字コードに変換する 変換不可の文字コードは ‘?’ (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換.
Class Method Details
.foreach(file) ⇒ Object
ブロック引数 { |line| }
5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 |
# File 'lib/tecsgen/core/bnf.tab.rb', line 5148 def self.foreach(file) # ブロック引数 { |line| } pr = Proc.new # このメソッドのブロック引数を pr に代入 msg = "E".encode $Ruby19_File_Encode if( $Ruby19_File_Encode == "Shift_JIS" ) # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる. # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される. # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる. # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、 # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある. mode = "r:Windows-31J" else mode = "r:#{$Ruby19_File_Encode}" end f = File.open( file, mode ) begin f.each{ |line| # dbgPrint line line = str_code_convert( msg, line ) pr.call( line ) } ensure f.close end end |
.str_code_convert(msg, str) ⇒ Object
文字コードが相違する場合一致させる
msg と str の文字コードが相違する場合、str を msg の文字コードに変換する 変換不可の文字コードは ‘?’ (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
このメソッドは、エラーメッセージ出力でも使用されていることに注意.
msg_enc::Encode | String
5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 |
# File 'lib/tecsgen/core/bnf.tab.rb', line 5183 def self.str_code_convert( msg, str ) if msg.encoding != str.encoding then option = { :invalid => :replace, :undef => :replace } # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd) # return str.encode( msg.encoding, option ) str = str.encode( "utf-8", option ) return str.encode( msg.encoding, option ) else return str end end |