annotate lisp/skk/skk-tree.el @ 224:4663b37daab6

Added tag r20-4b10 for changeset 2c611d1463a6
author cvs
date Mon, 13 Aug 2007 10:10:55 +0200
parents 262b8bb4a523
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
219
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
1 ;;; skk-tree.el --- $BLZ7A<0%G!<%?!<$r;H$C$?JQ49$N$?$a$N%W%m%0%i%`(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
2 ;; Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
3 ;; Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp>
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
4
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
5 ;; Author: Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp>
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
6 ;; Maintainer: Mikio Nakajima <minakaji@osaka.email.ne.jp>
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
7 ;; Version: $Id: skk-tree.el,v 1.1 1997/12/02 08:48:39 steve Exp $
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
8 ;; Keywords: japanese
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
9 ;; Last Modified: $Date: 1997/12/02 08:48:39 $
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
10
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
11 ;; This program is free software; you can redistribute it and/or modify
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
13 ;; the Free Software Foundation; either versions 2, or (at your option)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
14 ;; any later version.
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
15
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
16 ;; This program is distributed in the hope that it will be useful
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
19 ;; GNU General Public License for more details.
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
20
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
22 ;; along with SKK, see the file COPYING. If not, write to the Free
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
23 ;; Software Foundation Inc., 59 Temple Place - Suite 330, Boston,
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
24 ;; MA 02111-1307, USA.
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
25
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
26 ;;; Commentary:
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
27
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
28 ;;; Change log:
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
29 ;; version 1.0 released 1996.10.2 (derived from the skk.el 8.6)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
30
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
31 ;;; Code:
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
32 (require 'skk-foreword)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
33 (require 'skk-vars)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
34
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
35 ;;;###skk-autoload
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
36 (defvar skk-rom-kana-rule-tree nil
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
37 "*skk-rom-kana-rule-list $B$NMWAG?t$,B?$/$J$C$?$H$-$K;HMQ$9$k%D%j!<!#(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
38 .emacs $B$K(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
39 (setq skk-rom-kana-rule-tree
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
40 (skk-compile-rule-list skk-rom-kana-rule-list))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
41 $B$rDI2C$9$k(B.
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
42
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
43 $B$3$N$^$^$G$O(B SKK $B$r5/F0$9$k$H$-$KKh2s(B \"skk-compile-rule-list\" $B$r7W;;$9(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
44 $B$k$3$H$K$J$k$N$G(B, $B$&$^$/$$$/$3$H$,$o$+$l$P(B,
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
45 (skk-compile-rule-list skk-rom-kana-rule-list)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
46 $B$NCM$rD>@\(B .emacs $B$K=q$$$F$*$/$H$h$$!#(B" )
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
47
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
48 ;;;###skk-autoload
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
49 (defvar skk-standard-rom-kana-rule-tree nil
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
50 "*skk-standard-rom-kana-rule-list $B$NMWAG?t$,B?$/$J$C$?$H$-$K;HMQ$9$k%D%j!<!#(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
51 .emacs $B$K(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
52 (setq skk-standard-rom-kana-rule-tree
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
53 (skk-compile-rule-list skk-standard-rom-kana-rule-list))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
54 $B$rDI2C$9$k(B.
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
55
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
56 $B$3$N$^$^$G$O(B SKK $B$r5/F0$9$k$H$-$KKh2s(B \"skk-compile-rule-list\" $B$r7W;;$9(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
57 $B$k$3$H$K$J$k$N$G(B, $B$&$^$/$$$/$3$H$,$o$+$l$P(B,
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
58 (skk-compile-rule-list skk-standard-rom-kana-rule-list)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
59 $B$NCM$rD>@\(B .emacs $B$K=q$$$F$*$/$H$h$$!#(B" )
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
60
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
61 (defvar skk-tree-load-hook nil
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
62 "*skk-tree.el $B$r%m!<%I$7$?8e$K%3!<%k$5$l$k%U%C%/!#(B" )
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
63
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
64 ;; $BF0E*JQ?t!#%P%$%H%3%s%Q%$%i!<$rL[$i$;$k$?$a$K$H$j$"$($:(B nil $B$rBeF~!#(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
65 (defvar root nil)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
66
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
67 ;; convert skk-rom-kana-rule-list to skk-rom-kana-rule-tree.
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
68 ;; The rule tree follows the following syntax:
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
69 ;; <tree> ::= ((<char> . <tree>) . <tree>) | nil
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
70 ;; <item> ::= (<char> . <tree>)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
71
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
72 (defun skk-compile-rule-list (l)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
73 ;; rom-kana-rule-list $B$rLZ$N7A$K%3%s%Q%$%k$9$k!#(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
74 (let (tree rule)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
75 (while l
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
76 (setq rule (car l)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
77 l (cdr l)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
78 tree (skk-add-rule rule tree) ))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
79 tree))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
80
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
81 (defun skk-add-rule (rule tree)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
82 ;; $BGK2uE*$K(B RULE $B$r(B TREE $B$K2C$($k!#(B
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
83 (let* ((str (car rule))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
84 (char (string-to-char str))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
85 (rest (substring str 1))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
86 (rule-body (cdr rule))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
87 (root tree))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
88 (skk-add-rule-main char rest rule-body tree)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
89 root))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
90
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
91 (defun skk-add-rule-main (char rest body tree)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
92 (let ((item (skk-search-tree char tree)) (cont t))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
93 (if item
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
94 (if (string= rest "")
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
95 (setcdr item (cons (cons 0 body) (cdr item)))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
96 (skk-add-rule-main
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
97 (string-to-char rest) (substring rest 1) body (cdr item)))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
98 ;; key not found, so add rule to the end of the tree
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
99 (if (null root)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
100 (setq root (skk-make-rule-tree char rest body))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
101 (while (and cont tree)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
102 (if (null (cdr tree))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
103 (progn
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
104 (setcdr tree (skk-make-rule-tree char rest body))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
105 (setq cont nil))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
106 (setq tree (cdr tree))))))))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
107
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
108 (defun skk-make-rule-tree (char rest body)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
109 (if (string= rest "")
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
110 (list (cons char (list (cons 0 body))))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
111 (list
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
112 (cons char
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
113 (skk-make-rule-tree
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
114 (string-to-char rest) (substring rest 1) body)))))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
115
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
116 (defun skk-search-tree (char tree)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
117 (let ((cont t) v)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
118 (while (and cont tree)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
119 (if (= char (car (car tree)))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
120 (setq v (car tree)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
121 cont nil)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
122 (setq tree (cdr tree))))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
123 v))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
124
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
125 ;;;###skk-autoload
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
126 (defun skk-assoc-tree (key tree)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
127 (let ((char (string-to-char key)) (rest (substring key 1))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
128 (cont t) v )
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
129 (while (and tree cont)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
130 (if (= char (car (car tree)))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
131 (if (string= rest "")
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
132 (setq v (if (= 0 (car (car (cdr (car tree)))))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
133 (cdr (car (cdr (car tree)))))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
134 cont nil)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
135 (setq v (skk-assoc-tree rest (cdr (car tree)))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
136 cont nil))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
137 (setq tree (cdr tree))))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
138 v))
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
139
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
140 (run-hooks 'skk-tree-load-hook)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
141
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
142 (provide 'skk-tree)
262b8bb4a523 Import from CVS: tag r20-4b8
cvs
parents:
diff changeset
143 ;;; skk-tree.el ends here