In Files

  • iconv/charset_alias.rb
  • iconv/mkwrapper.rb

Parent

Methods

Object

Public Instance Methods

charset_alias(config_charset, mapfile = nil) click to toggle source
 
               # File iconv/mkwrapper.rb, line 15
def charset_alias(config_charset, mapfile = nil)
  found = nil
  src = [HEADER]
  open(config_charset) do |input|
    input.find {|line| /^case "\$os" in/ =~ line} or return
    input.each do |line|
      case line
      when /^\s*([-\w\*]+(?:\s*\|\s*[-\w\*]+)*)(?=\))/
        (s = "  when ") << $&.split('|').collect {|targ|
          targ.strip!
          tail = targ.chomp!("*") ? '' : '\z'
          head = targ.slice!(/\A\*/) ? '' : '\A'
          targ.gsub!(/\*/, '.*')
          "/#{head}#{targ}#{tail}/"
        }.join(", ")
        src << s
        found = {}
      when /^\s*echo "(?:\$\w+\.)?([-\w*]+)\s+([-\w]+)"/
        sys, can = $1, $2
        can.downcase!
        unless found[can] or (/\Aen_(?!US\z)/ =~ sys && /\ACP437\z/ =~ can)
          found[can] = true
          src << "    charset_map['#{can}'] = '#{sys}'.freeze"
        end
      when /^\s*;;/
        found = nil
      end
    end
  end
  src << "  end" << "end"
  if mapfile
    open(mapfile, "wb") {|f| f.puts(*src)}
  else
    puts(*src)
  end
end