blob: 44d5fcf1940d7223e0b40b34d7d2578dab7c869a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#! /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)
|