45
45
(define anthy-lib-initialized? #f)
46
46
(define anthy-version #f)
48
(define anthy-type-direct -1)
49
(define anthy-type-hiragana 0)
50
(define anthy-type-katakana 1)
51
(define anthy-type-halfkana 2)
52
(define anthy-type-halfwidth-alnum 3)
53
(define anthy-type-fullwidth-alnum 4)
48
(define anthy-type-direct ja-type-direct)
49
(define anthy-type-hiragana ja-type-hiragana)
50
(define anthy-type-katakana ja-type-katakana)
51
(define anthy-type-halfkana ja-type-halfkana)
52
(define anthy-type-halfwidth-alnum ja-type-halfwidth-alnum)
53
(define anthy-type-fullwidth-alnum ja-type-fullwidth-alnum)
55
55
(define anthy-input-rule-roma 0)
56
56
(define anthy-input-rule-kana 1)
59
59
(define anthy-candidate-type-katakana -2)
60
60
(define anthy-candidate-type-hiragana -3)
61
61
(define anthy-candidate-type-halfkana -4)
62
(define anthy-candidate-type-halfwidth-alnum -5) ; not defined in Anthy
63
(define anthy-candidate-type-fullwidth-alnum -6) ; not defined in Anthy
62
;; below are not defined in Anthy
63
(define anthy-candidate-type-halfwidth-alnum -5)
64
(define anthy-candidate-type-fullwidth-alnum -6)
65
(define anthy-candidate-type-upper-halfwidth-alnum -7)
66
(define anthy-candidate-type-upper-fullwidth-alnum -8)
65
68
;; I don't think the key needs to be customizable.
66
69
(define-key anthy-space-key? '(" "))
226
229
(anthy-prepare-input-rule-activation ac)
227
230
(rk-context-set-rule! (anthy-context-rkc ac)
232
(japanese-roma-set-yen-representation)
229
233
(anthy-context-set-input-rule! ac anthy-input-rule-roma)))
231
235
(register-action 'action_anthy_kana
244
248
(anthy-context-set-input-rule! ac anthy-input-rule-kana)
245
249
(anthy-context-change-kana-mode! ac (anthy-context-kana-mode ac))
246
250
(anthy-context-set-alnum! ac #f)
251
(japanese-roma-set-yen-representation)
247
252
;;(define-key anthy-kana-toggle-key? "")
248
253
;;(define-key anthy-on-key? generic-on-key?)
249
254
;;(define-key anthy-fullwidth-alnum-key? "")
264
269
(anthy-prepare-input-rule-activation ac)
265
270
(rk-context-set-rule! (anthy-context-rkc ac)
272
(japanese-roma-set-yen-representation)
267
273
(anthy-context-set-input-rule! ac anthy-input-rule-azik)))
269
275
;; Update widget definitions based on action configurations. The
397
403
(string-append-map-ustr-latter extract-kana preconv-str))))))
399
405
(define anthy-make-raw-string
400
(lambda (raw-str-list wide?)
406
(lambda (raw-str-list wide? upper?)
401
407
(if (not (null? raw-str-list))
404
410
(ja-string-list-to-wide-alphabet
405
(string-to-list (car raw-str-list)))
406
(anthy-make-raw-string (cdr raw-str-list) wide?))
414
(if (char-alphabetic? (string->charcode x))
415
(charcode->string (char-upcase (string->charcode x)))
417
(string-to-list (car raw-str-list)))
418
(string-to-list (car raw-str-list))))
419
(anthy-make-raw-string (cdr raw-str-list) wide? upper?))
409
(anthy-make-raw-string (cdr raw-str-list) wide?)))
425
(if (char-alphabetic? (string->charcode x))
426
(charcode->string (char-upcase (string->charcode x)))
428
(string-to-list (car raw-str-list))))
430
(anthy-make-raw-string (cdr raw-str-list) wide? upper?)))
412
433
(define anthy-make-whole-raw-string
414
(anthy-make-raw-string (anthy-get-raw-str-seq ac) wide?)))
434
(lambda (ac wide? upper?)
435
(anthy-make-raw-string (anthy-get-raw-str-seq ac) wide? upper?)))
416
437
(define anthy-init-handler
417
438
(lambda (id im arg)
530
551
(anthy-context-set-converting! ac #f)
531
552
(ustr-clear! (anthy-context-segments ac))))
556
(if (not (symbol? key))
559
((eq? 'kana-lock key)
561
((eq? 'kana-shift key)
564
(let ((name (symbol->string key)))
565
(if (> (string-length name) 5)
568
(list-head (reverse (string-to-list name)) 5))))
569
(if (string=? keysym-head "-anak") ;; reverse
574
(define anthy-non-composing-symbol?
578
(not (kana-keys? key))
579
(not (eq? key 'yen)))
533
583
(define anthy-proc-input-state-no-preedit
534
584
(lambda (ac key key-state)
535
585
(let ((rkc (anthy-context-rkc ac))
623
673
anthy-type-halfwidth-alnum)))
624
674
(im-commit ac (list-ref ja-space (anthy-context-kana-mode ac)))))
676
((anthy-non-composing-symbol? ac key)
627
677
(anthy-commit-raw ac))
630
680
(if (anthy-context-alnum ac)
631
(let ((key-str (charcode->string key)))
681
(let ((key-str (if (symbol? key)
682
(if (symbol-bound? key)
684
"?") ;; shouldn't happen
685
(charcode->string key))))
632
686
(ustr-insert-elem! (anthy-context-preconv-ustr ac)
633
687
(if (= (anthy-context-alnum-type ac)
634
anthy-type-halfwidth-alnum)
688
anthy-type-halfwidth-alnum)
635
689
(list key-str key-str key-str)
636
690
(list (ja-wide key-str) (ja-wide key-str)
638
692
(ustr-insert-elem! (anthy-context-raw-ustr ac) key-str))
639
(let* ((key-str (charcode->string
640
(if (= rule anthy-input-rule-kana)
642
(to-lower-char key))))
693
(let* ((key-str (if (= rule anthy-input-rule-kana)
696
(charcode->string key))
699
(charcode->string (to-lower-char key)))))
643
700
(res (rk-push-key! rkc key-str)))
646
703
(ustr-insert-elem! (anthy-context-preconv-ustr ac) res)
647
(ustr-insert-elem! (anthy-context-raw-ustr ac) key-str))
704
(ustr-insert-elem! (anthy-context-raw-ustr ac)
705
(if (and (intern-key-symbol key-str)
707
(string->symbol key-str)))
709
(string->symbol key-str))
648
711
(if (null? (rk-context-seq rkc))
649
712
(anthy-commit-raw ac))))))))))
653
716
(or (not (ustr-empty? (anthy-context-preconv-ustr ac)))
654
717
(> (string-length (rk-pending (anthy-context-rkc ac))) 0))))
719
(define anthy-rotate-transposing-alnum-type
720
(lambda (cur-type state)
723
(= cur-type anthy-type-halfwidth-alnum)
724
(= state anthy-type-halfwidth-alnum))
725
anthy-candidate-type-upper-halfwidth-alnum)
727
(= cur-type anthy-type-fullwidth-alnum)
728
(= state anthy-type-fullwidth-alnum))
729
anthy-candidate-type-upper-fullwidth-alnum)
656
733
(define anthy-proc-transposing-state
657
734
(lambda (ac key key-state)
658
735
(let ((rotate-list '())
674
751
(not (null? (cdr lst))))
675
752
(set! state (car (cdr lst)))
676
(set! state (car rotate-list))))
753
(set! state (anthy-rotate-transposing-alnum-type
754
(anthy-context-transposing-type ac)
755
(car rotate-list)))))
678
757
(anthy-context-set-transposing! ac #t)
679
758
(set! state (car rotate-list))))
682
((= state anthy-type-hiragana)
683
(anthy-context-set-transposing-type! ac anthy-type-hiragana))
684
((= state anthy-type-katakana)
685
(anthy-context-set-transposing-type! ac anthy-type-katakana))
686
((= state anthy-type-halfkana)
687
(anthy-context-set-transposing-type! ac anthy-type-halfkana))
688
((= state anthy-type-halfwidth-alnum)
689
(if (not (= (anthy-context-input-rule ac)
690
anthy-input-rule-kana))
691
(anthy-context-set-transposing-type!
692
ac anthy-type-halfwidth-alnum)))
693
((= state anthy-type-fullwidth-alnum)
694
(if (not (= (anthy-context-input-rule ac)
695
anthy-input-rule-kana))
696
(anthy-context-set-transposing-type!
697
ac anthy-type-fullwidth-alnum)))
762
(= state anthy-type-hiragana)
763
(= state anthy-type-katakana)
764
(= state anthy-type-halfkana))
765
(anthy-context-set-transposing-type! ac state))
767
(= state anthy-type-halfwidth-alnum)
768
(= state anthy-candidate-type-upper-halfwidth-alnum)
769
(= state anthy-type-fullwidth-alnum)
770
(= state anthy-candidate-type-upper-fullwidth-alnum))
771
(if (not (= (anthy-context-input-rule ac) anthy-input-rule-kana))
772
(anthy-context-set-transposing-type! ac state)))
1105
1180
(not (alphabet-char? key))
1106
1181
(not (string-find
1107
1182
(rk-expect rkc)
1109
(if (= rule anthy-input-rule-kana)
1111
(to-lower-char key))))))
1183
(if (= rule anthy-input-rule-kana)
1185
(symbol->string key)
1186
(charcode->string key))
1188
(symbol->string key)
1189
(charcode->string (to-lower-char key)))))))
1112
1190
(let ((pend (rk-pending rkc))
1113
1191
(residual-kana (rk-push-key-last! rkc)))
1114
1192
(if residual-kana
1117
1195
(ustr-insert-elem! raw-str pend)))))
1119
1197
(if (anthy-context-alnum ac)
1120
(let ((key-str (charcode->string key))
1198
(let ((key-str (if (symbol? key)
1199
(if (symbol-bound? key)
1201
"?") ;; shouldn't happen
1202
(charcode->string key)))
1121
1203
(pend (rk-pending rkc))
1122
1204
(residual-kana (rk-peek-terminal-match rkc)))
1123
1205
(rk-flush rkc) ;; OK to reset rkc here.
1132
1214
(list (ja-wide key-str) (ja-wide key-str)
1133
1215
(ja-wide key-str))))
1134
1216
(ustr-insert-elem! raw-str key-str))
1135
(let* ((key-str (charcode->string
1136
(if (= rule anthy-input-rule-kana)
1138
(to-lower-char key))))
1217
(let* ((key-str (if (= rule anthy-input-rule-kana)
1219
(symbol->string key)
1220
(charcode->string key))
1222
(symbol->string key)
1223
(charcode->string (to-lower-char key)))))
1139
1224
(pend (rk-pending rkc))
1140
1225
(res (rk-push-key! rkc key-str)))
1151
1236
(if (list? (car res))
1153
1238
(ustr-insert-elem! raw-str pend)
1154
(ustr-insert-elem! raw-str key-str))
1240
raw-str (if (and (intern-key-symbol key-str)
1242
(string->symbol key-str)))
1244
(string->symbol key-str))
1155
1246
(ustr-insert-elem!
1157
(string-append pend key-str)))))))))))))
1251
(intern-key-symbol key-str)
1252
(symbol-bound? (string->symbol key-str)))
1253
(symbol-value (string->symbol key-str))
1254
key-str))))))))))))))
1159
1256
(define anthy-context-confirm-kana!
1228
1325
(let* ((transposing-type (anthy-context-transposing-type ac)))
1230
((= transposing-type anthy-type-hiragana)
1231
(anthy-make-whole-string ac #t anthy-type-hiragana))
1233
((= transposing-type anthy-type-katakana)
1234
(anthy-make-whole-string ac #t anthy-type-katakana))
1236
((= transposing-type anthy-type-halfkana)
1237
(anthy-make-whole-string ac #t anthy-type-halfkana))
1328
(= transposing-type anthy-type-hiragana)
1329
(= transposing-type anthy-type-katakana)
1330
(= transposing-type anthy-type-halfkana))
1331
(anthy-make-whole-string ac #t transposing-type))
1239
1332
((= transposing-type anthy-type-halfwidth-alnum)
1240
(anthy-make-whole-raw-string ac #f))
1333
(anthy-make-whole-raw-string ac #f #f))
1334
((= transposing-type anthy-candidate-type-upper-halfwidth-alnum)
1335
(anthy-make-whole-raw-string ac #f #t))
1242
1336
((= transposing-type anthy-type-fullwidth-alnum)
1243
(anthy-make-whole-raw-string ac #t))
1337
(anthy-make-whole-raw-string ac #t #f))
1338
((= transposing-type anthy-candidate-type-upper-fullwidth-alnum)
1339
(anthy-make-whole-raw-string ac #t #t))))))
1246
1341
(define anthy-get-raw-str-seq
1274
1369
(anthy-make-raw-string
1275
1370
(reverse (sublist raw-str start (+ start (- len 1))))
1276
(if (= cand-idx anthy-candidate-type-halfwidth-alnum)
1372
(= cand-idx anthy-candidate-type-halfwidth-alnum)
1374
anthy-candidate-type-upper-halfwidth-alnum))
1378
(= cand-idx anthy-candidate-type-halfwidth-alnum)
1379
(= cand-idx anthy-candidate-type-fullwidth-alnum))
1279
1382
"??")) ;; FIXME
1473
1576
(anthy-context-set-candidate-window! ac #f)))
1474
1577
(anthy-context-set-candidate-op-count! ac 0)))
1579
(define anthy-rotate-segment-transposing-alnum-type
1583
(= idx anthy-candidate-type-halfwidth-alnum)
1584
(= state anthy-candidate-type-halfwidth-alnum))
1585
anthy-candidate-type-upper-halfwidth-alnum)
1587
(= idx anthy-candidate-type-fullwidth-alnum)
1588
(= state anthy-candidate-type-fullwidth-alnum))
1589
anthy-candidate-type-upper-fullwidth-alnum)
1476
1593
(define anthy-set-segment-transposing
1477
1594
(lambda (ac key key-state)
1478
1595
(let ((segments (anthy-context-segments ac)))
1506
1623
(= idx anthy-candidate-type-katakana)
1507
1624
(= idx anthy-candidate-type-halfkana)
1508
1625
(= idx anthy-candidate-type-halfwidth-alnum)
1509
(= idx anthy-candidate-type-fullwidth-alnum))
1626
(= idx anthy-candidate-type-fullwidth-alnum)
1627
(= idx anthy-candidate-type-upper-halfwidth-alnum)
1628
(= idx anthy-candidate-type-upper-fullwidth-alnum))
1510
1629
(let ((lst (member idx rotate-list)))
1511
(if (and (not (null? lst))
1512
1631
(not (null? (cdr lst))))
1513
1632
(set! state (car (cdr lst)))
1514
(set! state (car rotate-list))))
1633
(set! state (anthy-rotate-segment-transposing-alnum-type
1634
idx (car rotate-list)))))
1515
1635
(set! state (car rotate-list)))
1516
1636
(ustr-cursor-set-frontside! segments state))
1517
1637
;; below anthy-7802