All pastes #1686815 Raw Edit

matcher-list-migemo

public ruby v1 · immutable
#1686815 ·published 2009-11-25 14:00 UTC
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