| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 |
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 |
|
|---|
| 24 |
|
|---|
| 25 |
|
|---|
| 26 |
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 |
|
|---|
| 30 |
|
|---|
| 31 |
|
|---|
| 32 |
|
|---|
| 33 |
|
|---|
| 34 |
|
|---|
| 35 |
|
|---|
| 36 |
|
|---|
| 37 |
|
|---|
| 38 |
|
|---|
| 39 |
|
|---|
| 40 |
|
|---|
| 41 |
|
|---|
| 42 |
|
|---|
| 43 |
|
|---|
| 44 |
|
|---|
| 45 |
(defvar skkdic-okuri-ari nil |
|---|
| 46 |
"Nested alist for OKURI-ARI entries of SKK dictionary.") |
|---|
| 47 |
|
|---|
| 48 |
(defvar skkdic-postfix nil |
|---|
| 49 |
"Nested alist for SETSUBIJI (postfix) entries of SKK dictionary.") |
|---|
| 50 |
|
|---|
| 51 |
(defvar skkdic-prefix nil |
|---|
| 52 |
"Nested alist SETTOUJI (prefix) entries of SKK dictionary.") |
|---|
| 53 |
|
|---|
| 54 |
(defvar skkdic-okuri-nasi nil |
|---|
| 55 |
"Nested alist for OKURI-NASI entries of SKK dictionary.") |
|---|
| 56 |
|
|---|
| 57 |
(defconst skkdic-okurigana-table |
|---|
| 58 |
'((?$B$!(B . ?a) (?$B$"(B . ?a) (?$B$#(B . ?i) (?$B$$(B . ?i) (?$B$%(B . ?u) |
|---|
| 59 |
(?$B$&(B . ?u) (?$B$'(B . ?e) (?$B$((B . ?e) (?$B$)(B . ?o) (?$B$*(B . ?o) |
|---|
| 60 |
(?$B$+(B . ?k) (?$B$,(B . ?g) (?$B$-(B . ?k) (?$B$.(B . ?g) (?$B$/(B . ?k) |
|---|
| 61 |
(?$B$0(B . ?g) (?$B$1(B . ?k) (?$B$2(B . ?g) (?$B$3(B . ?k) (?$B$4(B . ?g) |
|---|
| 62 |
(?$B$5(B . ?s) (?$B$6(B . ?z) (?$B$7(B . ?s) (?$B$8(B . ?j) (?$B$9(B . ?s) |
|---|
| 63 |
(?$B$:(B . ?z) (?$B$;(B . ?s) (?$B$<(B . ?z) (?$B$=(B . ?s) (?$B$>(B . ?z) |
|---|
| 64 |
(?$B$?(B . ?t) (?$B$@(B . ?d) (?$B$A(B . ?t) (?$B$B(B . ?d) (?$B$C(B . ?t) |
|---|
| 65 |
(?$B$D(B . ?t) (?$B$E(B . ?d) (?$B$F(B . ?t) (?$B$G(B . ?d) (?$B$H(B . ?t) (?$B$I(B . ?d) |
|---|
| 66 |
(?$B$J(B . ?n) (?$B$K(B . ?n) (?$B$L(B . ?n) (?$B$M(B . ?n) (?$B$N(B . ?n) |
|---|
| 67 |
(?$B$O(B . ?h) (?$B$P(B . ?b) (?$B$Q(B . ?p) (?$B$R(B . ?h) (?$B$S(B . ?b) |
|---|
| 68 |
(?$B$T(B . ?p) (?$B$U(B . ?h) (?$B$V(B . ?b) (?$B$W(B . ?p) (?$B$X(B . ?h) |
|---|
| 69 |
(?$B$Y(B . ?b) (?$B$Z(B . ?p) (?$B$[(B . ?h) (?$B$\(B . ?b) (?$B$](B . ?p) |
|---|
| 70 |
(?$B$^(B . ?m) (?$B$_(B . ?m) (?$B$`(B . ?m) (?$B$a(B . ?m) (?$B$b(B . ?m) |
|---|
| 71 |
(?$B$c(B . ?y) (?$B$d(B . ?y) (?$B$e(B . ?y) (?$B$f(B . ?y) (?$B$g(B . ?y) (?$B$h(B . ?y) |
|---|
| 72 |
(?$B$i(B . ?r) (?$B$j(B . ?r) (?$B$k(B . ?r) (?$B$l(B . ?r) (?$B$m(B . ?r) |
|---|
| 73 |
(?$B$o(B . ?w) (?$B$p(B . ?w) (?$B$q(B . ?w) (?$B$r(B . ?w) |
|---|
| 74 |
(?$B$s(B . ?n) |
|---|
| 75 |
) |
|---|
| 76 |
"Alist of Okuriganas vs trailing ASCII letters in OKURI-ARI entry.") |
|---|
| 77 |
|
|---|
| 78 |
(defun skkdic-merge-head-and-tail (heads tails postfix) |
|---|
| 79 |
(let ((min-len 2) |
|---|
| 80 |
l) |
|---|
| 81 |
(while heads |
|---|
| 82 |
(if (or (not postfix) |
|---|
| 83 |
(>= (length (car heads)) min-len)) |
|---|
| 84 |
(let ((tail tails)) |
|---|
| 85 |
(while tail |
|---|
| 86 |
(if (or postfix |
|---|
| 87 |
(>= (length (car tail)) min-len)) |
|---|
| 88 |
(setq l (cons (concat (car heads) (car tail)) l))) |
|---|
| 89 |
(setq tail (cdr tail))))) |
|---|
| 90 |
(setq heads (cdr heads))) |
|---|
| 91 |
l)) |
|---|
| 92 |
|
|---|
| 93 |
(defconst skkdic-jisx0208-hiragana-block (nth 1 (split-char ?$B$"(B))) |
|---|
| 94 |
|
|---|
| 95 |
(defun skkdic-lookup-key (seq len &optional postfix prefer-noun) |
|---|
| 96 |
"Return a list of conversion string for sequence SEQ of length LEN. |
|---|
| 97 |
|
|---|
| 98 |
SEQ is a vector of Kana characters to be converted by SKK dictionary. |
|---|
| 99 |
If LEN is shorter than the length of KEYSEQ, the first LEN keys in SEQ |
|---|
| 100 |
are took into account. |
|---|
| 101 |
|
|---|
| 102 |
Optional 3rd arg POSTFIX non-nil means SETSUBIJI (postfix) are also |
|---|
| 103 |
considered to find conversion strings. |
|---|
| 104 |
|
|---|
| 105 |
Optional 4th arg PREFER-NOUN non-nil means that the conversions |
|---|
| 106 |
without okurigana are placed at the head of the returned list." |
|---|
| 107 |
(or skkdic-okuri-nasi |
|---|
| 108 |
(condition-case err |
|---|
| 109 |
(load-library "ja-dic/ja-dic") |
|---|
| 110 |
(error (ding) |
|---|
| 111 |
(with-output-to-temp-buffer "*Help*" |
|---|
| 112 |
(princ "The library `ja-dic' can't be loaded. |
|---|
| 113 |
|
|---|
| 114 |
The most common case is that you have not yet installed the library |
|---|
| 115 |
included in LEIM (Libraries of Emacs Input Method) which is |
|---|
| 116 |
distributed separately from Emacs. |
|---|
| 117 |
|
|---|
| 118 |
LEIM is available from the same ftp directory as Emacs.")) |
|---|
| 119 |
(signal (car err) (cdr err))))) |
|---|
| 120 |
|
|---|
| 121 |
(let ((vec (make-vector len 0)) |
|---|
| 122 |
(i 0) |
|---|
| 123 |
entry) |
|---|
| 124 |
|
|---|
| 125 |
|
|---|
| 126 |
|
|---|
| 127 |
|
|---|
| 128 |
|
|---|
| 129 |
|
|---|
| 130 |
|
|---|
| 131 |
(while (< i len) |
|---|
| 132 |
(let ((ch (aref seq i)) |
|---|
| 133 |
elts) |
|---|
| 134 |
(if (= ch ?$B!<(B) |
|---|
| 135 |
(aset vec i 0) |
|---|
| 136 |
(setq elts (split-char ch)) |
|---|
| 137 |
(if (and (eq (car elts) 'japanese-jisx0208) |
|---|
| 138 |
(= (nth 1 elts) skkdic-jisx0208-hiragana-block)) |
|---|
| 139 |
(aset vec i (- (nth 2 elts) 32)) |
|---|
| 140 |
(aset vec i 128)))) |
|---|
| 141 |
(setq i (1+ i))) |
|---|
| 142 |
|
|---|
| 143 |
|
|---|
| 144 |
(setq entry (lookup-nested-alist vec skkdic-okuri-nasi len 0 t)) |
|---|
| 145 |
(if (consp (car entry)) |
|---|
| 146 |
(setq entry (copy-sequence (car entry))) |
|---|
| 147 |
(setq entry nil)) |
|---|
| 148 |
|
|---|
| 149 |
(if postfix |
|---|
| 150 |
|
|---|
| 151 |
(let ((break (max (- len (car skkdic-postfix)) 1)) |
|---|
| 152 |
entry-head entry-postfix entry2) |
|---|
| 153 |
(while (< break len) |
|---|
| 154 |
(if (and (setq entry-head |
|---|
| 155 |
(lookup-nested-alist vec skkdic-okuri-nasi |
|---|
| 156 |
break 0 t)) |
|---|
| 157 |
(consp (car entry-head)) |
|---|
| 158 |
(setq entry-postfix |
|---|
| 159 |
(lookup-nested-alist vec skkdic-postfix |
|---|
| 160 |
len break t)) |
|---|
| 161 |
(consp (car entry-postfix)) |
|---|
| 162 |
(setq entry2 (skkdic-merge-head-and-tail |
|---|
| 163 |
(car entry-head) (car entry-postfix) t))) |
|---|
| 164 |
(if entry |
|---|
| 165 |
(nconc entry entry2) |
|---|
| 166 |
(setq entry entry2))) |
|---|
| 167 |
(setq break (1+ break))))) |
|---|
| 168 |
|
|---|
| 169 |
|
|---|
| 170 |
(let ((break (min (car skkdic-prefix) (- len 2))) |
|---|
| 171 |
entry-prefix entry-tail entry2) |
|---|
| 172 |
(while (> break 0) |
|---|
| 173 |
(if (and (setq entry-prefix |
|---|
| 174 |
(lookup-nested-alist vec skkdic-prefix break 0 t)) |
|---|
| 175 |
(consp (car entry-prefix)) |
|---|
| 176 |
(setq entry-tail |
|---|
| 177 |
(lookup-nested-alist vec skkdic-okuri-nasi len break t)) |
|---|
| 178 |
(consp (car entry-tail)) |
|---|
| 179 |
(setq entry2 (skkdic-merge-head-and-tail |
|---|
| 180 |
(car entry-prefix) (car entry-tail) nil))) |
|---|
| 181 |
(progn |
|---|
| 182 |
(if entry |
|---|
| 183 |
(nconc entry entry2) |
|---|
| 184 |
(setq entry entry2)))) |
|---|
| 185 |
(setq break (1- break)))) |
|---|
| 186 |
|
|---|
| 187 |
|
|---|
| 188 |
(let ((okurigana (assq (aref seq (1- len)) skkdic-okurigana-table)) |
|---|
| 189 |
orig-element entry2) |
|---|
| 190 |
(if okurigana |
|---|
| 191 |
(progn |
|---|
| 192 |
(setq orig-element (aref vec (1- len))) |
|---|
| 193 |
(aset vec (1- len) (- (cdr okurigana))) |
|---|
| 194 |
(if (and (setq entry2 (lookup-nested-alist vec skkdic-okuri-ari |
|---|
| 195 |
len 0 t)) |
|---|
| 196 |
(consp (car entry2))) |
|---|
| 197 |
(progn |
|---|
| 198 |
(setq entry2 (copy-sequence (car entry2))) |
|---|
| 199 |
(let ((l entry2) |
|---|
| 200 |
(okuri (char-to-string (aref seq (1- len))))) |
|---|
| 201 |
(while l |
|---|
| 202 |
(setcar l (concat (car l) okuri)) |
|---|
| 203 |
(setq l (cdr l))) |
|---|
| 204 |
(if entry |
|---|
| 205 |
(if prefer-noun |
|---|
| 206 |
(nconc entry entry2) |
|---|
| 207 |
(setq entry2 (nreverse entry2)) |
|---|
| 208 |
(nconc entry2 entry) |
|---|
| 209 |
(setq entry entry2)) |
|---|
| 210 |
(setq entry (nreverse entry2)))))) |
|---|
| 211 |
(aset vec (1- len) orig-element)))) |
|---|
| 212 |
|
|---|
| 213 |
entry)) |
|---|
| 214 |
|
|---|
| 215 |
|
|---|
| 216 |
(provide 'ja-dic-utl) |
|---|
| 217 |
|
|---|
| 218 |
|
|---|
| 219 |
|
|---|
| 220 |
|
|---|
| 221 |
|
|---|
| 222 |
|
|---|
| 223 |
|
|---|
| 224 |
|
|---|