rendered paste body--- /usr/bin/migemo 2009-08-23 02:30:51.000000000 +0900+++ matcher-list-migemo 2009-08-23 22:27:08.000000000 +0900@@ -15,6 +15,48 @@ require 'migemo' require 'getoptlong' require 'thread'+require 'kconv'++class MatcherListMigemo < Migemo+ def initialize (dict, pattern)+ super+ @optimization = nil+ end++ def regex+ regex = lookup+ regex.map {|x| "m:#{@pattern}=#{x}" }.join(' ')+ end+end++class RegexMatcherListRenderer < RegexRenderer+ def initialize (regex, insertion)+ super(regex, insertion)+ @meta = RegexMatcherListMetachars.new+ end++ def render_concatnation (regex)+ regex.map {|x| render0(x) }.join(@meta.bar)+ end++ def render_charclass (regex)+ if regex.delete("-")+ regex.push("-") # move "-" to the end of Array.+ end+ if regex.delete("]")+ regex.unshift("]") # move "]" to the beginning of Array.+ end+ escape_charclass("[" + regex.join + "]")+ end+end++class RegexMatcherListMetachars < RegexMetachars+ def initialize+ @bar = ' '+ @lparen = ''+ @rparen = ''+ end+end class Logger def initialize (filename)@@ -128,34 +170,28 @@ end generate_regex_str = lambda {|pattern, with_paren|- migemo = Migemo.new(static_dict, pattern)+ migemo = MatcherListMigemo.new(static_dict, pattern) migemo.user_dict = user_dict if user_dict- migemo.regex_dict = regex_dict if regex_dict- migemo.dict_cache = dict_cache if dict_cache- migemo.type = options['type'] if options['type']- migemo.optimization = options['optimize'].to_i if options['optimize']- migemo.insertion = options['insert'] if options['insert']- migemo.with_paren = with_paren migemo.regex } $stdout.sync = true while line = gets- pattern = line.chomp+ pattern = line.toeuc.chomp segments = segment(pattern) if segments.length <= 1 regex_str = generate_regex_str.call(pattern, false) elsif segments.length > 1+ bar = RegexMatcherListMetachars.new.bar regex_str1 = generate_regex_str.call(pattern, true) regex_str2 = segments.map {|pattern| generate_regex_str.call(pattern, true)- }.join((options['insert'] or ""))- bar = RegexMetacharsFactory.new(options['type']).bar+ }.join(bar) regex_str = [regex_str1, regex_str2].join(bar) end - puts regex_str+ puts regex_str.toutf8 puts options['separator'] if options['separator'] logger.puts(pattern) if logger end