X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=www%2Fwww-ids-find.el;h=1286bd5b2f72e361a4a89b33a45cca5744423c01;hb=754ed7b6d0e4479591ae7aa0d9bde2feb05b1b77;hp=68efbd6b0f379c5bc15e6e17cdf6bd0255aa388a;hpb=6e500584f86577d37d4a0f3eeefcad8fa4db297a;p=chise%2Fids.git
diff --git a/www/www-ids-find.el b/www/www-ids-find.el
index 68efbd6..1286bd5 100644
--- a/www/www-ids-find.el
+++ b/www/www-ids-find.el
@@ -15,17 +15,219 @@
(concat dest (substring string i))
coding-system))))
+(defconst www-ids-find-version "0.23.1")
+
+(defvar www-ids-find-ideographic-products-file-name
+ (expand-file-name "ideographic-products"
+ (expand-file-name
+ "feature"
+ (expand-file-name
+ "character"
+ chise-system-db-directory))))
+
+(defvar www-ids-find-chise-link-map-url-prefix
+ "http://kamichi.jp/chise_linkmap/map.cgi?code=")
+
(defvar www-ids-find-tang-chars-file-name
"~tomo/projects/chise/ids/www/tang-chars.udd")
+(defun www-ids-find-format-line (c is)
+ (let ((str (encode-coding-string (format "%c" c) 'utf-8-er))
+ plane code ucs)
+ (princ
+ (with-temp-buffer
+ (cond
+ ((string-match "&CB\\([0-9]+\\);" str)
+ (setq code (string-to-int (match-string 1 str)))
+ (insert "\n"
+ code (/ code 1000) code))
+ (insert (format "CB%05d" code))
+ )
+ ((string-match "&JC3-\\([0-9A-F]+\\);" str)
+ (setq code (string-to-int (match-string 1 str) 16))
+ (insert "
\n"
+ code code))
+ (insert (format "JC3-%04X" code))
+ )
+ ((string-match "&J\\(78\\|83\\|90\\|SP\\)-\\([0-9A-F]+\\);" str)
+ (setq plane (match-string 1 str)
+ code (string-to-int (match-string 2 str) 16))
+ (insert "
\n"
+ plane code plane
+ (- (lsh code -8) 32)
+ (- (logand code 255) 32)))
+ (insert (format "J%s-%04X" plane code))
+ )
+ ((string-match "&G\\([01]\\)-\\([0-9A-F]+\\);" str)
+ (setq plane (string-to-int (match-string 1 str))
+ code (string-to-int (match-string 2 str) 16))
+ (insert "
\n"
+ plane code plane
+ (- (lsh code -8) 32)
+ (- (logand code 255) 32)))
+ (insert (format "G%d-%04X" plane code))
+ )
+ ((string-match "&C\\([1-7]\\)-\\([0-9A-F]+\\);" str)
+ (setq plane (string-to-int (match-string 1 str))
+ code (string-to-int (match-string 2 str) 16))
+ (insert "
\n"
+ plane code plane code))
+ (insert (format "C%d-%04X" plane code))
+ )
+ ((string-match "&ZOB-\\([0-9]+\\);" str)
+ (setq code (string-to-int (match-string 1 str)))
+ (insert "
\n"
+ code code))
+ (insert (format "ZOB-%04d" code))
+ )
+ (t
+ (insert "")
+ (insert str)
+ (insert "")
+ ))
+ (goto-char (point-min))
+ (while (search-forward "&" nil t)
+ (replace-match "&" t 'literal))
+ (buffer-string)
+ ))
+ (princ
+ (or (if (setq ucs (or (char-ucs c)
+ (encode-char c 'ucs)))
+ (format
+ " %s"
+ ucs
+ (cond ((<= ucs #xFFFF)
+ (format "U+%04X" ucs))
+ ((<= ucs #x10FFFF)
+ (format "U-%08X" ucs))))
+ " ")))
+ (when ucs
+ (princ
+ (format " (link map)"
+ www-ids-find-chise-link-map-url-prefix ucs)))
+ (princ " ")
+ (when is
+ (princ
+ (with-temp-buffer
+ (insert
+ (encode-coding-string
+ (ideographic-structure-to-ids is)
+ 'utf-8-jp-er))
+ (goto-char (point-min))
+ (while (re-search-forward "&CB\\([0-9]+\\);" nil t)
+ (setq code (string-to-int (match-string 1)))
+ (replace-match
+ (format "
"
+ code (/ code 1000) code)
+ t 'literal))
+ (buffer-string))))
+ (when (and ucs
+ (with-current-buffer
+ (find-file-noselect
+ www-ids-find-tang-chars-file-name)
+ (goto-char (point-min))
+ (re-search-forward (format "^%d$" ucs) nil t)))
+ (princ
+ (format " "
+ (mapconcat
+ (lambda (c)
+ (format "%%%02X" (char-int c)))
+ (encode-coding-string (char-to-string c)
+ 'utf-8-jp)
+ "")))
+ (princ (encode-coding-string "⇒[唐代拓本]" 'utf-8-jp-er)))
+ (princ "
\n")))
+
+(defun www-ids-insert-chars-including-components (components
+ &optional ignored-chars)
+ (let ((products (copy-list (ideographic-products-find components)))
+ is as bs)
+ (dolist (c (cond
+ ((> (length products) 10000)
+ products)
+ ((> (length products) 4096)
+ (sort products
+ (lambda (a b)
+ (< (char-int a)(char-int b))))
+ )
+ ((> (length products) 512)
+ (sort products
+ (lambda (a b)
+ (if (setq as (char-total-strokes a))
+ (if (setq bs (char-total-strokes b))
+ (if (= as bs)
+ (< (char-int a)(char-int b))
+ (< as bs))
+ t)
+ (< (char-int a)(char-int b)))))
+ )
+ (t
+ (sort products
+ (lambda (a b)
+ (if (setq as (char-total-strokes a))
+ (if (setq bs (char-total-strokes b))
+ (if (= as bs)
+ (ideograph-char< a b)
+ (< as bs))
+ t)
+ (ideograph-char< a b))))
+ )))
+ (unless (memq c ignored-chars)
+ (setq is (char-feature c 'ideographic-structure))
+ (princ "
Version ") + (princ www-ids-find-version) + (princ (format-time-string + " (Last-modified: %Y-%m-%d %H:%M:%S)" + (nth 5 + (file-attributes + www-ids-find-ideographic-products-file-name)))) + (princ " +
+Copyright (C) 2005, 2006 MORIOKA Tomohiko +