ruby-changes:7566
From: akr <ko1@a...>
Date: Wed, 3 Sep 2008 20:38:25 +0900 (JST)
Subject: [ruby-changes:7566] Ruby:r19087 (trunk): * tool/transcode-tblgen.rb (ArrayCode): new class.
akr 2008-09-03 20:36:04 +0900 (Wed, 03 Sep 2008) New Revision: 19087 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19087 Log: * tool/transcode-tblgen.rb (ArrayCode): new class. (ActionMap#gen_array_code): moved to ArrayCode. (ActionMap#numelt_array_code): ditto. (ActionMap#array_code_insert_at_last): ditto. (TRANSCODE_GENERATED_BYTES_CODE): use ArrayCode. (TRANSCODE_GENERATED_WORDS_CODE): ditto. Modified files: trunk/ChangeLog trunk/tool/transcode-tblgen.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 19086) +++ ChangeLog (revision 19087) @@ -1,3 +1,12 @@ +Wed Sep 3 20:34:10 2008 Tanaka Akira <akr@f...> + + * tool/transcode-tblgen.rb (ArrayCode): new class. + (ActionMap#gen_array_code): moved to ArrayCode. + (ActionMap#numelt_array_code): ditto. + (ActionMap#array_code_insert_at_last): ditto. + (TRANSCODE_GENERATED_BYTES_CODE): use ArrayCode. + (TRANSCODE_GENERATED_WORDS_CODE): ditto. + Wed Sep 3 20:08:35 2008 Tanaka Akira <akr@f...> * enc/trans/japanese.trans: new file. Index: tool/transcode-tblgen.rb =================================================================== --- tool/transcode-tblgen.rb (revision 19086) +++ tool/transcode-tblgen.rb (revision 19087) @@ -155,6 +155,32 @@ end end +class ArrayCode + def initialize(type, name) + @code = <<"End" +static const #{type} +#{name}[0] = { +}; +End + end + + def length + @code[/\[\d+\]/][1...-1].to_i + end + + def insert_at_last(num, str) + newnum = self.length + num + @code.sub!(/^(\};\n\z)/) { + str + $1 + } + @code.sub!(/\[\d+\]/) { "[#{newnum}]" } + end + + def to_s + @code.dup + end +end + class ActionMap def self.parse(hash) h = {} @@ -298,26 +324,6 @@ code end - def gen_array_code(type, name) - <<"End" -static const #{type} -#{name}[0] = { -}; -End - end - - def numelt_array_code(code) - code[/\[\d+\]/][1...-1].to_i - end - - def array_code_insert_at_last(code, num, str) - newnum = numelt_array_code(code) + num - code.sub!(/^(\};\n\z)/) { - str + $1 - } - code.sub!(/\[\d+\]/) { "[#{newnum}]" } - end - def generate_lookup_node(bytes_code, words_code, name, table) offsets = [] infos = [] @@ -345,33 +351,26 @@ else offsets_name = "#{name}_offsets" OffsetsMemo[offsets_key] = offsets_name - if bytes_code.empty? - bytes_code << gen_array_code("unsigned char", "#{OUTPUT_PREFIX}byte_array") - end - size = numelt_array_code(bytes_code) - array_code_insert_at_last(bytes_code, 2+max-min+1, + size = bytes_code.length + bytes_code.insert_at_last(2+max-min+1, "\#define #{offsets_name} #{size}\n" + format_offsets(min,max,offsets) + "\n") end - if words_code.empty? - words_code << gen_array_code("unsigned int", "#{OUTPUT_PREFIX}word_array") - end - if n = InfosMemo[infos] infos_name = n else infos_name = "#{name}_infos" InfosMemo[infos] = infos_name - size = numelt_array_code(words_code) - array_code_insert_at_last(words_code, infos.length, + size = words_code.length + words_code.insert_at_last(infos.length, "\#define #{infos_name} (sizeof(unsigned int)*#{size})\n" + format_infos(infos) + "\n") end - size = numelt_array_code(words_code) - array_code_insert_at_last(words_code, NUM_ELEM_BYTELOOKUP, + size = words_code.length + words_code.insert_at_last(NUM_ELEM_BYTELOOKUP, "\#define #{name} (sizeof(unsigned int)*#{size})\n" + <<"End" + "\n") #{offsets_name}, @@ -563,8 +562,6 @@ end TRANSCODERS = [] -TRANSCODE_GENERATED_BYTES_CODE = '' -TRANSCODE_GENERATED_WORDS_CODE = '' TRANSCODE_GENERATED_TRANSCODER_CODE = '' def transcode_tblgen(from, to, map) @@ -608,8 +605,8 @@ end def transcode_generated_code - TRANSCODE_GENERATED_BYTES_CODE + - TRANSCODE_GENERATED_WORDS_CODE + + TRANSCODE_GENERATED_BYTES_CODE.to_s + + TRANSCODE_GENERATED_WORDS_CODE.to_s + "\#define TRANSCODE_TABLE_INFO #{OUTPUT_PREFIX}byte_array, #{OUTPUT_PREFIX}word_array, sizeof(unsigned int)\n" + TRANSCODE_GENERATED_TRANSCODER_CODE end @@ -722,6 +719,9 @@ OUTPUT_PREFIX.sub!(/\A_+/, '') OUTPUT_PREFIX.sub!(/_*\z/, '_') +TRANSCODE_GENERATED_BYTES_CODE = ArrayCode.new("unsigned char", "#{OUTPUT_PREFIX}byte_array") +TRANSCODE_GENERATED_WORDS_CODE = ArrayCode.new("unsigned int", "#{OUTPUT_PREFIX}word_array") + arg = ARGV.shift $srcdir = File.dirname(arg) $:.unshift $srcdir unless $:.include? $srcdir -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/