6 # http://www.ctan.org/tex-archive/macros/texinfo/texinfo/intl/config.charset
7 # Fri, 30 May 2003 00:09:00 GMT'
9 OS = Config::CONFIG["target_os"]
10 SHELL = Config::CONFIG['SHELL']
12 class Hash::Ordered < Hash
14 val = super and val.last
17 ary = fetch(key) {return super(key, [self.size, key, val])} and
21 values.sort.collect {|i, *rest| rest}
28 def charset_alias(config_charset, mapfile, target = OS)
29 map = Hash::Ordered.new
31 open(config_charset) do |input|
32 input.find {|line| /^case "\$os" in/ =~ line} or break
34 /^\s*([-\w\*]+(?:\s*\|\s*[-\w\*]+)*)(?=\))/ =~ line and
35 $&.split('|').any? {|pattern| File.fnmatch?(pattern.strip, target)}
39 when /^\s*echo "(?:\$\w+\.)?([-\w*]+)\s+([-\w]+)"/
55 # get rid of tilde/yen problem.
56 map['shift_jis'] = 'cp932'
59 map = map.sort.collect do |can, *sys|
60 if sys.grep(/^en_us(?=.|$)/i) {break true} == true
61 noen = %r"^(?!en_us)\w+_\w+#{Regexp.new($')}$"i #"
62 sys.reject! {|s| noen =~ s}
68 st.delete_if {|sys, i| i == 1}.empty?
69 st.keys.each {|sys| st[sys] = nil}
72 f.puts("require 'iconv.so'")
77 map.each do |can, sys|
81 sys = (st[sys] = "sys#{i+=1}") + " = '#{sys}'.freeze"
83 sys = "'#{sys}'.freeze"
85 f.puts(" charset_map['#{can}'] = #{sys}")
90 open(mapfile, "w", &writer)
99 opt.banner << " config.status map.rb"
100 opt.on("--target OS") {|t| target = t}
101 opt.parse! and (1..2) === ARGV.size
102 end or abort opt.to_s
103 charset_alias(ARGV[0], ARGV[1], target)