X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fest.git;a=blobdiff_plain;f=cwiki-common.el;h=9817062192355028b9dd81e334078990e16bde89;hp=60a93a28b6d124776b8854aedd752312bb61592f;hb=df2fa617d25de8d6ccae25b062f2b973e2d95113;hpb=0b7104c6236c019112fa1b4a870589cb987df56a diff --git a/cwiki-common.el b/cwiki-common.el index 60a93a2..9817062 100644 --- a/cwiki-common.el +++ b/cwiki-common.el @@ -1,9 +1,13 @@ ;; -*- coding: utf-8-mcs-er -*- (require 'char-db-util) +;; (require 'concord-images) (setq file-name-coding-system 'utf-8-mcs-er) +(concord-assign-genre 'image-resource "/usr/local/var/photo/db") +(concord-assign-genre 'glyph-image "/usr/local/var/photo/db") + (concord-assign-genre 'creator@ruimoku "/usr/local/var/ruimoku/db") (concord-assign-genre 'person-name@ruimoku "/usr/local/var/ruimoku/db") @@ -20,21 +24,130 @@ (concord-assign-genre 'publisher@ruimoku "/usr/local/var/ruimoku/db") (concord-assign-genre 'publisher-name@ruimoku "/usr/local/var/ruimoku/db") -(mount-char-attribute-table 'instance@ruimoku/bibliography/title) -;; (mount-char-attribute-table 'instance@ruimoku/bibliography/content*note) +(mount-char-attribute-table '*instance@ruimoku/bibliography/title) +;; (mount-char-attribute-table '*instance@ruimoku/bibliography/content*note) + +(concord-assign-genre 'entry@zh-classical "/usr/local/var/kanbun/db") +;; (concord-assign-genre 'morpheme-entry@zh-classical "/usr/local/var/kanbun/db") +(concord-assign-genre 'word-class@zh-classical "/usr/local/var/kanbun/db") +(concord-assign-genre 'morpheme@zh-classical "/usr/local/var/kanbun/db") +(concord-assign-genre 'sentence@zh-classical "/usr/local/var/kanbun/db") +;; (concord-assign-genre 'sentence-entry@zh-classical "/usr/local/var/kanbun/db") + +(mount-char-attribute-table '*instance@morpheme-entry/zh-classical) + +(concord-assign-genre 'ud@zh-classical "/usr/local/var/kanbun/db") + + +(concord-assign-genre 'hng-card "/usr/local/var/hng-card/db") + +(mount-char-attribute-table '->HNG) +(mount-char-attribute-table '<-HNG) +(mount-char-attribute-table '->HNG@CN/manuscript) +(mount-char-attribute-table '<-HNG@CN/manuscript) +(mount-char-attribute-table '->HNG@CN/printed) +(mount-char-attribute-table '<-HNG@CN/printed) +(mount-char-attribute-table '->HNG@JP/manuscript) +(mount-char-attribute-table '<-HNG@JP/manuscript) +(mount-char-attribute-table '->HNG@JP/printed) +(mount-char-attribute-table '<-HNG@JP/printed) +(mount-char-attribute-table '->HNG@KR) +(mount-char-attribute-table '<-HNG@KR) +(mount-char-attribute-table '->HNG@MISC) +(mount-char-attribute-table '<-HNG@MISC) +(defvar est-hide-cgi-mode nil) +(defvar est-view-url-prefix "..") (defvar chise-wiki-view-url "view.cgi") (defvar chise-wiki-edit-url "edit.cgi") (defvar chise-wiki-bitmap-glyphs-url "http://www.chise.org/glyphs") +(defvar chise-wiki-hng-bitmap-glyphs-url + "http://hng.chise.org/glyphs/HNG") + (defvar chise-wiki-glyph-cgi-url "http://www.chise.org/chisewiki/glyph.cgi") (defvar chise-wiki-displayed-features nil) +(defvar est-coded-charset-priority-list + '(; =ucs + =cns11643-1 =cns11643-2 =cns11643-3 + =cns11643-4 =cns11643-5 =cns11643-6 =cns11643-7 + =gb2312 =gb12345 + =jis-x0208 =jis-x0208@1990 + =jis-x0213-2 + =jis-x0212 + =adobe-japan1 + =cbeta =jef-china3 + =jis-x0213-1@2000 =jis-x0213-1@2004 + =jis-x0208@1983 =jis-x0208@1978 + =zinbun-oracle =>zinbun-oracle + =daikanwa + =gt =gt-k + =>>>adobe-japan1 + =>>>jis-x0208 =>>>jis-x0213-1 =>>>jis-x0213-2 + =>>jis-x0208 =>>jis-x0213-1 =>>jis-x0213-2 + =>>adobe-japan1 + =+>jis-x0208 =+>jis-x0213-1 =+>jis-x0213-2 + =+>jis-x0208@1978 + =+>adobe-japan1 + =>jis-x0208 =>jis-x0213-1 + =>>gt + =>ucs@iso =>ucs@unicode + =>ucs@jis =>ucs@cns =>ucs@ks + =+>ucs@iso =+>ucs@unicode + =>>ucs@iso =>>ucs@unicode + =>>ucs@jis =>>ucs@cns =>>ucs@ks + =>>>ucs@iso =>>>ucs@unicode + =>>>ucs@jis =>>>ucs@cns =>>>ucs@ks + ===ucs@iso + =ruimoku-v6 + =big5 + =big5-cdp + =>cbeta + =mj + ==mj + ===mj + =ucs-itaiji-001 + =ucs-itaiji-002 + =ucs-itaiji-003 + =ucs-itaiji-004 + =ucs-itaiji-005 + =ucs-itaiji-006 + =ucs-itaiji-007 + =ucs-itaiji-008 + =ucs-itaiji-009 + =ucs-itaiji-010 + =ucs-itaiji-011 + =ucs-itaiji-084 + =ucs-var-001 + =ucs-var-002 + =ucs-var-003 + =ucs-var-004 + =ucs@unicode + ==ucs@unicode + ===ucs@unicode + ==>ucs@bucs + ===daikanwa/+p + ===gt + =>ucs@iwds-1 + =>ucs@component + =>ucs-itaiji-001 + =>ucs-itaiji-002 + =>ucs-itaiji-003 + =>ucs-itaiji-004 + =>ucs-itaiji-005 + =>ucs-itaiji-006 + =>ucs-itaiji-007 + ===adobe-japan1 + ===cns11643-1 ===cns11643-2 ===cns11643-3 + ===cns11643-4 ===cns11643-5 ===cns11643-6 ===cns11643-7 + )) + (defun decode-uri-string (string &optional coding-system) (if (> (length string) 0) (let ((i 0) @@ -73,7 +186,8 @@ )))) (defun www-feature-format (feature-name) - (or (char-feature-property feature-name 'format) + (or (char-feature-property feature-name 'presentation-format) + (char-feature-property feature-name 'format) (let (fn parent ret) (setq fn feature-name) (while (and (setq parent (char-feature-name-parent fn)) @@ -85,13 +199,16 @@ '((name) " : " (value)))) (defun www-feature-value-format (feature-name) - (or (char-feature-property feature-name 'value-format) + (or (char-feature-property feature-name 'value-presentation-format) + (char-feature-property feature-name 'value-format) (let (fn parent ret) (setq fn feature-name) (while (and (setq parent (char-feature-name-parent fn)) (null (setq ret - (char-feature-property - parent 'value-format)))) + (or (char-feature-property + parent 'value-presentation-format) + (char-feature-property + parent 'value-format))))) (setq fn parent)) ret) (let ((type (www-feature-type feature-name))) @@ -289,46 +406,105 @@ ;;; @ URI representation ;;; +(defun est-uri-decode-feature-name-body (uri-feature) + (let ((len (length uri-feature)) + (i 0) + ch dest) + (while (< i len) + (setq dest + (concat + dest + (if (eq (aref uri-feature i) ?\.) + (if (and (< (+ i 2) len) + (eq (aref uri-feature (+ i 2)) ?\.)) + (prog1 + (cond + ((eq (setq ch (aref uri-feature (1+ i))) ?\.) + "/") + ((eq ch ?-) + "*") + (t + (substring uri-feature i (+ i 3)) + )) + (setq i (+ i 3))) + (setq i (1+ i)) + ".") + (prog1 + (char-to-string (aref uri-feature i)) + (setq i (1+ i))))))) + dest)) + +(defun est-uri-encode-feature-name-body (feature) + (mapconcat (lambda (c) + (cond ((eq c ?*) + ".-.") + ((eq c ?/) + "...") + (t (char-to-string c)))) + feature "")) + (defun www-uri-decode-feature-name (uri-feature) (let (feature) (setq uri-feature (decode-uri-string uri-feature 'utf-8-mcs-er)) (cond ((string-match "^from\\." uri-feature) - (intern (format "<-%s" (substring uri-feature (match-end 0)))) + (intern (format "<-%s" + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) ) ((string-match "^to\\." uri-feature) - (intern (format "->%s" (substring uri-feature (match-end 0)))) + (intern (format "->%s" + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) ) ((string-match "^rep\\." uri-feature) - (intern (format "=%s" (substring uri-feature (match-end 0)))) + (intern (format "=%s" + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) + ) + ((string-match "^rep[2i]\\." uri-feature) + (intern (format "===%s" + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) ) ((string-match "^g\\." uri-feature) - (intern (format "=>>%s" (substring uri-feature (match-end 0)))) + (intern (format "=>>%s" + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) ) - ((string-match "^gi\\." uri-feature) - (intern (format "=>>>%s" (substring uri-feature (match-end 0)))) + ((string-match "^g[i2]\\." uri-feature) + (intern (format "==%s" + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) ) ((string-match "^gi\\([0-9]+\\)\\." uri-feature) (intern (format "=>>%s%s" (make-string (string-to-int (match-string 1 uri-feature)) ?>) - (substring uri-feature (match-end 0)))) + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) ) ((string-match "^o\\." uri-feature) - (intern (format "=+>%s" (substring uri-feature (match-end 0)))) + (intern (format "=+>%s" + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) ) ((string-match "^a\\." uri-feature) - (intern (format "=>%s" (substring uri-feature (match-end 0)))) + (intern (format "=>%s" + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) ) ((string-match "^a\\([0-9]+\\)\\." uri-feature) (intern (format "%s>%s" (make-string (string-to-int (match-string 1 uri-feature)) ?=) - (substring uri-feature (match-end 0)))) + (est-uri-decode-feature-name-body + (substring uri-feature (match-end 0))))) ) - ((and (setq feature (intern (format "=>%s" uri-feature))) + ((and (setq uri-feature (est-uri-decode-feature-name-body uri-feature)) + (setq feature (intern (format "=>%s" uri-feature))) (find-charset feature)) feature) ((and (setq feature (intern (format "=>>%s" uri-feature))) @@ -346,56 +522,90 @@ (setq feature-name (symbol-name feature-name)) (cond ((string-match "^=\\+>\\([^=>]+\\)" feature-name) - (concat "o." (substring feature-name (match-beginning 1))) + (concat "o." + (est-uri-encode-feature-name-body + (substring feature-name (match-beginning 1)))) ) ((string-match "^=\\([^=>]+\\)" feature-name) - (concat "rep." (substring feature-name (match-beginning 1))) + (concat "rep." + (est-uri-encode-feature-name-body + (substring feature-name (match-beginning 1)))) + ) + ((string-match "^==\\([^=>]+\\)" feature-name) + (concat "g2." + (est-uri-encode-feature-name-body + (substring feature-name (match-beginning 1)))) + ) + ((string-match "^===\\([^=>]+\\)" feature-name) + (concat "repi." + (est-uri-encode-feature-name-body + (substring feature-name (match-beginning 1)))) ) ((string-match "^=>>\\([^=>]+\\)" feature-name) - (concat "g." (substring feature-name (match-beginning 1))) + (concat "g." + (est-uri-encode-feature-name-body + (substring feature-name (match-beginning 1)))) ) ((string-match "^=>>>\\([^=>]+\\)" feature-name) - (concat "gi." (substring feature-name (match-beginning 1))) + (concat "gi." + (est-uri-encode-feature-name-body + (substring feature-name (match-beginning 1)))) ) ((string-match "^=>>\\(>+\\)" feature-name) (format "gi%d.%s" (length (match-string 1 feature-name)) - (substring feature-name (match-end 1))) + (est-uri-encode-feature-name-body + (substring feature-name (match-end 1)))) ) ((string-match "^=>\\([^=>]+\\)" feature-name) - (concat "a." (substring feature-name (match-beginning 1))) + (concat "a." + (est-uri-encode-feature-name-body + (substring feature-name (match-beginning 1)))) ) ((string-match "^\\(=+\\)>" feature-name) (format "a%d.%s" (length (match-string 1 feature-name)) - (substring feature-name (match-end 0))) + (est-uri-encode-feature-name-body + (substring feature-name (match-end 0)))) ) ((string-match "^->" feature-name) - (concat "to." (substring feature-name (match-end 0))) + (concat "to." + (est-uri-encode-feature-name-body + (substring feature-name (match-end 0)))) ) ((string-match "^<-" feature-name) - (concat "from." (substring feature-name (match-end 0))) + (concat "from." + (est-uri-encode-feature-name-body + (substring feature-name (match-end 0)))) ) - (t feature-name))) + (t (est-uri-encode-feature-name-body feature-name)))) (defun www-uri-make-feature-name-url (uri-genre uri-feature-name uri-object) - (format "%s?feature=%s&%s=%s" - chise-wiki-view-url uri-feature-name uri-genre uri-object)) + (if est-hide-cgi-mode + (format "../feature/%s&%s/%s" + uri-feature-name uri-genre uri-object) + (format "%s?feature=%s&%s=%s" + chise-wiki-view-url uri-feature-name uri-genre uri-object))) (defun www-uri-decode-object (genre char-rep) (let (ccs cpos) (cond - ((string-match "\\(%3A\\|:\\)" char-rep) + ((string-match (if est-hide-cgi-mode + "\\(%3D\\|=\\|%3A\\|:\\)" + "\\(%3A\\|:\\)") char-rep) (setq ccs (substring char-rep 0 (match-beginning 0)) cpos (substring char-rep (match-end 0))) (setq ccs (www-uri-decode-feature-name ccs)) + (setq cpos (est-uri-decode-feature-name-body cpos)) (cond ((string-match "^0x" cpos) (setq cpos (string-to-number (substring cpos (match-end 0)) 16)) ) (t - (setq cpos (car (read-from-string cpos))) + (setq cpos (car (read-from-string + (decode-uri-string + cpos file-name-coding-system)))) )) (if (and (eq genre 'character) (numberp cpos)) @@ -426,45 +636,35 @@ (format "%%%02X" byte)) (encode-coding-string (char-to-string object) 'utf-8-mcs-er) "") - (let ((ccs-list '(; =ucs - =cns11643-1 =cns11643-2 =cns11643-3 - =cns11643-4 =cns11643-5 =cns11643-6 =cns11643-7 - =gb2312 =gb12345 - =jis-x0208 =jis-x0208@1990 - =jis-x0212 - =cbeta =jef-china3 - =jis-x0213-1@2000 =jis-x0213-1@2004 - =jis-x0208@1983 =jis-x0208@1978 - =zinbun-oracle =>zinbun-oracle - =daikanwa - =gt =gt-k - =>>jis-x0208 =>>jis-x0213-1 - =+>jis-x0208@1978 - =>jis-x0208 =>jis-x0213-1 - =>>gt - =>ucs@iso =>ucs@unicode - =>ucs@jis =>ucs@cns =>ucs@ks - =ruimoku-v6 - =big5 - =big5-cdp)) + (let ((ccs-list est-coded-charset-priority-list) ccs ret) (while (and ccs-list (setq ccs (pop ccs-list)) (not (setq ret (encode-char object ccs 'defined-only))))) (cond (ret - (format "%s:0x%X" + (format (if est-hide-cgi-mode + "%s=0x%X" + "%s:0x%X") (www-uri-encode-feature-name ccs) ret)) ((and (setq ccs (car (split-char object))) (setq ret (encode-char object ccs))) - (format "%s:0x%X" + (format (if est-hide-cgi-mode + "%s=0x%X" + "%s:0x%X") (www-uri-encode-feature-name ccs) ret)) (t - (format "system-char-id:0x%X" + (format (if est-hide-cgi-mode + "system-char-id=0x%X" + "system-char-id:0x%X") (encode-char object 'system-char-id)) )))) - (format "rep.id:%s" (concord-object-id object)))) + (format (if est-hide-cgi-mode + "rep.id=%s" + "rep.id:%s") + (est-uri-encode-feature-name-body + (format "%s" (concord-object-id object)))))) (defun est-format-object (object &optional readable) (if (characterp object) @@ -477,11 +677,17 @@ (format "%s" ret)))) (defun www-uri-make-object-url (object &optional uri-object) - (format "%s?%s=%s" - chise-wiki-view-url - (est-object-genre object) - (or uri-object - (www-uri-encode-object object)))) + (if est-hide-cgi-mode + (format "%s/%s/%s" + est-view-url-prefix + (est-object-genre object) + (or uri-object + (www-uri-encode-object object))) + (format "%s?%s=%s" + chise-wiki-view-url + (est-object-genre object) + (or uri-object + (www-uri-encode-object object))))) ;;; @ Feature name presentation @@ -585,7 +791,7 @@ (defun www-format-encode-string (string &optional without-tags as-body) (with-temp-buffer (insert string) - (let (plane code start end char variants ret rret) + (let (plane code subcode start end char variants ret rret) (when as-body (goto-char (point-min)) (while (search-forward "&" nil t) @@ -601,6 +807,41 @@ (let ((coded-charset-entity-reference-alist (list* '(=gt "GT-" 5 d) + '(=mj "MJ" 6 d) + '(=hanyo-denshi/ja "HD-JA-" 4 X) + '(=hanyo-denshi/jb "HD-JB-" 4 X) + '(=hanyo-denshi/jc "HD-JC-" 4 X) + '(=hanyo-denshi/jd "HD-JD-" 4 X) + '(=hanyo-denshi/ft "HD-FT-" 4 X) + '(=hanyo-denshi/ia "HD-IA-" 4 X) + '(=hanyo-denshi/ib "HD-IB-" 4 X) + '(=hanyo-denshi/hg "HD-HG-" 4 X) + '(=hanyo-denshi/ip "HD-IP-" 4 X) + '(=hanyo-denshi/jt "HD-JT-" 4 X) + '(=hanyo-denshi/ks "HD-KS-" 6 d) + '(=>>hanyo-denshi/ja "G-HD-JA-" 4 X) + '(=>>hanyo-denshi/jb "G-HD-JB-" 4 X) + '(=>>hanyo-denshi/jc "G-HD-JC-" 4 X) + '(=>>hanyo-denshi/jd "G-HD-JD-" 4 X) + '(=>>hanyo-denshi/ft "G-HD-FT-" 4 X) + '(=>>hanyo-denshi/ia "G-HD-IA-" 4 X) + '(=>>hanyo-denshi/ib "G-HD-IB-" 4 X) + '(=>>hanyo-denshi/hg "G-HD-HG-" 4 X) + '(=>>hanyo-denshi/ip "G-HD-IP-" 4 X) + '(=>>hanyo-denshi/jt "G-HD-JT-" 4 X) + '(=>>hanyo-denshi/ks "G-HD-KS-" 6 d) + '(==mj "g2-MJ" 6 d) + '(==hanyo-denshi/ja "g2-HD-JA-" 4 X) + '(==hanyo-denshi/jb "g2-HD-JB-" 4 X) + '(==hanyo-denshi/jc "g2-HD-JC-" 4 X) + '(==hanyo-denshi/jd "g2-HD-JD-" 4 X) + '(==hanyo-denshi/ft "g2-HD-FT-" 4 X) + '(==hanyo-denshi/ia "g2-HD-IA-" 4 X) + '(==hanyo-denshi/ib "g2-HD-IB-" 4 X) + '(==hanyo-denshi/hg "g2-HD-HG-" 4 X) + '(==hanyo-denshi/ip "g2-HD-IP-" 4 X) + '(==hanyo-denshi/jt "g2-HD-JT-" 4 X) + '(==hanyo-denshi/ks "g2-HD-KS-" 6 d) '(=cns11643-1 "C1-" 4 X) '(=cns11643-2 "C2-" 4 X) '(=cns11643-3 "C3-" 4 X) @@ -608,6 +849,9 @@ '(=cns11643-5 "C5-" 4 X) '(=cns11643-6 "C6-" 4 X) '(=cns11643-7 "C7-" 4 X) + '(=adobe-japan1-6 "AJ1-" 5 d) + '(=big5-cdp "CDP-" 4 X) + '(=>big5-cdp "A-CDP-" 4 X) '(=gb2312 "G0-" 4 X) '(=gb12345 "G1-" 4 X) '(=jis-x0208@1990 "J90-" 4 X) @@ -619,13 +863,36 @@ '(=ruimoku-v6 "RUI6-" 4 X) '(=zinbun-oracle "ZOB-" 4 d) '(=jef-china3 "JC3-" 4 X) - '(=daikanwa "M-" 5 d) + '(=ucs@unicode "UU+" 4 X) + '(=ucs@JP/hanazono "hanaJU+" 4 X) + '(==cns11643-1 "R-C1-" 4 X) + '(==cns11643-2 "R-C2-" 4 X) + '(==cns11643-3 "R-C3-" 4 X) + '(==cns11643-4 "R-C4-" 4 X) + '(==cns11643-5 "R-C5-" 4 X) + '(==cns11643-6 "R-C6-" 4 X) + '(==cns11643-7 "R-C7-" 4 X) + '(=hanziku-1 "HZK01-" 4 X) + '(=hanziku-2 "HZK02-" 4 X) + '(=hanziku-3 "HZK03-" 4 X) + '(=hanziku-4 "HZK04-" 4 X) + '(=hanziku-5 "HZK05-" 4 X) + '(=hanziku-6 "HZK06-" 4 X) + '(=hanziku-7 "HZK07-" 4 X) + '(=hanziku-8 "HZK08-" 4 X) + '(=hanziku-9 "HZK09-" 4 X) + '(=hanziku-10 "HZK10-" 4 X) + '(=hanziku-11 "HZK11-" 4 X) + '(=hanziku-12 "HZK12-" 4 X) + '(==cbeta "CB" 5 d) + '(=big5 "B-" 4 X) + '(=daikanwa "M-" 5 d) coded-charset-entity-reference-alist))) (encode-coding-region (point-min)(point-max) 'utf-8-mcs-er) (goto-char (point-min)) - (while (re-search-forward "&CB\\([0-9]+\\);" nil t) - (setq code (string-to-int (match-string 1))) + (while (re-search-forward "&\\(A-\\|G-\\|g2-\\|R-\\)?CB\\([0-9]+\\);" nil t) + (setq code (string-to-int (match-string 2))) (replace-match (format "\"CB%05d\"" @@ -636,7 +903,7 @@ style=\"%s\">" t 'literal)) (goto-char (point-min)) - (while (re-search-forward "&\\(o-\\)?J\\(78\\|83\\|90\\|97\\|SP\\)-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) + (while (re-search-forward "&\\(o-\\|G-\\|g2-\\|R-\\)?J\\(78\\|83\\|90\\|97\\|SP\\)-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) (setq plane (match-string 2) code (string-to-int (match-string 3) 16)) (replace-match @@ -651,6 +918,59 @@ style=\"%s\">" t 'literal)) (goto-char (point-min)) + (while (re-search-forward "&\\(o-\\|G-\\|g2-\\|R-\\)?J0-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) + (setq code (string-to-int (match-string 2) 16)) + (replace-match + (format "\"J0-%04X\"" + code + chise-wiki-bitmap-glyphs-url + (- (lsh code -8) 32) + (- (logand code 255) 32) + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(o-\\|G-\\|g2-\\|R-\\)?HD-\\(JA\\|JB\\|JC\\|JD\\|FT\\|IA\\|IB\\|HG\\)-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) + (setq plane (match-string 2) + code (string-to-int (match-string 3) 16)) + (replace-match + (format "\"HD-%s-%04X\"" + plane code + chise-wiki-bitmap-glyphs-url + plane + (- (lsh code -8) 32) + (- (logand code 255) 32) + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(o-\\|G-\\|g2-\\|R-\\)?HD-\\(IP\\|JT\\)-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) + (setq plane (match-string 2) + code (string-to-int (match-string 3) 16)) + (replace-match + (format "\"HD-%s-%04X\"" + plane code + chise-wiki-bitmap-glyphs-url + plane code + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(o-\\|G-\\|g2-\\|R-\\)?HD-KS-\\([0-9]+\\);" nil t) + (setq code (string-to-int (match-string 2))) + (replace-match + (format "\"HD-KS%06d\"" + code + chise-wiki-bitmap-glyphs-url + code + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) (while (re-search-forward "&G\\([01]\\)-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) (setq plane (string-to-int (match-string 1)) code (string-to-int (match-string 2) 16)) @@ -666,9 +986,9 @@ style=\"%s\">" t 'literal)) (goto-char (point-min)) - (while (re-search-forward "&C\\([1-7]\\)-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) - (setq plane (string-to-int (match-string 1)) - code (string-to-int (match-string 2) 16)) + (while (re-search-forward "&\\(R-\\)?C\\([1-7]\\)-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) + (setq plane (string-to-int (match-string 2)) + code (string-to-int (match-string 3) 16)) (replace-match (format "\"CNS%d-%04X\"" @@ -679,8 +999,8 @@ style=\"%s\">" t 'literal)) (goto-char (point-min)) - (while (re-search-forward "&JC3-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) - (setq code (string-to-int (match-string 1) 16)) + (while (re-search-forward "&\\(R-\\)?JC3-\\([0-9A-F][0-9A-F][0-9A-F][0-9A-F]\\);" nil t) + (setq code (string-to-int (match-string 2) 16)) (replace-match (format "\"JC3-%04X\"" code code) @@ -699,7 +1019,134 @@ style=\"vertical-align:middle\">" t 'literal)) (goto-char (point-min)) - (while (re-search-forward "&\\(G-\\|g2-\\)?GT-\\([0-9]+\\);" nil t) + (while (re-search-forward "&HNG\\([0-9]+\\)-\\([0-9][0-9][0-9][0-9]\\)\\([0-9]\\);" nil t) + (setq plane (match-string 1) + code (string-to-int (match-string 2)) + subcode (string-to-int (match-string 3))) + (setq subcode + (if (eq subcode 0) + "" + (char-to-string (decode-char 'ascii (+ 96 subcode))))) + (replace-match + (format + "
\"HNG%s-%04d%s\"%s
" + plane code subcode + chise-wiki-hng-bitmap-glyphs-url + plane code subcode + (charset-description + (car (find (format "HNG%s-" plane) + coded-charset-entity-reference-alist + :test (lambda (key cell) + (string= key (nth 1 cell)))))) + ) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(o-\\|G-\\|g2-\\|R-\\)?AJ1-\\([0-9]+\\);" nil t) + (setq code (string-to-int (match-string 2))) + (replace-match + (format "\"AJ1-%05d\"" + code + chise-wiki-bitmap-glyphs-url + code + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(A-\\|o-\\|G-\\|g2-\\|R-\\)?MJ\\([0-9]+\\);" nil t) + (setq code (string-to-int (match-string 2))) + (replace-match + (format "\"MJ%06d\"" + code + code + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(o-\\|G-\\|g2-\\)?IU[+-]\\([0-9A-F]+\\);" nil t) + (setq code (string-to-int (match-string 2) 16)) + (replace-match + (format "\"u%04x\"" + code + code + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&A-\\(comp\\|cgn\\)U[+-]\\([0-9A-F]+\\);" nil t) + (setq code (string-to-int (match-string 2) 16)) + (replace-match + (format "\"u%04x\"" + code + code + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward + "&\\(A-\\|g2-\\)?U-i\\([0-9]+\\)\\+\\([0-9A-F]+\\);" + nil t) + (setq plane (string-to-int (match-string 2)) + code (string-to-int (match-string 3) 16)) + (replace-match + (format "\"u%04x-itaiji-%03d\"" + code + plane + code + plane + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&A-IWDSU\\+\\([0-9A-F]+\\);" nil t) + (setq code (string-to-int (match-string 1) 16)) + (replace-match + (format "\"A-IWDSU+%04x\"" + code + code + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward + "&\\(A-\\)?CDP-i\\([0-9]+\\)-\\([0-9A-F]+\\);" + nil t) + (setq plane (string-to-int (match-string 2)) + code (string-to-int (match-string 3) 16)) + (replace-match + (format "\"cdp-%04x-itaiji-%03d\"" + code + plane + code + plane + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(g2-\\)?U-v\\([0-9]+\\)\\+\\([0-9A-F]+\\);" nil t) + (setq plane (string-to-int (match-string 2)) + code (string-to-int (match-string 3) 16)) + (replace-match + (format "\"u%04x-var-%03d\"" + code + plane + code + plane + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(A-\\|G-\\|R-\\|g2-\\)?GT-\\([0-9]+\\);" nil t) (setq code (string-to-int (match-string 2))) (replace-match (format "\"GT-%05d\"" t 'literal)) (goto-char (point-min)) - (while (re-search-forward "&\\(G-\\)?GT-K\\([0-9]+\\);" nil t) + (while (re-search-forward "&\\(A-\\|G-\\|g2-\\)?GT-K\\([0-9]+\\);" nil t) (setq code (string-to-int (match-string 2))) (replace-match (format "\"GT-K%05d\"" t 'literal)) (goto-char (point-min)) - (while (re-search-forward "&CDP-\\([0-9A-F]+\\);" nil t) - (setq code (string-to-int (match-string 1) 16)) + (while (re-search-forward + "&\\(A-\\|G-\\|g2-\\|R-\\)?CDP-\\([0-9A-F]+\\);" nil t) + (setq code (string-to-int (match-string 2) 16)) (replace-match (format "\"CDP-%04X\"" @@ -747,8 +1195,24 @@ style=\"%s\">" t 'literal)) (goto-char (point-min)) - (while (re-search-forward "&RUI6-\\([0-9A-F]+\\);" nil t) - (setq code (string-to-int (match-string 1) 16)) + (while (re-search-forward + "&\\(I-\\)?HZK\\(0[1-9]\\|1[0-2]\\)-\\([0-9A-F]+\\);" nil t) + (setq plane (match-string 2) + code (string-to-int (match-string 3) 16)) + (replace-match + (format "\"HZK%s-%04X\"" + plane + code + chise-wiki-glyph-cgi-url + plane + code + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(A-\\|G-\\|g2-\\|R-\\)?RUI6-\\([0-9A-F]+\\);" nil t) + (setq code (string-to-int (match-string 2) 16)) (replace-match (format "\"RUI6-%04X\"" @@ -759,7 +1223,19 @@ style=\"vertical-align:middle\">" t 'literal)) (goto-char (point-min)) - (while (re-search-forward "&\\(A-\\)?\\(UU\\+\\|U-\\)\\([0-9A-F]+\\);" nil t) + (while (re-search-forward "&hanaJU\\+\\([0-9A-F]+\\);" nil t) + (setq code (string-to-int (match-string 1) 16)) + (replace-match + (format "\"hanaJU+%04X\"" + code + chise-wiki-glyph-cgi-url + code + www-format-char-img-style) + t 'literal)) + + (goto-char (point-min)) + (while (re-search-forward "&\\(A-\\|G-\\|g2-\\|R-\\)?\\(UU\\+\\|U-\\)\\([0-9A-F]+\\);" nil t) (setq code (string-to-int (match-string 3) 16)) (replace-match (format "\"UU+%04X\"" (or (www-get-feature-value char '->subsumptive) (www-get-feature-value char '->denotational))) (progn - (while (and variants + (if (characterp variants) + (setq variants (list variants))) + (while (and variants (setq ret (www-format-encode-string (char-to-string (car variants)))) (string-match "&MCS-\\([0-9A-F]+\\);" ret)) @@ -849,27 +1327,105 @@ style=\"vertical-align:middle\">" ;;; (defvar coded-charset-GlyphWiki-id-alist - '((=ucs "u" 4 x nil) - (=ucs@JP "u" 4 x nil) + '((===adobe-japan1-0 "aj1-" 5 d nil) + (===adobe-japan1-1 "aj1-" 5 d nil) + (===adobe-japan1-2 "aj1-" 5 d nil) + (===adobe-japan1-3 "aj1-" 5 d nil) + (===adobe-japan1-4 "aj1-" 5 d nil) + (===adobe-japan1-5 "aj1-" 5 d nil) + (===adobe-japan1-6 "aj1-" 5 d nil) + (===ucs@jis "u" 4 x nil) + (===daikanwa "dkw-" 5 d nil) + (===ucs@ks "u" 4 x "-k") + (==ucs-itaiji-005 "u" 4 x "-itaiji-005") + (=ucs-var-001 "u" 4 x "-var-001") + (=ucs-var-002 "u" 4 x "-var-002") + (=ucs-var-003 "u" 4 x "-var-003") + (=ucs-var-004 "u" 4 x "-var-004") + (=ucs-itaiji-001 "u" 4 x "-itaiji-001") + (=ucs-itaiji-002 "u" 4 x "-itaiji-002") + (=ucs-itaiji-003 "u" 4 x "-itaiji-003") + (=ucs-itaiji-084 "u" 4 x "-itaiji-084") + (=>ucs-itaiji-001 "u" 4 x "-itaiji-001") + (=>ucs-itaiji-006 "u" 4 x "-itaiji-006") + (==adobe-japan1-0 "aj1-" 5 d nil) + (==adobe-japan1-1 "aj1-" 5 d nil) + (==adobe-japan1-2 "aj1-" 5 d nil) + (==adobe-japan1-3 "aj1-" 5 d nil) + (==adobe-japan1-4 "aj1-" 5 d nil) + (==adobe-japan1-5 "aj1-" 5 d nil) + (==adobe-japan1-6 "aj1-" 5 d nil) + (==ucs@jis "u" 4 x nil) + (==ucs@iso "u" 4 x nil) + (==ucs@cns "u" 4 x "-t") + (==ucs@unicode "u" 4 x "-us") + (==daikanwa "dkw-" 5 d nil) + (==ucs@ks "u" 4 x "-k") + (==jis-x0208@1978 "j78-" 4 x nil) + (==jis-x0208 "j90-" 4 x nil) + (==jis-x0208@1990 "j90-" 4 x nil) + (==jis-x0208@1983 "j83-" 4 x nil) + (==cbeta "cbeta-" 5 d nil) + (=>>hanyo-denshi/ks "koseki-" 6 d nil) + (=>>jis-x0208@1978 "j78-" 4 x nil) + (=>>big5-cdp "cdp-" 4 x nil) + (=>>adobe-japan1-0 "aj1-" 5 d nil) + (=>>adobe-japan1-1 "aj1-" 5 d nil) + (=>>adobe-japan1-2 "aj1-" 5 d nil) + (=>>adobe-japan1-3 "aj1-" 5 d nil) + (=>>adobe-japan1-4 "aj1-" 5 d nil) + (=>>adobe-japan1-5 "aj1-" 5 d nil) + (=>>adobe-japan1-6 "aj1-" 5 d nil) + (=>>jis-x0208 "j90-" 4 x nil) + (=>>jis-x0208@1990 "j90-" 4 x nil) + (=>>jis-x0208@1983 "j83-" 4 x nil) + (=>>daikanwa "dkw-" 5 d nil) + (=adobe-japan1-0 "aj1-" 5 d nil) + (=adobe-japan1-1 "aj1-" 5 d nil) + (=adobe-japan1-2 "aj1-" 5 d nil) + (=adobe-japan1-3 "aj1-" 5 d nil) + (=adobe-japan1-4 "aj1-" 5 d nil) + (=adobe-japan1-5 "aj1-" 5 d nil) + (=adobe-japan1-6 "aj1-" 5 d nil) + (=decomposition@cid) + (=decomposition@hanyo-denshi) + (=hanyo-denshi/ks "koseki-" 6 d nil) + (=koseki "koseki-" 6 d nil) (=ucs@jis "u" 4 x nil) - (=ucs@gb "u" 4 x "-g") (=ucs@cns "u" 4 x "-t") (=ucs@ks "u" 4 x "-k") + (=ucs@JP "u" 4 x nil) + (=ucs@gb "u" 4 x "-g") (=ucs@iso "u" 4 x "-u") (=ucs@unicode "u" 4 x "-us") - (=adobe-japan1-6 "aj1-" 5 d nil) - (=gt "gt-" 5 d nil) (=big5-cdp "cdp-" 4 x nil) - (=cbeta "cb" 5 d nil) - (=jis-x0208@1978/1pr "j78-" 4 x nil) - (=jis-x0208@1978/-4pr "j78-" 4 x nil) - (=jis-x0208@1978 "j78-" 4 x nil) - (=jis-x0208@1983 "j83-" 4 x nil) - (=jis-x0208@1990 "j90-" 4 x nil) + (=>big5-cdp "cdp-" 4 x nil) + (=cbeta "cbeta-" 5 d nil) + (=big5-cdp-var-3 "cdp-" 4 x "-var-3") + (=big5-cdp-var-5 "cdp-" 4 x "-var-5") + (=big5-cdp-itaiji-001 "cdp-" 4 x "-itaiji-001") + (=big5-cdp-itaiji-002 "cdp-" 4 x "-itaiji-002") + (=>big5-cdp-itaiji-001 "cdp-" 4 x "-itaiji-001") + (=jef-china3 "jc3-" 4 x nil) (=jis-x0212 "jsp-" 4 x nil) (=jis-x0213-1@2000 "jx1-2000-" 4 x nil) (=jis-x0213-1@2004 "jx1-2004-" 4 x nil) (=jis-x0213-2 "jx2-" 4 x nil) + (=gt-k "gt-k" 5 d nil) + (=jis-x0208@1978/1pr "j78-" 4 x nil) + (=jis-x0208@1978/-4pr "j78-" 4 x nil) + (=jis-x0208@1978 "j78-" 4 x nil) + (=+>jis-x0208@1978 "j78-" 4 x nil) + (=+>jis-x0208 "j90-" 4 x nil) + (=+>jis-x0208@1990 "j90-" 4 x nil) + (=+>jis-x0208@1983 "j83-" 4 x nil) + (=ucs "u" 4 x nil) + (=big5 "b-" 4 x nil) + (=daikanwa "dkw-" 5 d nil) + (=gt "gt-" 5 d nil) + (=ruimoku-v6 "rui6-" 4 x nil) + (=>ruimoku-v6 "rui6-" 4 x nil) + (=ks-x1001 "k0-" 4 x nil) (=cns11643-1 "c1-" 4 x nil) (=cns11643-2 "c2-" 4 x nil) (=cns11643-3 "c3-" 4 x nil) @@ -877,11 +1433,9 @@ style=\"vertical-align:middle\">" (=cns11643-5 "c5-" 4 x nil) (=cns11643-6 "c6-" 4 x nil) (=cns11643-7 "c7-" 4 x nil) - (=daikanwa "dkw-" 5 d nil) - (=gt-k "gt-k" 5 d nil) - (=jef-china3 "jc3-" 4 x nil) - (=big5 "b-" 4 x nil) - (=ks-x1001 "k0-" 4 x nil) + (=jis-x0208 "j90-" 4 x nil) + (=jis-x0208@1990 "j90-" 4 x nil) + (=jis-x0208@1983 "j83-" 4 x nil) )) (defun char-GlyphWiki-id (char) @@ -889,14 +1443,17 @@ style=\"vertical-align:middle\">" spec ret code) (while (and rest (setq spec (pop rest)) - (null (setq ret (char-feature char (car spec)))))) + (null (setq ret (get-char-attribute char (car spec)))))) (when ret (or + (and (listp ret) + (mapconcat #'char-GlyphWiki-id ret "-")) (and (memq (car spec) '(=ucs@unicode '=ucs@iso)) (cond ((and (or (encode-char char '=jis-x0208@1990) (encode-char char '=jis-x0212) - (encode-char char '=jis-x0213-1)) + (encode-char char '=jis-x0213-1) + (encode-char char '=jis-x0213-2)) (setq code (encode-char char '=ucs@jis))) (format "u%04x" code) )