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