[Prime-cvs] CVS update: prime/lib

アーカイブの一覧に戻る

Hiroyuki Komatsu komat****@users*****
2004年 12月 14日 (火) 17:16:31 JST


Index: prime/lib/session.rb
diff -u prime/lib/session.rb:1.4.4.10 prime/lib/session.rb:1.4.4.11
--- prime/lib/session.rb:1.4.4.10	Mon Dec 13 18:07:16 2004
+++ prime/lib/session.rb	Tue Dec 14 17:16:31 2004
@@ -1,5 +1,5 @@
 # session.rb
-# $Id: session.rb,v 1.4.4.10 2004/12/13 09:07:16 komatsu Exp $
+# $Id: session.rb,v 1.4.4.11 2004/12/14 08:16:31 komatsu Exp $
 #
 # Copyright (C) 2001 Satoru Takabayashi <sator****@namaz*****>
 # Copyright (C) 2002, 2003, 2004 Hiroyuki Komatsu <komat****@taiya*****>
@@ -10,8 +10,6 @@
 # the GNU General Public License version 2.
 #
 
-require 'suikyo/suikyo-composer'
-
 class Command
   attr_reader :name, :args, :nargs, :min_nargs, :description
 
@@ -302,14 +300,19 @@
                 "        MODE = [default, katakana, half_katakana, \n" + 
                 "                wide_ascii, raw]")
 
-#     add_command(:conv_convert, [:SESSION],
-#                 "convert the preedition string.")
-#     add_command(:conv_predict, [:SESSION, :METHOD],
-#                 "predict candidate words with the method", 1)
-#     add_command(:conv_select,  [:SESSION, :INDEX],
-#                 "select an index word to a conversion.")
-#     add_command(:conv_commit,  [:SESSION],
-#                 "commit the current conversion.")
+    add_command(:context_reset, [:SESSION],
+                "reset the context.")
+    add_command(:context_set_previous_word, [:SESSION, :WORD],
+                "set the word to the context")
+
+    add_command(:conv_convert, [:SESSION, :METHOD],
+                "convert the preedition string.", 1)
+    add_command(:conv_predict, [:SESSION, :METHOD],
+                "predict candidate words with the method", 1)
+    add_command(:conv_select,  [:SESSION, :INDEX],
+                "select an index word to a conversion.")
+    add_command(:conv_commit,  [:SESSION],
+                "commit the current conversion.")
 
 #     add_command(:modify_start, [:SESSION],
 #                 "")
@@ -332,40 +335,12 @@
 
   end
 
-#   def predict (method = nil)
-#   end
-
-  ##
-  ## Conversion methods
-#   def convert_start (session)
-#     composer = session_get_composer(session)
-#     composer.
-
-
   ## 
   ## Session methods
   ##
   def session_start ()
-    ## FIXME: Revise the following code.
-    ## FIXME: (2004-12-06) <Hiro>
-    suikyo = PrimeTypeConv::initialize_suikyo()
-    composer = SuikyoComposer.new(suikyo.table)
-    composer.set_reverse_table(PRIME_ENV['suikyo_reverse_tables'])
-
-    ## Setting hybrid_typing.
-    if PRIME_ENV['hybrid_typing'].nil? then
-      if PRIME_ENV['typing_method'] == 'romaji' then
-        PRIME_ENV['hybrid_typing'] = true
-        composer.hybrid_typing     = true
-      end
-    else
-      composer.hybrid_typing = PRIME_ENV['hybrid_typing']
-    end
-
-    @session_no += 1
-    @sessions[@session_no.to_s] = composer
-
-    return reply_successful( @session_no.to_s )
+    session =****@prime*****_start()
+    return reply_successful(session)
   end
 
   def session_end (session)
@@ -377,94 +352,94 @@
   ## Composition methods
   ##
   def edit_insert (session, string)
-    composer = session_get_composer(session)
-    composer.edit_insert(string)
-    return reply_with_preediting_string(composer)
+    @prime.edit_insert(session, string)
+    return edit_get_preedition(session)
   end
   def edit_delete (session)
-    composer = session_get_composer(session)
-    composer.edit_delete()
-    return reply_with_preediting_string(composer)
+    @prime.edit_delete(session)
+    return edit_get_preedition(session)
   end
   def edit_backspace (session)
-    composer = session_get_composer(session)
-    composer.edit_backspace()
-    return reply_with_preediting_string(composer)
+    @prime.edit_backspace(session)
+    return edit_get_preedition(session)
   end
   def edit_erase (session)
-    composer = session_get_composer(session)
-    composer.edit_erase()
-    if PRIME_ENV['hybrid_typing'] then
-      composer.set_mode_hybrid()
-    end
-    return reply_with_preediting_string(composer)
+    @prime.edit_erase(session)
+    return edit_get_preedition(session)
   end
   def edit_undo (session)
-    composer = session_get_composer(session)
-    composer.undo()
-    return reply_with_preediting_string(composer)
+    @prime.edit_undo(session)
+    return edit_get_preedition(session)
   end
   def edit_cursor_right (session)
-    composer = session_get_composer(session)
-    composer.cursor_right()
-    return reply_with_preediting_string(composer)
+    @prime.edit_cursor_right(session)
+    return edit_get_preedition(session)
   end
   def edit_cursor_left (session)
-    composer = session_get_composer(session)
-    composer.cursor_left()
-    return reply_with_preediting_string(composer)
+    @prime.edit_cursor_left(session)
+    return edit_get_preedition(session)
   end
   def edit_cursor_right_edge (session)
-    composer = session_get_composer(session)
-    composer.cursor_right_edge()
-    return reply_with_preediting_string(composer)
+    @prime.edit_cursor_right_edge(session)
+    return edit_get_preedition(session)
   end
   def edit_cursor_left_edge (session)
-    composer = session_get_composer(session)
-    composer.cursor_left_edge()
-    return reply_with_preediting_string(composer)
+    @prime.edit_cursor_left_edge(session)
+    return edit_get_preedition(session)
   end
   def edit_get_preedition (session)
-    composer = session_get_composer(session)
-    return reply_with_preediting_string(composer)
+    preedition =****@prime*****_get_preedition(session).join("\t")
+    return reply_successful(preedition)
   end
   def edit_get_query_string (session)
-    composer = session_get_composer(session)
-    return reply_successful( composer.edit_get_query_string() )
+    query_string =****@prime*****_get_query_string(session)
+    return reply_successful( query_string)
   end
 
   def edit_set_mode (session, mode)
-    composer = session_get_composer(session)
-    case mode
-    when "hybrid" then         # Original
-      composer.set_mode_hybrid()
-    when "default" then        # F6
-      composer.set_mode_default()
-    when "katakana" then       # F7
-      composer.set_mode_katakana()
-    when "half_katakana" then  # F8
-      composer.set_mode_half_katakana()
-    when "wide_ascii" then     # F9
-      composer.set_mode_wide_ascii()
-    when "raw" then            # F10
-      composer.set_mode_raw()
+    if****@prime*****_set_mode(session, mode) then
+      return edit_get_preedition(session)
     else
       error_message = "Unknown mode.  Valid modes are: \n" +
         "[default, katakana, half_katakana, wide_ascii, raw]"
       return reply_unsuccessful(error_message)
     end
-    return reply_with_preediting_string(composer)
   end
 
-  private
-  def reply_with_preediting_string (composer)
-    result = composer.edit_get_preediting_string().join("\t")
-    return reply_successful(result)
+  ##
+  ## Context methods
+  ##
+  def context_reset (session)
+    @prime.context_reset(session)
+    return reply_successful()
+  end
+
+  def context_set_previous_word (session, word)
+    @prime.context_set_previous_word(session)
+    return reply_successful()
+  end
+
+  ##
+  ## Conversion methods
+  ##
+  def conv_convert (session)
+    candidates =****@prime*****_convert(session)
+    return reply_successful(candidates.to_text)
+  end
+
+  def conv_predict (session, method = nil)
+    candidates =****@prime*****_predict(session)
+    return reply_successful(candidates.to_text)
   end
 
-  def session_get_composer (session)
-    composer = @sessions[session]
-    return composer
+  def conv_select (session, index)
+    selected_candidate =****@prime*****_select(session, index.to_i)
+    return reply_successful(selected_candidate.to_text)
+  end
+
+  def conv_commit (session)
+    @prime.conv_commit(session)
+    return reply_successful()
   end
 end
 
Index: prime/lib/prime2.rb
diff -u /dev/null prime/lib/prime2.rb:1.1.2.1
--- /dev/null	Tue Dec 14 17:16:31 2004
+++ prime/lib/prime2.rb	Tue Dec 14 17:16:31 2004
@@ -0,0 +1,348 @@
+# prime2.rb: Module for PRIME2 protocol.
+# $Id: prime2.rb,v 1.1.2.1 2004/12/14 08:16:31 komatsu Exp $
+#
+# Copyright (C) 2004 Hiroyuki Komatsu <komat****@taiya*****>
+#     All rights reserved.
+#     This is free software with ABSOLUTELY NO WARRANTY.
+#
+# You can redistribute it and/or modify it under the terms of 
+# the GNU General Public License version 2.
+
+require 'suikyo/suikyo-composer'
+
+module Prime2
+  def initialize_prime2 ()
+    @sessions   = {}
+    @session_no = 0
+  end
+
+  ## 
+  ## Session methods
+  ##
+  def session_start ()
+    session_data = PrimeSession.new()
+
+    @session_no += 1
+    @sessions[@session_no.to_s] = session_data
+
+    return @session_no.to_s
+  end
+
+  def session_end (session)
+    @sessions[session] = nil
+    return true
+  end
+
+  ## 
+  ## Composition methods
+  ##
+  def edit_insert (session, string)
+    composer = session_get_composer(session)
+    composer.edit_insert(string)
+    return true
+  end
+  def edit_delete (session)
+    composer = session_get_composer(session)
+    composer.edit_delete()
+    return true
+  end
+  def edit_backspace (session)
+    composer = session_get_composer(session)
+    composer.edit_backspace()
+    return true
+  end
+  def edit_erase (session)
+    composer = session_get_composer(session)
+    composer.edit_erase()
+    if PRIME_ENV['hybrid_typing'] then
+      composer.set_mode_hybrid()
+    end
+    return true
+  end
+  def edit_undo (session)
+    composer = session_get_composer(session)
+    composer.undo()
+    return true
+  end
+  def edit_cursor_right (session)
+    composer = session_get_composer(session)
+    composer.cursor_right()
+    return true
+  end
+  def edit_cursor_left (session)
+    composer = session_get_composer(session)
+    composer.cursor_left()
+    return true
+  end
+  def edit_cursor_right_edge (session)
+    composer = session_get_composer(session)
+    composer.cursor_right_edge()
+    return true
+  end
+  def edit_cursor_left_edge (session)
+    composer = session_get_composer(session)
+    composer.cursor_left_edge()
+    return true
+  end
+  def edit_get_preedition (session)
+    composer = session_get_composer(session)
+    return composer.edit_get_preediting_string()
+  end
+  def edit_get_query_string (session)
+    composer = session_get_composer(session)
+    return composer.edit_get_query_string()
+  end
+
+  def edit_set_mode (session, mode)
+    composer = session_get_composer(session)
+    case mode
+    when "hybrid" then         # Original
+      composer.set_mode_hybrid()
+    when "default" then        # F6
+      composer.set_mode_default()
+    when "katakana" then       # F7
+      composer.set_mode_katakana()
+    when "half_katakana" then  # F8
+      composer.set_mode_half_katakana()
+    when "wide_ascii" then     # F9
+      composer.set_mode_wide_ascii()
+    when "raw" then            # F10
+      composer.set_mode_raw()
+    else
+      return false
+    end
+    return true
+  end
+
+  ##
+  ## Context methods
+  ##
+  def context_reset (session)
+    session_set_context(session, "")
+  end
+
+  def context_set_previous_word (session, word)
+    session_set_context(session, word)
+  end
+
+
+  ##
+  ## Conversion methods
+  ##
+  def conv_convert (session, method = nil)
+    query_string = edit_get_query_string(session)
+
+    if PRIME_ENV['typing_method'] == 'tcode' or 
+        PRIME_ENV['typing_method'] == 'handwrite' then
+      candidates = lookup_direct_all(string)
+    else
+      composer = session_get_composer(session)
+      context  = session_get_context(session)
+
+      words_compact  = convert_compact(composer, context)
+      words_overall  = convert_overall(composer, context)
+#      words_japanese = convert_japanese(composer, context)
+      results_compact    = PrimeWordList::merge_with_label(@context,
+                                                           words_compact)
+      results_conversion = PrimeWordList::merge_with_label(@context,
+                                                           words_overall)
+#                                                           words_japanese)
+      candidates = PrimeWordList::concat(results_compact | results_conversion)
+    end
+
+    session_set_candidates(session, candidates)
+    return candidates
+  end
+
+  def conv_predict (session, method = nil)
+    query_string = edit_get_query_string(session)
+
+    if PRIME_ENV['typing_method'] == 'tcode' or 
+        PRIME_ENV['typing_method'] == 'handwrite' then
+      candidates = lookup_direct(string)
+    else
+      composer = session_get_composer(session)
+      context  = session_get_context(session)
+
+      words_compact = convert_compact(composer, context)
+      candidates = PrimeWordList::merge_with_label(@context, words_compact)
+    end
+
+    session_set_candidates(session, candidates)
+    return candidates
+  end
+
+  def conv_select (session, index)
+    selected_candidate = session_set_selection(session, index)
+    return selected_candidate
+  end
+
+  def conv_commit (session)
+    selected_candidate = session_get_selection(session)
+    reading = selected_candidate.pron
+    literal = selected_candidate.literal
+    pos     = selected_candidate.pos
+    ending  = selected_candidate.conjugation 
+    rest    = selected_candidate.rest 
+
+    context = session_get_context(session)
+    learn_word(reading, literal, pos, context, ending, rest)
+    word = literal + ending + rest
+    context_set_previous_word(session, word)
+  end
+
+  private
+  ##
+  ## Session method
+  ##
+  def session_get_composer (session)
+    composer = @sessions[session].get_composer()
+    return composer
+  end
+
+  def session_set_candidates (session, wordlist)
+    @sessions[session].set_candidates(wordlist)
+  end
+
+  def session_set_selection (session, index)
+    @sessions[session].set_selection(index)
+  end
+  def session_get_selection (session)
+    return @sessions[session].get_selection()
+  end
+
+  def session_set_context (session, context)
+    @sessions[session].set_context(context)
+  end
+  def session_get_context (session)
+    return @sessions[session].get_context()
+  end
+
+  ##
+  ## convertion methods
+  ##  
+  def convert_prefix (composer, context)
+    # 「よ→予測」
+    expansion = composer.edit_get_expansion()
+    query = PrimeQuery.new(expansion, nil, :prefix, context)
+    words = search(query)
+    return words
+  end
+
+  def convert_exact (composer, context)
+    # 「よそく→予測」
+    conversion = composer.edit_get_conversion()
+    query = PrimeQuery.new(conversion, nil, :exact, context)
+    words = search(query)
+    return words
+  end
+
+  def convert_raw (composer, context)
+    ## FIXME: This method is an ad-hoc routine for search_japanese.
+    ## FIXME: <komat****@taiya*****> (2004-02-28)
+    raw_input = composer.edit_get_raw_input()
+    query = PrimeQuery.new(raw_input, nil, :exact, @context)
+    words = search(query)
+    return words
+  end
+
+  def convert_overall (composer, context)
+    # 「1+1=→2」, 「aiueo→アイウエオ」
+    raw_input = composer.edit_get_raw_input()
+    query = PrimeQuery.new(raw_input, nil, :overall)
+    words = search(query)
+    return words
+  end
+
+  def convert_compact (composer, context)
+    words_prefix   = convert_prefix(composer, context)
+#    words_japanese = convert_japanese_uniclause(composer, context)
+    #    words_japanese = search_japanese(string)
+    #    words_japanese = search_japanese_prefix(string)
+#    words_compact  = PrimeWordList::merge(words_prefix, words_japanese)[0,1]
+    words_compact  = PrimeWordList::merge(words_prefix)[0,1]
+
+    if words_compact.length > 0 then
+      predict_with_multi_clauses!(words_compact)
+
+      words_compact[1..-1].each {|word|
+        word.score = words_compact[0].score
+      }
+    end
+    return words_compact
+  end
+
+  class PrimeSession
+    def initialize ()
+      @composer   = initialize_composer()
+      @candidates = PrimeWordList.new()
+      @target     = ""
+      @context    = ""
+    end
+
+    def initialize_composer ()
+      composer = SuikyoComposer.new()
+      composer.set_table(PRIME_ENV['suikyo_tables'])
+      composer.set_reverse_table(PRIME_ENV['suikyo_reverse_tables'])
+
+      ## Setting hybrid_typing.
+      if PRIME_ENV['hybrid_typing'].nil? then
+        if PRIME_ENV['typing_method'] == 'romaji' then
+          PRIME_ENV['hybrid_typing'] = true
+          composer.hybrid_typing     = true
+        end
+      else
+        composer.hybrid_typing = PRIME_ENV['hybrid_typing']
+      end
+
+      ## Setting period and comma in Japanese.
+      period = PRIME_ENV['style_japanese_period']
+      comma  = PRIME_ENV['style_japanese_comma']
+      case PRIME_ENV['typing_method']
+      when "romaji" then
+        composer.set_table_entry('.', period)
+        composer.set_table_entry(',', comma)
+        composer.set_reverse_table_entry(period, '.')
+        composer.set_reverse_table_entry(comma,  ',')
+      when "kana" then
+        composer.set_table_entry('>', period)
+        composer.set_table_entry('<', comma)
+        composer.set_reverse_table_entry(period, '>')
+        composer.set_reverse_table_entry(comma,  '<')
+      when "tcode" then
+        for char in 'A'..'Z' do
+          composer.set_table_entry(char, char)
+          composer.set_reverse_table_entry(char, char)
+        end
+      end
+
+      return composer
+    end
+
+    def get_composer ()
+      return @composer
+    end
+
+    def set_candidates (wordlist)
+      @candidates = wordlist
+    end
+    def get_candidates ()
+      return @candidates
+    end
+
+    def set_selection (index_no)
+      @target = @candidates[index_no]
+      return @target
+    end
+    def get_selection ()
+      return @target
+    end
+
+    def set_context (context)
+      @context = context
+    end
+    def get_context ()
+      return @context
+    end
+  end
+end
Index: prime/lib/prime.rb
diff -u prime/lib/prime.rb:1.7.4.8 prime/lib/prime.rb:1.7.4.9
--- prime/lib/prime.rb:1.7.4.8	Wed Dec  8 14:56:34 2004
+++ prime/lib/prime.rb	Tue Dec 14 17:16:31 2004
@@ -1,5 +1,5 @@
 # prime/prime.rb
-# $Id: prime.rb,v 1.7.4.8 2004/12/08 05:56:34 komatsu Exp $
+# $Id: prime.rb,v 1.7.4.9 2004/12/14 08:16:31 komatsu Exp $
 #
 # Copyright (C) 2002, 2003, 2004 Hiroyuki Komatsu <komat****@taiya*****>
 #     All rights reserved.
@@ -11,6 +11,7 @@
 
 require 'prime/prime-config'
 require 'prime/taiyaki'
+require 'prime/prime2'
 require 'prime/prime-japanese'
 require 'prime/prime-mixed'
 
@@ -20,6 +21,7 @@
 
 class Prime
   include Debug
+  include Prime2
   include PrimeJapanese
   include PrimeMixed
 
@@ -32,6 +34,7 @@
     @context = nil
 
     initialize_prime_japanese()
+    initialize_prime2()
 
     @flag_opened = true
   end
Index: prime/lib/prime-mixed.rb
diff -u prime/lib/prime-mixed.rb:1.2.4.1 prime/lib/prime-mixed.rb:1.2.4.2
--- prime/lib/prime-mixed.rb:1.2.4.1	Wed Dec  8 17:38:16 2004
+++ prime/lib/prime-mixed.rb	Tue Dec 14 17:16:31 2004
@@ -1,5 +1,5 @@
 # prime/prime-mixed.rb
-# $Id: prime-mixed.rb,v 1.2.4.1 2004/12/08 08:38:16 komatsu Exp $
+# $Id: prime-mixed.rb,v 1.2.4.2 2004/12/14 08:16:31 komatsu Exp $
 #
 # Copyright (C) 2004 Hiroyuki Komatsu <komat****@taiya*****>
 #     All rights reserved.
@@ -85,8 +85,8 @@
         regexp_literal += "(" + literals.uniq.join("|") + ")"
       end
     }
-    p regexp_pron
-    p regexp_literal
+#     p regexp_pron
+#     p regexp_literal
   end
 
   def lookup_mixed_concat_data_list (data_list)
Index: prime/lib/Makefile.am
diff -u prime/lib/Makefile.am:1.2.4.1 prime/lib/Makefile.am:1.2.4.2
--- prime/lib/Makefile.am:1.2.4.1	Mon Nov 22 18:12:25 2004
+++ prime/lib/Makefile.am	Tue Dec 14 17:16:31 2004
@@ -1,5 +1,5 @@
 # Makefile.am: Template of Automake for prime/lib.
-# $Id: Makefile.am,v 1.2.4.1 2004/11/22 09:12:25 komatsu Exp $
+# $Id: Makefile.am,v 1.2.4.2 2004/12/14 08:16:31 komatsu Exp $
 #
 # Copyright (C) 2003 Hiroyuki Komatsu <komat****@taiya*****>
 #     All rights reserved.
@@ -9,7 +9,8 @@
 # the GNU General Public License version 2.
 
 SUBDIRS = engine grammar makedict
-RUBY_FILES = prime.rb prime-japanese.rb prime-mixed.rb session.rb server.rb \
+RUBY_FILES = prime.rb prime2.rb prime-japanese.rb prime-mixed.rb \
+             session.rb server.rb \
              taiyaki.rb array-agent.rb 
 
 EXTRA_DIST = $(RUBY_FILES) prime-config.rb.in


Prime-cvs メーリングリストの案内
アーカイブの一覧に戻る