update.
[chise/ids.git] / ids-read.el
index 646f3c3..19abb37 100644 (file)
 (require 'ids)
 
 ;;;###autoload
-(defun ids-read-buffer (buffer &optional simplify)
+(defun ids-read-buffer (buffer &optional simplify soft)
   (interactive "bBuffer = \nP")
   (save-excursion
     (set-buffer buffer)
     (goto-char (point-min))
-    (let (line chs ids char structure)
+    (let (line chs ids code char structure)
       (while (not (eobp))
        (unless (looking-at ";")
          (setq line
                 ((string-match "U[-+]\\([0-9A-F]+\\)" chs)
                  (decode-char 'ucs
                               (string-to-int (match-string 1 chs) 16)))
+                ((string-match "J90-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\)"
+                               chs)
+                 (decode-char 'japanese-jisx0208-1990
+                              (string-to-int (match-string 1 chs) 16)))
+                ((string-match "M-\\([0-9]+\\)'" chs)
+                 (setq code (string-to-int (match-string 1 chs)))
+                 (map-char-attribute
+                  (lambda (key val)
+                    (if (and (eq (car val) code)
+                             (eq (nth 1 val) 1)
+                             (null (nthcdr 2 val)))
+                        key))
+                  'morohashi-daikanwa))
+                ((string-match "M-\\([0-9]+\\)\"" chs)
+                 (setq code (string-to-int (match-string 1 chs)))
+                 (map-char-attribute
+                  (lambda (key val)
+                    (if (and (eq (car val) code)
+                             (eq (nth 1 val) 2)
+                             (null (nthcdr 2 val)))
+                        key))
+                  'morohashi-daikanwa))
                 ((string-match "M-\\([0-9]+\\)" chs)
                  (decode-char 'ideograph-daikanwa
                               (string-to-int (match-string 1 chs))))
-                ((string-match "CB-\\([0-9]+\\)" chs)
+                ((string-match "MH-\\([0-9]+\\)" chs)
+                 (setq code (string-to-int (match-string 1 chs)))
+                 (map-char-attribute
+                  (lambda (key val)
+                    (if (and (eq (car val) 'ho)
+                             (eq (nth 1 val) code)
+                             (null (nthcdr 2 val)))
+                        key))
+                  'morohashi-daikanwa))
+                ((string-match "CB\\([0-9]+\\)" chs)
                  (decode-char 'ideograph-cbeta
                               (string-to-int (match-string 1 chs))))
                 ))
          (when (and char
+                    (or (not soft)
+                        (null
+                         (get-char-attribute char 'ideographic-structure)))
                     (>= (length ids) 3)
                     (not (string-match "\\?" ids))
                     (consp (setq structure (ids-parse-string ids simplify))))
        ))))
 
 ;;;###autoload
-(defun ids-read-file (file &optional simplify)
+(defun ids-read-file (file &optional simplify soft)
   (interactive "fIDS file = \nP")
   (with-temp-buffer
     (insert-file-contents file)
-    (ids-read-buffer (current-buffer) simplify)))
+    (ids-read-buffer (current-buffer) simplify soft)))
 
 
 ;;; @ End.