(functional-ideographic-structure-to-apparent-structure): Use
authorMORIOKA Tomohiko <tomo.git@chise.org>
Sat, 12 Sep 2020 03:14:05 +0000 (12:14 +0900)
committerMORIOKA Tomohiko <tomo.git@chise.org>
Sat, 12 Sep 2020 03:14:05 +0000 (12:14 +0900)
`ideographic-structure-compact' for the return value.
(ideographic-structure-compare-functional-and-apparent): Change format
of the third field [converted apparent-component] of each element: if
it can be compacted to a character, return the character.  Otherwise,
use char-spec format instead of parsed-IDS format.

ids-find.el

index 401866f..2ffce8b 100644 (file)
@@ -767,346 +767,347 @@ COMPONENT can be a character or char-spec."
   (apply #'ids-find-chars-including-ids* structure))
 
 (defun functional-ideographic-structure-to-apparent-structure (structure)
-  (let (enc enc-str enc2-str new-str)
-    (cond
-     ((eq (car structure) ?⿸)
-      (setq enc (nth 1 structure))
-      (when (setq enc-str
-                 (cond ((characterp enc)
-                        (get-char-attribute enc 'ideographic-structure)
-                        )
-                       ((consp enc)
-                        (cdr (assq 'ideographic-structure enc))
-                        )))
-       (cond
-        ((eq (car enc-str) ?⿰)
-         (list ?⿰ (nth 1 enc-str)
-               (list (list 'ideographic-structure
-                           ?⿱
-                           (nth 2 enc-str)
-                           (nth 2 structure))))
-         )
-        ((and (eq (car enc-str) ?⿲)
-              (memq (char-ucs (nth 1 enc-str)) '(#x4EBB #x2E85))
-              (eq (nth 2 enc-str) ?丨))
-         (list ?⿰
-               (decode-char '=big5-cdp #x8B7A)
-               (list (list 'ideographic-structure
-                           ?⿱
-                           (nth 3 enc-str)
-                           (nth 2 structure))))
-         )
-        ((eq (car enc-str) ?⿱)
-         (list ?⿱ (nth 1 enc-str)
-               (list
-                (cons 'ideographic-structure
-                      (or (functional-ideographic-structure-to-apparent-structure
-                           (setq new-str
-                                 (list
-                                  (cond
-                                   ((characterp (nth 2 enc-str))
-                                    (if (or (eq (encode-char
-                                                 (nth 2 enc-str)
-                                                 '=>ucs@component)
-                                                #x20087)
-                                            (eq (encode-char
-                                                 (nth 2 enc-str)
-                                                 '=>ucs@component)
-                                                #x5382)
-                                            (eq (encode-char
-                                                 (nth 2 enc-str)
-                                                 '=>ucs@component)
-                                                #x4E06)
-                                            (eq (encode-char
-                                                 (nth 2 enc-str)
-                                                 '=big5-cdp)
-                                                #x89CE)
-                                            (eq (encode-char
-                                                 (nth 2 enc-str)
-                                                 '=>big5-cdp)
-                                                #x88E2)
-                                            (eq (encode-char
-                                                 (nth 2 enc-str)
-                                                 '=big5-cdp)
-                                                #x88AD)
-                                            (eq (or (encode-char
-                                                     (nth 2 enc-str)
-                                                     '=>big5-cdp)
-                                                    (encode-char
-                                                     (nth 2 enc-str)
-                                                     '=big5-cdp-itaiji-001))
-                                                #x8766)
-                                            (eq (car
-                                                 (get-char-attribute
+  (ideographic-structure-compact
+   (let (enc enc-str enc2-str new-str)
+     (cond
+      ((eq (car structure) ?⿸)
+       (setq enc (nth 1 structure))
+       (when (setq enc-str
+                  (cond ((characterp enc)
+                         (get-char-attribute enc 'ideographic-structure)
+                         )
+                        ((consp enc)
+                         (cdr (assq 'ideographic-structure enc))
+                         )))
+        (cond
+         ((eq (car enc-str) ?⿰)
+          (list ?⿰ (nth 1 enc-str)
+                (list (list 'ideographic-structure
+                            ?⿱
+                            (nth 2 enc-str)
+                            (nth 2 structure))))
+          )
+         ((and (eq (car enc-str) ?⿲)
+               (memq (char-ucs (nth 1 enc-str)) '(#x4EBB #x2E85))
+               (eq (nth 2 enc-str) ?丨))
+          (list ?⿰
+                (decode-char '=big5-cdp #x8B7A)
+                (list (list 'ideographic-structure
+                            ?⿱
+                            (nth 3 enc-str)
+                            (nth 2 structure))))
+          )
+         ((eq (car enc-str) ?⿱)
+          (list ?⿱ (nth 1 enc-str)
+                (list
+                 (cons 'ideographic-structure
+                       (or (functional-ideographic-structure-to-apparent-structure
+                            (setq new-str
+                                  (list
+                                   (cond
+                                    ((characterp (nth 2 enc-str))
+                                     (if (or (eq (encode-char
                                                   (nth 2 enc-str)
-                                                  'ideographic-structure))
-                                                ?⿸))
-                                        ?⿸
-                                      ?⿰))
-                                   ((eq (car
-                                         (cdr
-                                          (assq 'ideographic-structure
-                                                (nth 2 enc-str))))
-                                        ?⿸)
-                                    ?⿸)
-                                   (t
-                                    ?⿰))
-                                  (nth 2 enc-str)
-                                  (nth 2 structure)
-                                  )))
-                          new-str))))
-         )
-        ((eq (car enc-str) ?⿸)
-         (list ?⿸ (nth 1 enc-str)
-               (list
-                (cons 'ideographic-structure
-                      (setq new-str
-                            (list
-                             (cond
-                              ((characterp (nth 2 enc-str))
-                               (if (memq (char-ucs (nth 2 enc-str))
-                                         '(#x5F73))
-                                   ?⿰
-                                 ?⿱)
-                               )
-                              (t
-                               ?⿱))
-                             (nth 2 enc-str)
-                             (nth 2 structure))))))
-         )))
-      )
-     ((eq (car structure) ?⿹)
-      (setq enc (nth 1 structure))
-      (when (setq enc-str
-                 (cond ((characterp enc)
-                        (get-char-attribute enc 'ideographic-structure)
-                        )
-                       ((consp enc)
-                        (cdr (assq 'ideographic-structure enc))
-                        )))
-       (cond
-        ((eq (car enc-str) ?⿰)
-         (list ?⿰
-               (list (list 'ideographic-structure
-                           ?⿱
-                           (nth 1 enc-str)
-                           (nth 2 structure)))
-               (nth 2 enc-str))
-         )))
-      )
-     ((eq (get-char-attribute (car structure) '=ucs-itaiji-001) #x2FF6)
-      (setq enc (nth 1 structure))
-      (when (setq enc-str
-                 (cond ((characterp enc)
-                        (get-char-attribute enc 'ideographic-structure)
-                        )
-                       ((consp enc)
-                        (cdr (assq 'ideographic-structure enc))
-                        )))
-       (cond
-        ((eq (car enc-str) ?⿺)
-         (list ?⿺
-               (list (list 'ideographic-structure
-                           ?⿱
-                           (nth 2 structure)
-                           (nth 1 enc-str)))
-               (nth 2 enc-str))
-         )
-        ((eq (car enc-str) ?⿱)
-         (list ?⿱
-               (list (list 'ideographic-structure
-                           ?⿰
-                           (nth 2 structure)
-                           (nth 1 enc-str)))
-               (nth 2 enc-str))
-         ))
-       )
-      )
-     ((eq (car structure) ?⿴)
-      (setq enc (nth 1 structure))
-      (when (setq enc-str
-                 (cond ((characterp enc)
-                        (get-char-attribute enc 'ideographic-structure)
-                        )
-                       ((consp enc)
-                        (cdr (assq 'ideographic-structure enc))
-                        )))
-       (cond
-        ((eq (car enc-str) ?⿱)
-         (cond
-          ((and (characterp (nth 2 enc-str))
-                (or (memq (char-ucs (nth 2 enc-str)) '(#x56D7 #x5F51 #x897F))
-                    (eq (char-feature (nth 2 enc-str) '=>big5-cdp)
-                        #x87A5)))
-           (list ?⿱
-                 (nth 1 enc-str)
-                 (list (list 'ideographic-structure
-                             ?⿴
-                             (nth 2 enc-str)
-                             (nth 2 structure)))
-                 )
-           )
-          ((and (characterp (nth 2 enc-str))
-                (eq (char-ucs (nth 2 enc-str)) #x51F5))
-           (list ?⿱
-                 (nth 1 enc-str)
-                 (list (list 'ideographic-structure
-                             ?⿶
-                             (nth 2 enc-str)
-                             (nth 2 structure)))
-                 )
-           )       
-          ((and (characterp (nth 1 enc-str))
-                (eq (char-feature (nth 1 enc-str) '=>ucs@component)
-                    #x300E6))
-           (list ?⿱
-                 (list (list 'ideographic-structure
-                             ?⿵
-                             (nth 1 enc-str)
-                             (nth 2 structure)))
-                 (nth 2 enc-str))
-           )
-          (t
-           (list ?⿳
-                 (nth 1 enc-str)
-                 (nth 2 structure)
-                 (nth 2 enc-str))
-           ))
-         ))
-       )
-      )
-     ((eq (car structure) ?⿶)
-      (setq enc (nth 1 structure))
-      (when (setq enc-str
-                 (cond ((characterp enc)
-                        (get-char-attribute enc 'ideographic-structure)
-                        )
-                       ((consp enc)
-                        (cdr (assq 'ideographic-structure enc))
-                        )))
-       (cond
-        ((eq (car enc-str) ?⿱)
-         (setq enc2-str (ideographic-character-get-structure (nth 1 enc-str)))
-         (when (and enc2-str
-                    (eq (car enc2-str) ?⿰))
-           (list ?⿱
-                 (list (list 'ideographic-structure
-                             ?⿲
-                             (nth 1 enc2-str)
-                             (nth 2 structure)
-                             (nth 2 enc2-str)))
-                 (nth 2 enc-str)))
-         )
-        ((eq (car enc-str) ?⿳)
-         (setq enc2-str (ideographic-character-get-structure (nth 1 enc-str)))
-         (when (and enc2-str
-                    (eq (car enc2-str) ?⿰))
-           (list ?⿳
-                 (list (list 'ideographic-structure
-                             ?⿲
-                             (nth 1 enc2-str)
-                             (nth 2 structure)
-                             (nth 2 enc2-str)))
-                 (nth 2 enc-str)
-                 (nth 3 enc-str)))
-         )
-        ((eq (car enc-str) ?⿲)
-         (list ?⿲
-               (nth 1 enc-str)
-               (list (list 'ideographic-structure
-                           ?⿱
-                           (nth 2 structure)
-                           (nth 2 enc-str)))
-               (nth 3 enc-str))
-         )
-        ((eq (car enc-str) ?⿴)
-         (setq enc2-str (ideographic-character-get-structure (nth 1 enc-str)))
-         (when (and enc2-str
-                    (eq (car enc2-str) ?⿰))
-           (list ?⿲
-                 (nth 1 enc2-str)
-                 (list (list 'ideographic-structure
-                             ?⿱
-                             (nth 2 structure)
-                             (nth 2 enc-str)))
-                 (nth 2 enc2-str)))
-         )))
-      )
-     ((eq (car structure) ?⿵)
-      (setq enc (nth 1 structure))
-      (when (setq enc-str
-                 (cond ((characterp enc)
-                        (get-char-attribute enc 'ideographic-structure)
-                        )
-                       ((consp enc)
-                        (cdr (assq 'ideographic-structure enc))
-                        )))
-       (cond
-        ((eq (car enc-str) ?⿱)
-         (setq enc2-str (ideographic-character-get-structure (nth 2 enc-str)))
-         (when (and enc2-str
-                    (eq (car enc2-str) ?⿰))
-           (list ?⿱
-                 (nth 1 enc-str)
-                 (list (list 'ideographic-structure
-                             ?⿲
-                             (nth 1 enc2-str)
-                             (nth 2 structure)
-                             (nth 2 enc2-str)))))
-         )
-        ((eq (car enc-str) ?⿳)
-         (setq enc2-str (ideographic-character-get-structure (nth 3 enc-str)))
-         (when (and enc2-str
-                    (eq (car enc2-str) ?⿰))
-           (list ?⿳
-                 (nth 1 enc-str)
-                 (nth 2 enc-str)
-                 (list (list 'ideographic-structure
-                             ?⿲
-                             (nth 1 enc2-str)
-                             (nth 2 structure)
-                             (nth 2 enc2-str)))))
-         )
-        ((eq (car enc-str) ?⿲)
-         (list ?⿲
-               (nth 1 enc-str)
-               (list (list 'ideographic-structure
-                           ?⿱
-                           (nth 2 enc-str)
-                           (nth 2 structure)))
-               (nth 3 enc-str))
-         )
-        ((eq (car enc-str) ?⿴)
-         (setq enc2-str (ideographic-character-get-structure (nth 1 enc-str)))
-         (when (and enc2-str
-                    (eq (car enc2-str) ?⿰))
-           (list ?⿲
-                 (nth 1 enc2-str)
-                 (list (list 'ideographic-structure
-                             ?⿱
-                             (nth 2 enc-str)
-                             (nth 2 structure)))
-                 (nth 2 enc2-str)))
-         )))
-      )
-     ((eq (car structure) ?⿻)
-      (setq enc (nth 1 structure))
-      (when (setq enc-str
-                 (cond ((characterp enc)
-                        (get-char-attribute enc 'ideographic-structure)
-                        )
-                       ((consp enc)
-                        (cdr (assq 'ideographic-structure enc))
-                        )))
-       (cond
-        ((eq (car enc-str) ?⿱)
-         (list ?⿳
-               (nth 1 enc-str)
-               (nth 2 structure)
-               (nth 2 enc-str))
-         )))
-      ))
-    ))
+                                                  '=>ucs@component)
+                                                 #x20087)
+                                             (eq (encode-char
+                                                  (nth 2 enc-str)
+                                                  '=>ucs@component)
+                                                 #x5382)
+                                             (eq (encode-char
+                                                  (nth 2 enc-str)
+                                                  '=>ucs@component)
+                                                 #x4E06)
+                                             (eq (encode-char
+                                                  (nth 2 enc-str)
+                                                  '=big5-cdp)
+                                                 #x89CE)
+                                             (eq (encode-char
+                                                  (nth 2 enc-str)
+                                                  '=>big5-cdp)
+                                                 #x88E2)
+                                             (eq (encode-char
+                                                  (nth 2 enc-str)
+                                                  '=big5-cdp)
+                                                 #x88AD)
+                                             (eq (or (encode-char
+                                                      (nth 2 enc-str)
+                                                      '=>big5-cdp)
+                                                     (encode-char
+                                                      (nth 2 enc-str)
+                                                      '=big5-cdp-itaiji-001))
+                                                 #x8766)
+                                             (eq (car
+                                                  (get-char-attribute
+                                                   (nth 2 enc-str)
+                                                   'ideographic-structure))
+                                                 ?⿸))
+                                         ?⿸
+                                       ?⿰))
+                                    ((eq (car
+                                          (cdr
+                                           (assq 'ideographic-structure
+                                                 (nth 2 enc-str))))
+                                         ?⿸)
+                                     ?⿸)
+                                    (t
+                                     ?⿰))
+                                   (nth 2 enc-str)
+                                   (nth 2 structure)
+                                   )))
+                           new-str))))
+          )
+         ((eq (car enc-str) ?⿸)
+          (list ?⿸ (nth 1 enc-str)
+                (list
+                 (cons 'ideographic-structure
+                       (setq new-str
+                             (list
+                              (cond
+                               ((characterp (nth 2 enc-str))
+                                (if (memq (char-ucs (nth 2 enc-str))
+                                          '(#x5F73))
+                                    ?⿰
+                                  ?⿱)
+                                )
+                               (t
+                                ?⿱))
+                              (nth 2 enc-str)
+                              (nth 2 structure))))))
+          )))
+       )
+      ((eq (car structure) ?⿹)
+       (setq enc (nth 1 structure))
+       (when (setq enc-str
+                  (cond ((characterp enc)
+                         (get-char-attribute enc 'ideographic-structure)
+                         )
+                        ((consp enc)
+                         (cdr (assq 'ideographic-structure enc))
+                         )))
+        (cond
+         ((eq (car enc-str) ?⿰)
+          (list ?⿰
+                (list (list 'ideographic-structure
+                            ?⿱
+                            (nth 1 enc-str)
+                            (nth 2 structure)))
+                (nth 2 enc-str))
+          )))
+       )
+      ((eq (get-char-attribute (car structure) '=ucs-itaiji-001) #x2FF6)
+       (setq enc (nth 1 structure))
+       (when (setq enc-str
+                  (cond ((characterp enc)
+                         (get-char-attribute enc 'ideographic-structure)
+                         )
+                        ((consp enc)
+                         (cdr (assq 'ideographic-structure enc))
+                         )))
+        (cond
+         ((eq (car enc-str) ?⿺)
+          (list ?⿺
+                (list (list 'ideographic-structure
+                            ?⿱
+                            (nth 2 structure)
+                            (nth 1 enc-str)))
+                (nth 2 enc-str))
+          )
+         ((eq (car enc-str) ?⿱)
+          (list ?⿱
+                (list (list 'ideographic-structure
+                            ?⿰
+                            (nth 2 structure)
+                            (nth 1 enc-str)))
+                (nth 2 enc-str))
+          ))
+        )
+       )
+      ((eq (car structure) ?⿴)
+       (setq enc (nth 1 structure))
+       (when (setq enc-str
+                  (cond ((characterp enc)
+                         (get-char-attribute enc 'ideographic-structure)
+                         )
+                        ((consp enc)
+                         (cdr (assq 'ideographic-structure enc))
+                         )))
+        (cond
+         ((eq (car enc-str) ?⿱)
+          (cond
+           ((and (characterp (nth 2 enc-str))
+                 (or (memq (char-ucs (nth 2 enc-str)) '(#x56D7 #x5F51 #x897F))
+                     (eq (char-feature (nth 2 enc-str) '=>big5-cdp)
+                         #x87A5)))
+            (list ?⿱
+                  (nth 1 enc-str)
+                  (list (list 'ideographic-structure
+                              ?⿴
+                              (nth 2 enc-str)
+                              (nth 2 structure)))
+                  )
+            )
+           ((and (characterp (nth 2 enc-str))
+                 (eq (char-ucs (nth 2 enc-str)) #x51F5))
+            (list ?⿱
+                  (nth 1 enc-str)
+                  (list (list 'ideographic-structure
+                              ?⿶
+                              (nth 2 enc-str)
+                              (nth 2 structure)))
+                  )
+            )      
+           ((and (characterp (nth 1 enc-str))
+                 (eq (char-feature (nth 1 enc-str) '=>ucs@component)
+                     #x300E6))
+            (list ?⿱
+                  (list (list 'ideographic-structure
+                              ?⿵
+                              (nth 1 enc-str)
+                              (nth 2 structure)))
+                  (nth 2 enc-str))
+            )
+           (t
+            (list ?⿳
+                  (nth 1 enc-str)
+                  (nth 2 structure)
+                  (nth 2 enc-str))
+            ))
+          ))
+        )
+       )
+      ((eq (car structure) ?⿶)
+       (setq enc (nth 1 structure))
+       (when (setq enc-str
+                  (cond ((characterp enc)
+                         (get-char-attribute enc 'ideographic-structure)
+                         )
+                        ((consp enc)
+                         (cdr (assq 'ideographic-structure enc))
+                         )))
+        (cond
+         ((eq (car enc-str) ?⿱)
+          (setq enc2-str (ideographic-character-get-structure (nth 1 enc-str)))
+          (when (and enc2-str
+                     (eq (car enc2-str) ?⿰))
+            (list ?⿱
+                  (list (list 'ideographic-structure
+                              ?⿲
+                              (nth 1 enc2-str)
+                              (nth 2 structure)
+                              (nth 2 enc2-str)))
+                  (nth 2 enc-str)))
+          )
+         ((eq (car enc-str) ?⿳)
+          (setq enc2-str (ideographic-character-get-structure (nth 1 enc-str)))
+          (when (and enc2-str
+                     (eq (car enc2-str) ?⿰))
+            (list ?⿳
+                  (list (list 'ideographic-structure
+                              ?⿲
+                              (nth 1 enc2-str)
+                              (nth 2 structure)
+                              (nth 2 enc2-str)))
+                  (nth 2 enc-str)
+                  (nth 3 enc-str)))
+          )
+         ((eq (car enc-str) ?⿲)
+          (list ?⿲
+                (nth 1 enc-str)
+                (list (list 'ideographic-structure
+                            ?⿱
+                            (nth 2 structure)
+                            (nth 2 enc-str)))
+                (nth 3 enc-str))
+          )
+         ((eq (car enc-str) ?⿴)
+          (setq enc2-str (ideographic-character-get-structure (nth 1 enc-str)))
+          (when (and enc2-str
+                     (eq (car enc2-str) ?⿰))
+            (list ?⿲
+                  (nth 1 enc2-str)
+                  (list (list 'ideographic-structure
+                              ?⿱
+                              (nth 2 structure)
+                              (nth 2 enc-str)))
+                  (nth 2 enc2-str)))
+          )))
+       )
+      ((eq (car structure) ?⿵)
+       (setq enc (nth 1 structure))
+       (when (setq enc-str
+                  (cond ((characterp enc)
+                         (get-char-attribute enc 'ideographic-structure)
+                         )
+                        ((consp enc)
+                         (cdr (assq 'ideographic-structure enc))
+                         )))
+        (cond
+         ((eq (car enc-str) ?⿱)
+          (setq enc2-str (ideographic-character-get-structure (nth 2 enc-str)))
+          (when (and enc2-str
+                     (eq (car enc2-str) ?⿰))
+            (list ?⿱
+                  (nth 1 enc-str)
+                  (list (list 'ideographic-structure
+                              ?⿲
+                              (nth 1 enc2-str)
+                              (nth 2 structure)
+                              (nth 2 enc2-str)))))
+          )
+         ((eq (car enc-str) ?⿳)
+          (setq enc2-str (ideographic-character-get-structure (nth 3 enc-str)))
+          (when (and enc2-str
+                     (eq (car enc2-str) ?⿰))
+            (list ?⿳
+                  (nth 1 enc-str)
+                  (nth 2 enc-str)
+                  (list (list 'ideographic-structure
+                              ?⿲
+                              (nth 1 enc2-str)
+                              (nth 2 structure)
+                              (nth 2 enc2-str)))))
+          )
+         ((eq (car enc-str) ?⿲)
+          (list ?⿲
+                (nth 1 enc-str)
+                (list (list 'ideographic-structure
+                            ?⿱
+                            (nth 2 enc-str)
+                            (nth 2 structure)))
+                (nth 3 enc-str))
+          )
+         ((eq (car enc-str) ?⿴)
+          (setq enc2-str (ideographic-character-get-structure (nth 1 enc-str)))
+          (when (and enc2-str
+                     (eq (car enc2-str) ?⿰))
+            (list ?⿲
+                  (nth 1 enc2-str)
+                  (list (list 'ideographic-structure
+                              ?⿱
+                              (nth 2 enc-str)
+                              (nth 2 structure)))
+                  (nth 2 enc2-str)))
+          )))
+       )
+      ((eq (car structure) ?⿻)
+       (setq enc (nth 1 structure))
+       (when (setq enc-str
+                  (cond ((characterp enc)
+                         (get-char-attribute enc 'ideographic-structure)
+                         )
+                        ((consp enc)
+                         (cdr (assq 'ideographic-structure enc))
+                         )))
+        (cond
+         ((eq (car enc-str) ?⿱)
+          (list ?⿳
+                (nth 1 enc-str)
+                (nth 2 structure)
+                (nth 2 enc-str))
+          )))
+       ))
+     )))
 
 ;;;###autoload
 (defun ideographic-structure-compact (structure)
@@ -1133,7 +1134,7 @@ COMPONENT can be a character or char-spec."
 
 (defun ideographic-structure-compare-functional-and-apparent (structure
                                                              &optional char)
-  (let (enc enc-str enc2-str new-str f-res a-res code)
+  (let (enc enc-str enc2-str new-str new-str-c f-res a-res code ret)
     (cond
      ((eq (car structure) ?⿸)
       (setq enc (nth 1 structure))
@@ -1150,14 +1151,16 @@ COMPONENT can be a character or char-spec."
          (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 a-res (ids-find-chars-including-ids new-str))
          (list enc
                f-res
-               new-str
+               new-str-c
                a-res
-               (list ?⿰
-                     (nth 1 enc-str)
-                     (list (cons 'ideographic-structure new-str)))
+               (list ?⿰ (nth 1 enc-str) new-str-c)
                111)
          )
         ((and (eq (car enc-str) ?⿲)
@@ -1167,14 +1170,16 @@ COMPONENT can be a character or char-spec."
          (setq new-str (list ?⿱
                              (nth 3 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 a-res (ids-find-chars-including-ids new-str))
          (list enc
                f-res
-               new-str
+               new-str-c
                a-res
-               (list ?⿰
-                     (decode-char '=big5-cdp #x8B7A)
-                     (list (cons 'ideographic-structure new-str)))
+               (list ?⿰ (decode-char '=big5-cdp #x8B7A) new-str-c)
                112)
          )
         ((eq (car enc-str) ?⿱)
@@ -1210,19 +1215,16 @@ COMPONENT can be a character or char-spec."
                   ?⿰))
                 (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 a-res (ids-find-chars-including-ids new-str))
          (list enc
                f-res
-               new-str
+               new-str-c
                a-res
-               (list
-                ?⿱
-                (nth 1 enc-str)
-                (list
-                 (cons 'ideographic-structure
-                       (or (functional-ideographic-structure-to-apparent-structure
-                            new-str)
-                           new-str))))
+               (list ?⿱ (nth 1 enc-str) new-str-c)
                (if (eq (car new-str) ?⿸)
                    121
                  122))
@@ -1240,13 +1242,16 @@ COMPONENT can be a character or char-spec."
                                ?⿱))
                              (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 a-res (ids-find-chars-including-ids new-str))
          (list enc
                f-res
-               new-str
+               new-str-c
                a-res
-               (list ?⿸ (nth 1 enc-str)
-                     (list (cons 'ideographic-structure new-str)))
+               (list ?⿸ (nth 1 enc-str) new-str-c)
                (if (eq (car new-str) ?⿰)
                    131
                  132))
@@ -1267,14 +1272,16 @@ COMPONENT can be a character or char-spec."
          (setq new-str (list ?⿱
                              (nth 1 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 a-res (ids-find-chars-including-ids new-str))
          (list enc
                f-res
-               new-str
+               new-str-c
                a-res
-               (list ?⿰
-                     (list (cons 'ideographic-structure new-str))
-                     (nth 2 enc-str))
+               (list ?⿰ new-str-c (nth 2 enc-str))
                210)
          )))
       )
@@ -1293,14 +1300,16 @@ COMPONENT can be a character or char-spec."
          (setq new-str (list ?⿱
                              (nth 2 structure)
                              (nth 1 enc-str)))
+         (setq new-str-c
+               (if (setq ret (ideographic-structure-find-chars new-str))
+                   (car ret)
+                 (list (cons 'ideographic-structure new-str))))
          (setq a-res (ids-find-chars-including-ids new-str))
          (list enc
                f-res
-               new-str
+               new-str-c
                a-res
-               (list ?⿺
-                     (list (cons 'ideographic-structure new-str))
-                     (nth 2 enc-str))
+               (list ?⿺ new-str-c (nth 2 enc-str))
                310)
          )
         ((eq (car enc-str) ?⿱)
@@ -1308,14 +1317,16 @@ COMPONENT can be a character or char-spec."
          (setq new-str (list ?⿰
                              (nth 2 structure)
                              (nth 1 enc-str)))
+         (setq new-str-c
+               (if (setq ret (ideographic-structure-find-chars new-str))
+                   (car ret)
+                 (list (cons 'ideographic-structure new-str))))
          (setq a-res (ids-find-chars-including-ids new-str))
          (list enc
                f-res
-               new-str
+               new-str-c
                a-res
-               (list ?⿱
-                     (list (cons 'ideographic-structure new-str))
-                     (nth 2 enc-str))
+               (list ?⿱ new-str-c (nth 2 enc-str))
                320)
          ))
        )
@@ -1340,14 +1351,16 @@ COMPONENT can be a character or char-spec."
            (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 a-res (ids-find-chars-including-ids new-str))
            (list enc
                  f-res
-                 new-str
+                 new-str-c
                  a-res
-                 (list ?⿱
-                       (nth 1 enc-str)
-                       (list (cons 'ideographic-structure new-str)))
+                 (list ?⿱ (nth 1 enc-str) new-str-c)
                  411)
            )
           ((and (characterp (nth 2 enc-str))
@@ -1356,15 +1369,16 @@ COMPONENT can be a character or char-spec."
            (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 a-res (ids-find-chars-including-ids new-str))
            (list enc
                  f-res
-                 new-str
+                 new-str-c
                  a-res
-                 (list ?⿱
-                       (nth 1 enc-str)
-                       (list (cons 'ideographic-structure
-                                   new-str)))
+                 (list ?⿱ (nth 1 enc-str) new-str-c)
                  412)
            )       
           ((and (characterp (nth 1 enc-str))
@@ -1374,14 +1388,16 @@ COMPONENT can be a character or char-spec."
            (setq new-str (list ?⿵
                                (nth 1 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 a-res (ids-find-chars-including-ids new-str))
            (list enc
                  f-res
-                 new-str
+                 new-str-c
                  a-res
-                 (list ?⿱
-                       (list (cons 'ideographic-structure new-str))
-                       (nth 2 enc-str))
+                 (list ?⿱ new-str-c (nth 2 enc-str))
                  413)
            )
           (t
@@ -1418,14 +1434,16 @@ COMPONENT can be a character or char-spec."
                                (nth 1 enc2-str)
                                (nth 2 structure)
                                (nth 2 enc2-str)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
            (setq a-res (ids-find-chars-including-ids new-str))
            (list enc
                  f-res
-                 new-str
+                 new-str-c
                  a-res
-                 (list ?⿱
-                       (list (cons 'ideographic-structure new-str))
-                       (nth 2 enc-str))
+                 (list ?⿱ new-str-c (nth 2 enc-str))
                  511)
            )
          )
@@ -1438,15 +1456,16 @@ COMPONENT can be a character or char-spec."
                                (nth 1 enc2-str)
                                (nth 2 structure)
                                (nth 2 enc2-str)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
            (setq a-res (ids-find-chars-including-ids new-str))
            (list enc
                  f-res
-                 new-str
+                 new-str-c
                  a-res
-                 (list ?⿳
-                       (list (cons 'ideographic-structure new-str))
-                       (nth 2 enc-str)
-                       (nth 3 enc-str))
+                 (list ?⿳ new-str-c (nth 2 enc-str) (nth 3 enc-str))
                  512)
            )
          )
@@ -1455,15 +1474,16 @@ COMPONENT can be a character or char-spec."
          (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 a-res (ids-find-chars-including-ids new-str))
          (list enc
                f-res
-               new-str
+               new-str-c
                a-res
-               (list ?⿲
-                     (nth 1 enc-str)
-                     (list (cons 'ideographic-structure new-str))
-                     (nth 3 enc-str))
+               (list ?⿲ (nth 1 enc-str) new-str-c (nth 3 enc-str))
                520)
          )
         ((eq (car enc-str) ?⿴)
@@ -1474,15 +1494,16 @@ COMPONENT can be a character or char-spec."
            (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 a-res (ids-find-chars-including-ids new-str))
            (list enc
                  f-res
-                 new-str
+                 new-str-c
                  a-res
-                 (list ?⿲
-                       (nth 1 enc2-str)
-                       (list (cons 'ideographic-structure new-str))
-                       (nth 2 enc2-str))
+                 (list ?⿲ (nth 1 enc2-str) new-str-c (nth 2 enc2-str))
                  530)
            )
          )))
@@ -1506,14 +1527,16 @@ COMPONENT can be a character or char-spec."
                                (nth 1 enc2-str)
                                (nth 2 structure)
                                (nth 2 enc2-str)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
            (setq a-res (ids-find-chars-including-ids new-str))
            (list enc
                  f-res
-                 new-str
+                 new-str-c
                  a-res
-                 (list ?⿱
-                       (nth 1 enc-str)
-                       (list (cons 'ideographic-structure new-str)))
+                 (list ?⿱ (nth 1 enc-str) new-str-c)
                  611)
            )
          )
@@ -1526,15 +1549,16 @@ COMPONENT can be a character or char-spec."
                                (nth 1 enc2-str)
                                (nth 2 structure)
                                (nth 2 enc2-str)))
+           (setq new-str-c
+                 (if (setq ret (ideographic-structure-find-chars new-str))
+                     (car ret)
+                   (list (cons 'ideographic-structure new-str))))
            (setq a-res (ids-find-chars-including-ids new-str))
            (list enc
                  f-res
-                 new-str
+                 new-str-c
                  a-res
-                 (list ?⿳
-                       (nth 1 enc-str)
-                       (nth 2 enc-str)
-                       (list (cons 'ideographic-structure new-str)))
+                 (list ?⿳ (nth 1 enc-str) (nth 2 enc-str) new-str-c)
                  612)
            )
          )
@@ -1543,15 +1567,16 @@ COMPONENT can be a character or char-spec."
          (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 a-res (ids-find-chars-including-ids new-str))
          (list enc
                f-res
-               new-str
+               new-str-c
                a-res
-               (list ?⿲
-                     (nth 1 enc-str)
-                     (list (cons 'ideographic-structure new-str))
-                     (nth 3 enc-str))
+               (list ?⿲ (nth 1 enc-str) new-str-c (nth 3 enc-str))
                620)
          )
         ((eq (car enc-str) ?⿴)
@@ -1562,15 +1587,16 @@ COMPONENT can be a character or char-spec."
            (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 a-res (ids-find-chars-including-ids new-str))
            (list enc
                  f-res
-                 new-str
+                 new-str-c
                  a-res
-                 (list ?⿲
-                       (nth 1 enc2-str)
-                       (list (cons 'ideographic-structure new-str))
-                       (nth 2 enc2-str))
+                 (list ?⿲ (nth 1 enc2-str) new-str-c (nth 2 enc2-str))
                  630)
            )
          )))