Jun Inoue
jun0****@nerds*****
2004年 9月 7日 (火) 07:29:53 JST
On Tue, 31 Aug 2004 21:52:17 +0900 Etsushi Kato <ekato****@ees*****> wrote: > On 2004/08/30, at 17:48, TOKUNAGA Hiroyuki wrote: > > >> 話は変りまして徳永さん、田畑さんに質問なのですが、 uim-skk や > >> uim-anthy で "n" に続いて記号 (や数値) を入力すると、"ん" になりますが > >> 、これを "ん記号" ("n1" だったら、"ん1") になるようにするにはどうすれ > >> ば良いでしょう。 > > > > これを修正するのはめんどくさい気がします。たぶん、rk.scmの方までいじら > > なければならないんじゃないかと思います。 > > rk.scm は手強かったので、今のところ skk.scm のほうで処理する方針にしま > した。前のメールで教えて頂いた rk-expect が、ちょうどこの用途に使えま > した。 rk.scm に対するパッチを書いてみました。汚いですけど、動きます。(といってもテストはあまりできてないので注意) "n" + 記号を "ん" + 記号に変換させるパッチ --- trunk/scm/rk.scm 2004-09-06 22:21:47.537930408 +0000 +++ work/scm/rk.scm 2004-09-06 22:11:34.213169944 +0000 @@ -184,6 +184,21 @@ #t) #f))) + +; Merges two strings that have been converted, for example +; ("ん" "ン" " ") ("1" "1" "1") --> ("ん1" "ン1" " 1"). +; SEQ1 and SEQ2 must be proper lists having the same length. +; A disgusting hack for implementing ("n" "1") --> ("ん1"). +; Anyone with the time, skill and passion, please clean this up :-( +(define rk-merge-seqs + (lambda (seq1 seq2) + (if (and (pair? seq1) (pair? seq2)) + (cons (string-append (car seq1) (car seq2)) + (rk-merge-seqs (cdr seq1) (cdr seq2))) + ; This should be () when we reach the end of the lists, or + ; whatever passed as SEQ1 if SEQ2 is #f + seq1))) + ;; front match (define rk-proc-tail (lambda (context seq) @@ -195,8 +210,10 @@ (if old-seq (begin (rk-flush context) - (rk-push-key! context (car seq)) - (set! res (cadr old-seq))) + (set! res + (rk-merge-seqs + (cadr old-seq) + (rk-push-key! context (car seq))))) (if (rk-context-seq context) (begin (rk-flush context)