+ (let (key)
+ (dolist (domain
+ (append
+ char-db-feature-domains
+ (let (dest domain)
+ (dolist (feature (char-attribute-list))
+ (setq feature (symbol-name feature))
+ (when (string-match
+ "\\(radical\\|strokes\\)@\\([^@*]+\\)\\(\\*\\|$\\)"
+ feature)
+ (setq domain (intern (match-string 2 feature)))
+ (unless (memq domain dest)
+ (setq dest (cons domain dest)))))
+ (sort dest #'string<))))
+ (setq key (intern (format "%s@%s" 'ideographic-radical domain)))
+ (when (and (memq key attributes)
+ (setq value (get-char-attribute char key)))
+ (setq radical value)
+ (insert (format "(%s . %S)\t; %c%s"
+ key
+ radical
+ (aref ideographic-radicals radical)
+ line-breaking))
+ (setq attributes (delq key attributes))
+ )
+ (setq key (intern (format "%s@%s" 'ideographic-strokes domain)))
+ (when (and (memq key attributes)
+ (setq value (get-char-attribute char key)))
+ (setq strokes value)
+ (insert (format "(%s . %S)%s"
+ key
+ strokes
+ line-breaking))
+ (setq attributes (delq key attributes))
+ )
+ (setq key (intern (format "%s@%s" 'total-strokes domain)))
+ (when (and (memq key attributes)
+ (setq value (get-char-attribute char key)))
+ (insert (format "(%s . %S)%s"
+ key
+ value
+ line-breaking))
+ (setq attributes (delq key attributes))
+ )
+ (dolist (feature '(ideographic-radical
+ ideographic-strokes
+ total-strokes))
+ (setq key (intern (format "%s@%s*sources" feature domain)))
+ (when (and (memq key attributes)
+ (setq value (get-char-attribute char key)))
+ (insert (format "(%s%s" key line-breaking))
+ (dolist (cell value)
+ (insert (format " %s" cell)))
+ (insert ")")
+ (insert line-breaking)
+ (setq attributes (delq key attributes))
+ ))
+ ))