(ideographic-structure-compare-functional-and-apparent):
authorMORIOKA Tomohiko <tomo.git@chise.org>
Sun, 13 Sep 2020 06:05:10 +0000 (15:05 +0900)
committerMORIOKA Tomohiko <tomo.git@chise.org>
Sun, 13 Sep 2020 06:05:10 +0000 (15:05 +0900)
- Implement rule-415: ⿴⿳A囗BC -> ⿱⿱A⿴囗CB.
- Implement rule-416: ⿴⿳A冖BC -> ⿱⿱⿱A冖CB.
- Implement rule-417: ⿴⿳A&CDP-89A6;BC -> ⿱A⿸⿱C&CDP-89A6;B.
- Implement rule-419 (fallback): ⿴⿳AEBC -> ⿱⿱A⿻ECB.

ids-find.el

index db20f4c..32bffc7 100644 (file)
@@ -1452,8 +1452,109 @@ COMPONENT can be a character or char-spec."
                    (list ?⿱ (nth 1 enc-str) new-str-c)
                    414))
            ))
-         ))
-       )
+         )
+        ((eq (car enc-str) ?⿳)
+         (cond
+          ((and (characterp (nth 2 enc-str))
+                (eq (char-ucs (nth 2 enc-str)) #x56D7))
+           (unless conversion-only
+             (setq f-res (ids-find-chars-including-ids enc-str)))
+           (setq new-str (list ?⿴ (nth 2 enc-str) (nth 2 structure)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
+           (setq new-str (list ?⿱ (nth 1 enc-str) new-str-c))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
+           (if conversion-only
+               (list ?⿱  new-str-c (nth 3 enc-str))
+             (setq a-res (ids-find-chars-including-ids new-str))
+             (list enc
+                   f-res
+                   new-str-c
+                   a-res
+                   (list ?⿱  new-str-c (nth 3 enc-str))
+                   415))
+           )
+          ((and (characterp (nth 2 enc-str))
+                (eq (char-ucs (nth 2 enc-str)) #x5196))
+           (unless conversion-only
+             (setq f-res (ids-find-chars-including-ids enc-str)))
+           (setq new-str (list ?⿱ (nth 1 enc-str) (nth 2 enc-str)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
+           (setq new-str (list ?⿱ new-str-c (nth 2 structure)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
+           (if conversion-only
+               (list ?⿱ new-str-c (nth 3 enc-str))
+             (setq a-res (ids-find-chars-including-ids new-str))
+             (list enc
+                   f-res
+                   new-str-c
+                   a-res
+                   (list ?⿱ new-str-c (nth 3 enc-str))
+                   416))
+           )
+          ((and (characterp (nth 2 enc-str))
+                (or (eq (encode-char (nth 2 enc-str) '=>big5-cdp)
+                        #x89A6)
+                    (eq (encode-char (nth 2 enc-str) '=>gt-k)
+                        146)
+                    (eq (char-ucs (nth 2 enc-str)) #x2008A)))
+           (unless conversion-only
+             (setq f-res (ids-find-chars-including-ids enc-str)))
+           (setq new-str (list ?⿱ (nth 2 structure) (nth 2 enc-str)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
+           (setq new-str (list ?⿸ new-str-c (nth 3 enc-str)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
+           (if conversion-only
+               (list ?⿱ (nth 1 enc-str) new-str-c)
+             (setq a-res (ids-find-chars-including-ids new-str))
+             (list enc
+                   f-res
+                   new-str-c
+                   a-res
+                   (list ?⿱ (nth 1 enc-str) new-str-c)
+                   417))
+           )
+          (t
+           (unless conversion-only
+             (setq f-res (ids-find-chars-including-ids enc-str)))
+           (setq new-str (list ?⿻ (nth 2 enc-str) (nth 2 structure)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
+           (setq new-str (list ?⿱ (nth 1 enc-str) new-str-c))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
+           (if conversion-only
+               (list ?⿱  new-str-c (nth 3 enc-str))
+             (setq a-res (ids-find-chars-including-ids new-str))
+             (list enc
+                   f-res
+                   new-str-c
+                   a-res
+                   (list ?⿱  new-str-c (nth 3 enc-str))
+                   419))
+           ))
+         )))
       )
      ((eq (car structure) ?⿶)
       (setq enc (nth 1 structure))