mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9514 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
#! /usr/bin/ruby
 | 
						|
require 'rbconfig'
 | 
						|
require 'optparse'
 | 
						|
 | 
						|
# http://www.ctan.org/tex-archive/macros/texinfo/texinfo/intl/config.charset
 | 
						|
# Fri, 30 May 2003 00:09:00 GMT'
 | 
						|
 | 
						|
HEADER = <<SRC
 | 
						|
require 'iconv.so'
 | 
						|
 | 
						|
class Iconv
 | 
						|
  case RUBY_PLATFORM
 | 
						|
SRC
 | 
						|
 | 
						|
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/i =~ 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
 | 
						|
 | 
						|
(1..2) === ARGV.size or abort "usage: #{$0} config_charset [mapfile]"
 | 
						|
charset_alias(*ARGV)
 |