Skip to content

Commit a45e233

Browse files
committedDec 15, 2017
update generation script
1 parent 518b28f commit a45e233

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed
 

‎scripts/generate.rb

+29
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
def generate_data
1111
generate_encoding_list
12+
generate_transcoder_list
1213
generate_transoder_data
1314
generate_coderange_data
1415
generate_coderange_list
@@ -79,6 +80,34 @@ def generate_encoding_list
7980

8081
end
8182

83+
def generate_transcoder_list
84+
generic_list = []
85+
transcoder_list = []
86+
87+
Dir["#{REPO_PATH}/enc/trans/*.c"].reject{|f| f =~ /transdb/}.each do |trans_file|
88+
name = trans_file[/(\w+)\.c/, 1].split('_').map{|e| e.capitalize}.join("")
89+
trans_src = open(trans_file){|f|f.read}
90+
91+
trans_src.scan(/static\s+const\s+rb_transcoder.*?(\w+)\s+=\s+\{(.+?)\};/m) do |t_name, body|
92+
n = t_name.split('_')
93+
t_name = n[1].capitalize
94+
t_name += '_' + n[2..-1].join('_') unless n[2..-1].empty?
95+
body = body.gsub(/(\/\*.*?\*\/)/, "").split(',').map{|e|e.strip}
96+
src, dst, tree_start, table_info, iul, max_in, max_out, conv, state_size, state_init, state_fini, *funcs = body
97+
tree_start = trans_src[/#define\s+#{tree_start}\s+WORDINDEX2INFO\((\d+)\)/, 1].to_i << 2
98+
state_size = "0" if state_size == "sizeof(struct from_utf8_mac_status)"
99+
100+
generic_list << [src, dst, tree_start, "\"#{name}\"", iul, max_in, max_out, "AsciiCompatibility.#{conv.split('_').last.upcase}", state_size]
101+
transcoder_list << [src, dst, t_name, !funcs.all?{|f|f == "NULL"}]
102+
end
103+
104+
end
105+
open("#{SRC_DIR}/transcode/TranscoderList.java", "wb") << open("TranscoderListTemplate.java", "rb"){|f|f.read}.
106+
sub(/%\{list\}/, transcoder_list.map{|src, dst, cls, specific| "#{INDENT*2}TranscoderDB.declare(#{src}, #{dst}, #{specific ? '"' + cls + '"' : 'null /*' + cls + '*/'});"}.join("\n")).
107+
sub(/%\{generic\}/, generic_list.map{|g| "#{INDENT*2}new GenericTranscoderEntry(#{g.join(', ')})"}.join(",\n"))
108+
109+
end
110+
82111
def generate_transoder_data
83112
Dir["#{REPO_PATH}/enc/trans/*.c"].reject{|f| f =~ /transdb/}.each do |trans_file|
84113
# next unless trans_file =~ /utf8/

0 commit comments

Comments
 (0)
Please sign in to comment.