X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fest.git;a=blobdiff_plain;f=cwiki-glyph.el;h=3b637db1c73008c0abfedddc8abcdb3ff3810c15;hp=cffdab6f2f8b32d98ebf725d40ddf502124e29da;hb=HEAD;hpb=6ce4694f742d134173ee6851eb3f85b8edb6c6f7 diff --git a/cwiki-glyph.el b/cwiki-glyph.el index cffdab6..3b637db 100644 --- a/cwiki-glyph.el +++ b/cwiki-glyph.el @@ -2,11 +2,48 @@ (setq file-name-coding-system 'utf-8-jp) +(defun www-glyph-big5-to-ucs-pua (code-point) + (let ((H (lsh code-point -8)) + (L (logand code-point #xff))) + (if (<= #x8140 code-point) + (if (<= code-point #x8DFE) + (+ #xEEB8 (* 157 (- H 0x81)) + (if (< L #x80) + (- L #x40) + (- L #x62))) + (if (<= #x8E40 code-point) + (if (<= code-point #xA0FE) + (+ #xE311 (* 157 (- H #x8e)) + (if (< L #x80) + (- L #x40) + (- L #x62))) + (if (<= #xC6A1 code-point) + (if (<= code-point #xC8FE) + (+ #xF672 (* 157 (- H #xC6)) + (if (< L #x80) + (- L #x40) + (- L #x62))) + (if (<= #xFA40 code-point) + (if (<= code-point #xFEFE) + (+ #xE000 (* 157 (- H #xFA)) + (if (< L #x80) + (- L #x40) + (- L #x62))))))))))))) + (defun www-glyph-generate-png (ccs code-point &optional size) (unless size (setq size 40)) (let (png-file dir font char ret plain) (cond + ((eq ccs '=ucs@JP/hanazono) + (setq font + (if (<= code-point 65535) + "/usr/local/share/fonts/TrueType/Hanazono/HanaMinA.ttf" + "/usr/local/share/fonts/TrueType/Hanazono/HanaMinB.ttf")) + (setq char (decode-char '=ucs code-point) + png-file (format "/opt/chisewiki/glyphs/%d/Hanazono/u%04X.png" + size code-point)) + ) ((eq ccs '=gt) (setq char (decode-char '=gt code-point) png-file (format "/opt/chisewiki/glyphs/%d/GT/%05d.png" @@ -54,9 +91,113 @@ ) ((eq ccs '=big5-cdp) (setq font "/usr/local/share/fonts/TrueType/CDP/Cdpeudc.ttf" - char (decode-char '=big5-pua code-point) + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) png-file (format "/opt/chisewiki/glyphs/%d/CDP/%04X.png" size code-point)) + ) + ((eq ccs '=hanziku-1) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzk1u.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-01/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-2) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzk2u.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-02/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-3) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzk3u.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-03/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-4) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzk4u.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-04/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-5) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzk5u.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-05/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-6) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzk6u.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-06/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-7) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzk7u.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-07/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-8) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzk8u.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-08/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-9) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzk9u.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-09/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-10) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzkau.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-10/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-11) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzkbu.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-11/%04X.png" + size code-point)) + ) + ((eq ccs '=hanziku-12) + (setq font "/usr/local/share/fonts/TrueType/Hanziku/hzkcu.ttf" + char (or (decode-char '=big5-pua code-point) + (decode-char '=ucs + (www-glyph-big5-to-ucs-pua code-point))) + png-file (format "/opt/chisewiki/glyphs/%d/Hanziku-12/%04X.png" + size code-point)) + ) + ((eq ccs '=ruimoku-v6) + (setq font "/usr/local/share/fonts/TrueType/Zinbun/rui6-eudc.ttf" + char (decode-char '=ucs code-point) + png-file (format "/opt/chisewiki/glyphs/%d/Ruimoku-v6/%04X.png" + size code-point)) )) (when font (if (= (call-process @@ -77,6 +218,12 @@ (setq size (string-to-int size))) (let ((png-file (cond + ((string-match "^hana-JU\\+\\([0-9A-F]+\\)" char-rep) + (www-glyph-generate-png + '=ucs@JP/hanazono + (string-to-int (match-string 1 char-rep) 16) + size) + ) ((string-match "^GT-\\([0-9]+\\)" char-rep) (www-glyph-generate-png '=gt @@ -100,6 +247,21 @@ '=big5-cdp (string-to-int (match-string 1 char-rep) 16) size) + ) + ((string-match + "^HZK\\(0[1-9]\\|1[0-2]\\)-\\([0-9A-F]+\\)" + char-rep) + (www-glyph-generate-png + (intern (format "=hanziku-%d" + (string-to-int (match-string 1 char-rep)))) + (string-to-int (match-string 2 char-rep) 16) + size) + ) + ((string-match "^RUI6-\\([0-9A-F]+\\)" char-rep) + (www-glyph-generate-png + '=ruimoku-v6 + (string-to-int (match-string 1 char-rep) 16) + size) )) )) (when png-file