ruby1.9.1でTTSP(1.1.1)を実行しようとすると,invalid multibyte char (US-ASCII)になる場合の対処法

CygwinをアップデートしたらTTSP(1.1.1)が動かなくなった*1

----------------------------------------------------------------------
Execute TTG in auto_code_1
----------------------------------------------------------------------
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': /home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/common/bin/CommonModule.rb:2049: invalid multibyte char (US-ASCII) (SyntaxError)
/home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/common/bin/CommonModule.rb:2049: invalid multibyte char (US-ASCII)
/home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/common/bin/CommonModule.rb:2049: syntax error, unexpected $end, expecting keyword_end
  TTJ_ATTR_EMPTY  = "▒ʤ▒"
                       ^
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/common/bin/Config.rb:42:in `<top (required)>'
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/bin/ttg.rb:46:in `<main>'
TTG failed in auto_code_1

ぐぐると,どうやらruby1.9.1では日本語の対処が変わったようです。
invalid multibyte char (US-ASCII)とか出てきた
Ruby 1.9上のRailsでinvalid multibyte char (US-ASCII)の対処
なので,こちらも該当箇所のファイルの先頭に追加します。

#!ruby
# -*- coding: euc-jp -*- 
#
#  TTG

今のところ次のファイル修正しました。

ttsp/tools/ttg/bin/builder/HTMLBuilder.rb
ttsp/tools/ttg/common/bin/CommonModule.rb
ttsp/tools/ttg/ttj/bin/class/TTJModule.rb
ttsp/tools/ttg/ttj/bin/test_scenario/Condition.rb
ttg/ttj/bin/dictionary.rb

そろそろファイルの文字コードeucじゃなくてUTF-8に移行したほうがいいんじゃないですかね。

追記:TTSP1.1.2では以下のように対応しているようです。

#!ruby -Ke
#
#  TTG
...

って調べると,引っかかっていたKCODEの対応になっているようです。
なので,上記修正したファイルをTTSP1.1.2で修正したようにさらに変更しました。

#!ruby -Ke
# -*- coding: euc-jp -*- 
#
#  TTG

修正したファイル

ttsp/tools/ttg/ttj/bin/class/TTJModule.rb
ttsp/tools/ttg/ttj/bin/ttj.rb

最後にYAMLファイルのロード箇所を修正します。

ttsp/ttg/ttc/bin/class/TTCCommon.rbにkconvを追加します。

require "kconv"
require "yaml"
require "common/bin/CommonModule.rb"
require "ttc/bin/class/TTCError.rb"
require "ttc/bin/class/ObjectCommon.rb"
require "ttc/bin/kwalify.rb"
require "common/bin/Config.rb"

#=====================================================================
# TTCModule
#=====================================================================
module TTCModule
  include CommonModule

  #===================================================================
  # 概 要: YAMLファイルをロードする
  #===================================================================
  def load_yaml_file(sFileName)
    check_class(String, sFileName)  # ファイル名

    cConf = Config.new()
    begin
      if (cConf.use_yaml_library?())
        yaml = YAML.load(File.read(sFileName).toutf8)
      else
        yaml = Kwalify::Yaml.load_file(sFileName)
       end
    rescue SystemCallError
      raise(TTCError.new(sprintf(ERR_CANNOT_OPEN_FILE, sFileName) + "#{TTG_NL}(#{$!.message()})"))
    rescue ArgumentError
      raise(TTCError.new(sprintf(ERR_YAML_SYNTAX_INVALID, sFileName) + "#{TTG_NL}(#{$!.message()})"))
    rescue Kwalify::SyntaxError
      raise(TTCError.new(sprintf(ERR_YAML_SYNTAX_INVALID, sFileName) + "#{TTG_NL}(#{$!.message()})"))
    end

*1:1.1.2では対応しているはず