(ideographic-structure-find-chars): Add code to refer
[chise/ids.git] / ids-find.el
index 9684d89..8ac5f3d 100644 (file)
@@ -1,6 +1,6 @@
 ;;; ids-find.el --- search utility based on Ideographic-structures ;; -*- coding: utf-8-mcs-er -*-
 
-;; Copyright (C) 2002, 2003, 2005, 2006, 2007, 2017, 2020, 2021
+;; Copyright (C) 2002, 2003, 2005, 2006, 2007, 2017, 2020, 2021, 2022
 ;;   MORIOKA Tomohiko
 
 ;; Author: MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
       (put-char-attribute component 'ideographic-products
                          (cons product ret))
       (when (setq ret (char-feature component 'ideographic-structure))
-       (ids-index-store-structure product ret)))
+       (ids-index-store-structure product ret))
+      (when (setq ret (char-feature component 'ideographic-structure@apparent))
+       (ids-index-store-structure product ret))
+      (when (setq ret (char-feature component 'ideographic-structure@apparent/leftmost))
+       (ids-index-store-structure product ret))
+      (when (setq ret (char-feature component 'ideographic-structure@apparent/rightmost))
+       (ids-index-store-structure product ret))
+      )
     ))
 
 (defun ids-index-store-structure (product structure)
             (ids-index-store-char product cell))
            ((setq ret (assq 'ideographic-structure cell))
             (ids-index-store-structure product (cdr ret)))
+           ((setq ret (assq 'ideographic-structure@apparent cell))
+            (ids-index-store-structure product (cdr ret)))
+           ((setq ret (assq 'ideographic-structure@apparent/leftmost cell))
+            (ids-index-store-structure product (cdr ret)))
+           ((setq ret (assq 'ideographic-structure@apparent/rightmost cell))
+            (ids-index-store-structure product (cdr ret)))
            ((setq ret (find-char cell))
             (ids-index-store-char product ret))
            ))))
      (ids-index-store-structure c v)
      nil)
    'ideographic-structure@apparent/leftmost)
+  (map-char-attribute
+   (lambda (c v)
+     (ids-index-store-structure c v)
+     nil)
+   'ideographic-structure@apparent/rightmost)
   (unless in-memory
     (save-char-attribute-table 'ideographic-products)))
 
                     (ideographic-structure-equal str structure))
                (and (setq str
                           (get-char-attribute pc 'ideographic-structure@apparent/leftmost))
+                    (ideographic-structure-equal str structure))
+               (and (setq str
+                          (get-char-attribute pc 'ideographic-structure@apparent/rightmost))
                     (ideographic-structure-equal str structure)))
        (setq pl (cons pc pl))
        ))
@@ -1682,12 +1703,14 @@ COMPONENT can be a character or char-spec."
                  (cond ((characterp enc)
                         (or (get-char-attribute enc 'ideographic-structure)
                             (get-char-attribute enc 'ideographic-structure@apparent)
-                            (get-char-attribute enc 'ideographic-structure@apparent/leftmost))
+                            (get-char-attribute enc 'ideographic-structure@apparent/leftmost)
+                            (get-char-attribute enc 'ideographic-structure@apparent/rightmost))
                         )
                        ((consp enc)
                         (or (cdr (assq 'ideographic-structure enc))
                             (cdr (assq 'ideographic-structure@apparent enc))
-                            (cdr (assq 'ideographic-structure@apparent/leftmost enc)))
+                            (cdr (assq 'ideographic-structure@apparent/leftmost enc))
+                            (cdr (assq 'ideographic-structure@apparent/rightmost enc)))
                         )))
         ;; (setq enc-str
         ;;       (mapcar (lambda (cell)