mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 487a267899
			
		
	
	
		487a267899
		
	
	
	
	
		
			
			git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27034 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/get/macros/texinfo/texinfo/gnulib/lib/config.charset
 | |
| # Tue, 25 Dec 2007 00:00: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)
 |