Skip to content

Commit

Permalink
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions scripts/generate.rb
Original file line number Diff line number Diff line change
@@ -9,6 +9,7 @@

def generate_data
generate_encoding_list
generate_transcoder_list
generate_transoder_data
generate_coderange_data
generate_coderange_list
@@ -79,6 +80,34 @@ def generate_encoding_list

end

def generate_transcoder_list
generic_list = []
transcoder_list = []

Dir["#{REPO_PATH}/enc/trans/*.c"].reject{|f| f =~ /transdb/}.each do |trans_file|
name = trans_file[/(\w+)\.c/, 1].split('_').map{|e| e.capitalize}.join("")
trans_src = open(trans_file){|f|f.read}

trans_src.scan(/static\s+const\s+rb_transcoder.*?(\w+)\s+=\s+\{(.+?)\};/m) do |t_name, body|
n = t_name.split('_')
t_name = n[1].capitalize
t_name += '_' + n[2..-1].join('_') unless n[2..-1].empty?
body = body.gsub(/(\/\*.*?\*\/)/, "").split(',').map{|e|e.strip}
src, dst, tree_start, table_info, iul, max_in, max_out, conv, state_size, state_init, state_fini, *funcs = body
tree_start = trans_src[/#define\s+#{tree_start}\s+WORDINDEX2INFO\((\d+)\)/, 1].to_i << 2
state_size = "0" if state_size == "sizeof(struct from_utf8_mac_status)"

generic_list << [src, dst, tree_start, "\"#{name}\"", iul, max_in, max_out, "AsciiCompatibility.#{conv.split('_').last.upcase}", state_size]
transcoder_list << [src, dst, t_name, !funcs.all?{|f|f == "NULL"}]
end

end
open("#{SRC_DIR}/transcode/TranscoderList.java", "wb") << open("TranscoderListTemplate.java", "rb"){|f|f.read}.
sub(/%\{list\}/, transcoder_list.map{|src, dst, cls, specific| "#{INDENT*2}TranscoderDB.declare(#{src}, #{dst}, #{specific ? '"' + cls + '"' : 'null /*' + cls + '*/'});"}.join("\n")).
sub(/%\{generic\}/, generic_list.map{|g| "#{INDENT*2}new GenericTranscoderEntry(#{g.join(', ')})"}.join(",\n"))

end

def generate_transoder_data
Dir["#{REPO_PATH}/enc/trans/*.c"].reject{|f| f =~ /transdb/}.each do |trans_file|
# next unless trans_file =~ /utf8/

0 comments on commit a45e233

Please sign in to comment.