1;;; izonmoji-mode.el --- Visualize Windows and Macintosh izonmoji 2 3;; Copyright (C) 2002-2004 by Navi2ch Project 4 5;; Author: SAITO Takuya <tabmore@users.sourceforge.net> 6;; Keywords: 2ch, charset 7 8;; This file is free software; you can redistribute it and/or modify 9;; it under the terms of the GNU General Public License as published by 10;; the Free Software Foundation; either version 2, or (at your option) 11;; any later version. 12 13;; This file is distributed in the hope that it will be useful, 14;; but WITHOUT ANY WARRANTY; without even the implied warranty of 15;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16;; GNU General Public License for more details. 17 18;; You should have received a copy of the GNU General Public License 19;; along with GNU Emacs; see the file COPYING. If not, write to 20;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 21;; Boston, MA 02111-1307, USA. 22 23;; izonmoji-mode() and the way to apply izonmoji-{win,mac}-face on GNU Emacs 24;; are derived from 25 26;; blank-mode.el 27;; Author: Vinicius Jose Latorre <vinicius@cpqd.com.br> 28;; Version: 4.0 29;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/ 30 31;;; Commentary: 32 33;; $B5!<o0MB8J8;z$rI=<(2DG=$JJ8;zNs$KCV$-49$($FI=<($9$k!#(B 34;; $B%G%U%)%k%H$G$OCV49@h$K(B JISX0213 $B$NJ8;z$b;H$C$F$$$^$9$N$G!"(B 35;; JISX0213$BMQ$N%U%)%s%H$,I,MW$G$9!#(B 36;; $BA4$F$N5!<o0MB8J8;z$rI=<($G$-$k$o$1$G$O$"$j$^$;$s$N$GCm0U!#(B 37 38;; commands: 39;; izonmoji-mode $B5!<o0MB8J8;zI=<($r%H%0%k(B 40;; izonmoji-mode-on $B5!<o0MB8J8;z$rI=<((B 41;; izonmoji-mode-off $B5!<o0MB8J8;zI=<($r$d$a$k(B 42 43;; coding-system: 44;; izonmoji-shift-jis $BFI$_9~$_;~$K!"(BIBM$B3HD%J8;z$rBP1~$9$k(BNEC$BFC<lJ8;z!"(B 45;; NEC$BA*Dj(BIBM$B3HD%J8;z$KCV49$9$k!#(B 46 47;; izonmoji-mode-on $B$O(B buffer $B$NFbMF$rJQ99$7$^$;$s$,!"(Bizonmoji-shift-jis $B$G(B 48;; $B%U%!%$%k$rFI$_9~$s$@;~$H(B shift_jis$B$GFI$_9~$s$@;~$H$G$O(B buffer $B$NFbMF$,(B 49;; $B0[$J$k>l9g$b$"$j$^$9$N$G!"0U?^$;$:$K(B file $B$NFbMF$rJQ99$7$J$$$h$&Cm0U(B 50;; $B$7$F2<$5$$!#(B 51 52;; Emacs $B$N%P!<%8%g%s(B 53;; Emacs 20 $B0J9_!"(BXEmacs 21.4 $B0J9_$r;H$C$F2<$5$$!#(B 54;; $B$?$@$7!"(BXEmacs 21.1 $B$G$b0lIt$N5!G=$O;H$($^$9!#(B 55 56;; GNU Emacs 20 $B$G$O!"(BMule-UCS$B$,I,MW$G$9!#(B 57;; $B$3$N%U%!%$%k$rFI$_9~$`A0$K(B (require 'jisx0213) $B$7$F$/$@$5$$!#(B 58 59;; GNU Emacs 20,21$B$G$O!"(Bbuffer-display-table$B$K$h$C$FI=<($rCV$-BX$($?(B 60;; Non-ASCII$B$JJ8;z$N(Bchar-width$B$,$*$+$7$/$J$j$^$9!#(B 61;; $BJQ49A08e$G(Bchar-width$B$,JQ$o$i$J$$>l9g$O!"(B 62;; (defadvice char-width (around display-table-hack activate) 63;; (let ((buffer-display-table nil)) 64;; ad-do-it)) 65;; $B$G$4$^$+$;$^$9!#(B string-width$B$bF1MM$G$9!#(B 66 67;; XEmacs 21.4$B0JA0$G$O(Binit-file$B$K0J2<$N$h$&$K=q$$$F$/$@$5$$!#(B 68;; (make-charset 69;; 'japanese-jisx0213-1 70;; "JIS X 0213:2000 Plain 1" 71;; '(registry "jisx0213\\(\\.2000\\)-1" 72;; dimension 2 chars 94 final ?O graphic 0)) 73;; (make-charset 74;; 'japanese-jisx0213-2 75;; "JIS X 0213:2000 Plain 2" 76;; '(registry "jisx0213\\(\\.2000\\)-2" 77;; dimension 2 chars 94 final ?P graphic 0)) 78 79;; $B@_DjNc(B 80 81;; [$B6&DL(B] ~/.emacs $B$X(B 82;; (require 'izonmoji-mode) 83 84;; [navi2ch] ~/.navi2ch/init.el $B$X(B 85;; (add-hook 'navi2ch-bm-mode-hook 'izonmoji-mode-on) 86;; (add-hook 'navi2ch-article-mode-hook 'izonmoji-mode-on) 87;; (add-hook 'navi2ch-popup-article-mode-hook 'izonmoji-mode-on) 88;; ;; IBM$B3HD%J8;z$rI=<((B (XEmacs-21.1 $B$OHsBP1~(B) 89;; (when (memq 'izonmoji-shift-jis (coding-system-list)) 90;; (setq navi2ch-coding-system 'izonmoji-shift-jis)) 91 92;; [Mew] ~/.mew.el $B$X(B 93;; (add-hook 'mew-message-mode-hook 'izonmoji-mode-on) 94 95;; [Wanderlust] ~/.wl $B$X(B 96;; (add-hook 'wl-message-redisplay-hook 'izonmoji-mode-on) 97 98;; [emacs-w3m] ~/.emacs-w3m.el $B$X(B 99;; (add-hook 'w3m-mode-hook 'izonmoji-mode-on) 100 101;;; Bugs: 102 103;; 1. display-table$B$r$$$8$k(B 104;; 2. M-x izonmoji-mode-on 105;; 3. 1$B$NJQ99$r85$KLa$9(B 106;; 4. M-x izonmoji-mode-off 107;; $B$9$k$H85$K$b$I$i$J$$!#(B 108;; C-u M-x izonmoji-mode-off $B$7$F(Bdisplay-table$B$X$NA4$F$NJQ99$r<h$j>C$9(B 109;; $B$3$H$O$G$-$^$9!#(B 110 111 112;;; Code: 113 114(eval-when-compile 115 (defvar buffer-display-table) 116 (defvar current-display-table)) 117 118(require 'ccl) 119 120(defvar izonmoji-priority-list '(win mac) 121 "*$BI=<($NM%@h=g0L!#(B 122'(win mac) $B$J$i!"(BWindows$B$N5!<o0MB8J8;z$rM%@h$7$D$D!"(BMac$B$NJ8;z$bI=<(!#(B 123'(win) $B$J$i!"(BWindows$B$N5!<o0MB8J8;z$N$_I=<(!#(B") 124 125(defvar izonmoji-win-face 'izonmoji-win-face 126 "*Windows$B$N5!<o0MB8J8;z$NI=<($K;H$&%U%'%$%9L>!#(B 127'default $B$K$9$k$H%U%'%$%9$r$D$1$^$;$s!#(B") 128 129(defvar izonmoji-mac-face 'izonmoji-mac-face 130 "*Mac$B$N5!<o0MB8J8;z$NI=<($K;H$&%U%'%$%9L>!#(B 131'default $B$K$9$k$H%U%'%$%9$r$D$1$^$;$s!#(B") 132 133(defface izonmoji-win-face 134 '((((class color) (type tty)) (:foreground "cyan")) 135 (((class color) (background light)) (:foreground "Aquamarine4")) 136 (((class color) (background dark)) (:foreground "Aquamarine3")) 137 (t (:underline t))) 138 "Windows$B$N5!<o0MB8J8;z$N%U%'%$%9!#(B") 139 140(defface izonmoji-mac-face 141 '((((class color) (type tty)) (:foreground "magenta")) 142 (((class color) (background light)) (:foreground "pink4")) 143 (((class color) (background dark)) (:foreground "pink3")) 144 (t (:underline t))) 145 "Mac$B$N5!<o0MB8J8;z$N%U%'%$%9!#(B") 146 147(defvar izonmoji-win-display-list 148 '("$(O-!(B" "$(O-"(B" "$(O-#(B" "$(O-$(B" "$(O-%(B" "$(O-&(B" "$(O-'(B" "$(O-((B" "$(O-)(B" "$(O-*(B" 149 "$(O-+(B" "$(O-,(B" "$(O--(B" "$(O-.(B" "$(O-/(B" "$(O-0(B" "$(O-1(B" "$(O-2(B" "$(O-3(B" "$(O-4(B" 150 "$(O-5(B" "$(O-6(B" "$(O-7(B" "$(O-8(B" "$(O-9(B" "$(O-:(B" "$(O-;(B" "$(O-<(B" "$(O-=(B" "$(O->(B" 151 "$(O-@(B" "$(O-A(B" "$(O-B(B" "$(O-C(B" "$(O-D(B" "$(O-E(B" "$(O-F(B" "$(O-G(B" "$(O-H(B" "$(O-I(B" "$(O-J(B" "$(O-K(B" 152 "$(O-L(B" "$(O-M(B" "$(O-N(B" "$(O-O(B" "$(O-P(B" "$(O-Q(B" "$(O-R(B" "$(O-S(B" "$(O-T(B" "$(O-U(B" "$(O-V(B" 153 "$(O-_(B" "$(O-`(B" "$(O-a(B" "$(O-b(B" "$(O-c(B" "$(O-d(B" "$(O-e(B" "$(O-f(B" "$(O-g(B" "$(O-h(B" "$(O-i(B" 154 "$(O-j(B" "$(O-k(B" "$(O-l(B" "$(O-m(B" "$(O-n(B" "$(O-o(B" 155 "$B"b(B" "$B"a(B" "$B"i(B" "$(O-s(B" "$B&2(B" "$B"e(B" "$B"](B" "$B"\(B" "$(O-x(B" "$(O-y(B" "$B"h(B" "$B"A(B" "$B"@(B" 156 "$(Oz7(B" "$(O{n(B" "$(O}9(B" "$(O}.(B" "$(PvU(B" "$(O.9(B" "$(Po`(B" "$(Ou5(B" "$(Oui(B" "$(P{#(B" "$(Ou7(B" "$(Ot:(B" "$(O.$(B" "$(O.((B" 157 "$(I"n(B" "$(P!?(B" "$(O.+(B" "$(D0c(B" "$(O.0(B" "$(P!M(B" "$(O.5(B" "$(P!N(B" "$(O.6(B" "$(D1>(B" "$(O.A(B" "$(P!](B" "$(D1H(B" "$(P!\(B" 158 "$(P!`(B" "$(P!g(B" "$(P!_(B" "$(O.D(B" "$(IEt(B" "$(D2;(B" "$(O.O(B" "$(D2m(B" "$(O.T(B" "$(D2|(B" "$(I$[(B" "$(O.](B" "$(D3X(B" "$(P#C(B" 159 "$(D3e(B" "$(O.g(B" "$(O.k(B" "$(O.l(B" "$(P#N(B" "$(D4@(B" "$(O.r(B" "$(O.t(B" "$(D4^(B" "$B".(B" "$(O.x(B" "$(P#l(B" "$(O/!(B" "$(O/#(B" 160 "$(O/*(B" "$(J#a(B" "$(D7B(B" "$(P$l(B" "$(O/O(B" "$(O/N(B" "$(O/K(B" "$(O/W(B" "$(O/](B" "$(D8N(B" "$(P%:(B" "$(D8u(B" "$(P%E(B" "$(O/i(B" 161 "$(D8|(B" "$(O/m(B" "$(D97(B" "$(OOV(B" "$(P($(B" "$(OxI(B" "$(OOY(B" "$(OOZ(B" "$(OO\(B" "$(P(C(B" "$(OOi(B" "$(I0b(B" "$(OOq(B" "$(OOu(B" 162 "$(OOr(B" "$(P(U(B" "$(OOw(B" "$(OO|(B" "$(P(g(B" "$(D;y(B" "$(D<d(B" "$(Ot6(B" "$(Ot>(B" "$(OtE(B" "$(OtG(B" "$(D=g(B" "$(GUP(B" "$(P,M(B" 163 "$(D>0(B" "$(OtU(B" "$Ac3(B" "$(P,X(B" "$(D>=(B" "$(Ot[(B" "$(OtZ(B" "$(P,i(B" "$(D?((B" "$(P-"(B" "$(Ott(B" "$(Otz(B" "$(P-P(B" "$(Ot|(B" 164 "$(I66(B" "$(Ou,(B" "$(Ou.(B" "$(I-"(B" "$(Ou-(B" "$(DB+(B" "$(Ou/(B" "$(Ou2(B" "$(Ou>(B" "$(P-~(B" "$(Ou;(B" "$B".(B" "$(Ou?(B" "$(P.-(B" 165 "$(OuD(B" "$(OuE(B" "$(P.3(B" "$(OuL(B" "$(DBp(B" "$(OuN(B" "$(OuP(B" "$(OuX(B" "$(Ou^(B" "$(OuZ(B" "$(Ou](B" "$(P._(B" "$(P.}(B" "$(P.y(B" 166 "$(Oux(B" "$(Ouz(B" "$(P/6(B" "$(Ov"(B" "$(P/A(B" "$(Ov0(B" "$(P/S(B" "$(Ov1(B" "$(P/Z(B" "$(IZH(B" "$(Ov8(B" "$(OvK(B" "$(Pn5(B" "$(OvR(B" 167 "$(OvW(B" "$(DFc(B" "$(PnD(B" "$(Ova(B" "$(Ovk(B" "$(DGC(B" "$(DGK(B" "$(Ovo(B" "$(Pnh(B" "$(I6|(B" "$(H6d(B" "$(Ovv(B" "$(DGn(B" "$(Ovz(B" 168 "$(Pnp(B" "$(Pns(B" "$(Po$(B" "$(Ow/(B" "$(PoA(B" "$(Ow;(B" "$(Ow<(B" "$(PoJ(B" "$(Ow>(B" "$(OwE(B" "$(OwG(B" "$(OwL(B" "$(Pok(B" "$(OwW(B" 169 "$(OwR(B" "$(OwS(B" "$(OwZ(B" "$(Ow^(B" "$(Owa(B" "$(Pp=(B" "$(Owi(B" "$(DK.(B" "$(Owo(B" "$(PpW(B" "$(DKf(B" "$(Owy(B" "$(Ow{(B" "$(Ow}(B" 170 "$(DKn(B" "$(Ox!(B" "$(DKy(B" "$(Ox&(B" "$(Ox((B" "$(DL-(B" "$(Ox+(B" "$(Ox3(B" "$(Ox8(B" "$(Ox;(B" "$(OxG(B" "$(OxJ(B" "$ATm(B" "$(Pqo(B" 171 "$(Oxc(B" "$(Oxa(B" "$(Oxd(B" "$B".(B" "$(Oxr(B" "$(P#D(B" "$(PrC(B" "$(Oy"(B" "$(PrF(B" "$(DOm(B" "$(Pr^(B" "$B".(B" "$(Oy<(B" "$(Oy=(B" 172 "$(Prg(B" "$(OyA(B" "$(Prj(B" "$(Ps9(B" "$(Ps:(B" "$B".(B" "$(OyX(B" "$(Oyc(B" "$B".(B" "$(Oz"(B" "$(Oz$(B" "$(PtG(B" "$(Oz((B" "$(Oz,(B" 173 "$(Oz5(B" "$(Oz9(B" "$(DU.(B" "$B".(B" "$(Ozl(B" "$(Ozm(B" "$(Pv3(B" "$(Oz}(B" "$(DXA(B" "$(O{((B" "$(O{/(B" "$(Pvq(B" "$(O{8(B" "$(DYQ(B" 174 "$(O{:(B" "$(O{@(B" "$(Pw8(B" "$(PwE(B" "$(I[)(B" "$(O{m(B" "$(O{}(B" "$(O|"(B" "$(O|((B" "$(O|)(B" "$(Px`(B" "$(O|+(B" "$(O|.(B" "$(O|-(B" 175 "$(D^K(B" "$(Pxo(B" "$(Py0(B" "$(O|:(B" "$(O|>(B" "$A8O(B" "$B".(B" "$(D`Y(B" "$(Pyn(B" "$B".(B" "$(Dab(B" "$(O|g(B" "$(O|j(B" "$(O|l(B" 176 "$(O|p(B" "$(PzN(B" "$(O||(B" "$(Dc)(B" "$(O}"(B" "$(PzR(B" "$(O|~(B" "$(O}!(B" "$(Dc<(B" "$(O}%(B" "$(PzT(B" "$(O}((B" "$(O}*(B" "$(O})(B" 177 "$(Pz\(B" "$(Pz_(B" "$(Pz](B" "$(O}'(B" "$(Pzc(B" "$(Pzo(B" "$(Dcq(B" "$(O}-(B" "$(Pz|(B" "$(Pzy(B" "$(Pzz(B" "$(Pzx(B" "$B".(B" "$(Dd@(B" 178 "$(O}3(B" "$(O}2(B" "$(O}8(B" "$(O}7(B" "$(P{$(B" "$B".(B" "$(P{)(B" "$(O}4(B" "$(P{((B" "$(P{%(B" "$(O}?(B" "$(P{0(B" "$(De3(B" "$(O}C(B" 179 "$(O}D(B" "$(DeP(B" "$(Deb(B" "$(P{M(B" "$(Dek(B" "$(Gbg(B" "$(O}](B" "$B".(B" "$(O}^(B" "$(P{l(B" "$(O}f(B" "$(O}g(B" "$(Dg.(B" "$(O}h(B" 180 "$(O}j(B" "$(I*~(B" "$(P{|(B" "$(O~!(B" "$(O~%(B" "$B".(B" "$B".(B" "$(Dh](B" "$B".(B" "$(O~+(B" "$(O~3(B" "$(J6-(B" "$(P}2(B" "$(O~D(B" 181 "$(O~C(B" "$(O~G(B" "$(P}J(B" "$(Djj(B" "$(O~O(B" "$(O~^(B" "$(P~4(B" "$B".(B" "$(P~O(B" "$(O~r(B" 182 "$(O,5(B" "$(O,6(B" "$(O,7(B" "$(O,8(B" "$(O,9(B" "$(O,:(B" "$(O,;(B" "$(O,<(B" "$(O,=(B" "$(O,>(B" "$B"L(B" "$(O)%(B" "$(O"/(B" "$(O"0(B") 183 "*Windows$B$N5!<o0MB8J8;z$NI=<($K;H$&J8;zNs$N%j%9%H!#(B") 184 185(defvar izonmoji-mac-display-list 186 '("$(O-!(B" "$(O-"(B" "$(O-#(B" "$(O-$(B" "$(O-%(B" "$(O-&(B" "$(O-'(B" "$(O-((B" "$(O-)(B" "$(O-*(B" 187 "$(O-+(B" "$(O-,(B" "$(O--(B" "$(O-.(B" "$(O-/(B" "$(O-0(B" "$(O-1(B" "$(O-2(B" "$(O-3(B" "$(O-4(B" 188 "(1)" "(2)" "(3)" "(4)" "(5)" "(6)" "(7)" "(8)" "(9)" "(10)" 189 "(11)" "(12)" "(13)" "(14)" "(15)" "(16)" "(17)" "(18)" "(19)" "(20)" 190 "$(O,!(B" "$(O,"(B" "$(O,#(B" "$(O,$(B" "$(O,%(B" "$(O,&(B" "$(O,'(B" "$(O,((B" "$(O,)(B" 191 "0." "1." "2." "3." "4." "5." "6." "7." "8." "9." "0." ;0. $B$O$I$3!)(B 192 "$(O-5(B" "$(O-6(B" "$(O-7(B" "$(O-8(B" "$(O-9(B" "$(O-:(B" "$(O-;(B" "$(O-<(B" "$(O-=(B" "$(O->(B" 193 "$(O-?(B" "$(O-W(B" "X$(O-7(B" "X$(O-8(B" "XV" 194 "$(O,5(B" "$(O,6(B" "$(O,7(B" "$(O,8(B" "$(O,9(B" "$(O,:(B" "$(O,;(B" "$(O,<(B" "$(O,=(B" "$(O,>(B" 195 "$(O,?(B" "$(O,@(B" "x$(O,7(B" "x$(O,8(B" "xv" 196 "(a)" "(b)" "(c)" "(d)" "(e)" "(f)" "(g)" "(h)" "(i)" "(j)" "(k)" 197 "(l)" "(m)" "(n)" "(o)" "(p)" "(q)" "(r)" "(s)" "(t)" "(u)" "(v)" 198 "(w)" "(x)" "(y)" "(z)" 199 "$(O-P(B" "mm$(O),(B" "$(O-Q(B" "$(O-Q),(B" "$(O-Q)-(B" "m" "$(O-V(B" "m$(O)-(B" "$(O-R(B" "k$(O-V(B" 200 "$(O-S(B" "g" "$(O-T(B" "$(O-U(B" "m$(O#_(B" "d$(O#_(B" "$(O#_(B" "k$(O#_(B" 201 "ms" "$B&L(Bs" "ns" "ps" "$(O!k(BF" "mb" "$(O#^(B" "Hz" "KB" "MB" "GB" "TB" 202 "$(O-b(B" "$(O-c(B" "$(O-d(B" "FAX" 203 "$(O&9(B" "$(O&?(B" "$(O&=(B" "$(O&;(B" "$(O&:(B" "$(O&@(B" "$(O&>(B" "$(O&<(B" 204 "$(O&f(B" "$(O&g(B" "JIS" ;JIS$B%^!<%/(B 205 "$B"*(B" "$B"+(B" "$B",(B" "$B"-(B" ;$B;X:9$7Lp0u(B 206 "$(O#)(B" "$(O#)(B" "$B","-(B" "$B"-",(B" ;$B6v?tHVL\$O!">e2<!":81&$N8~$-$,5U(B 207 "$(O#*(B" "$(O#+(B" "$(O#,(B" "$(O#-(B" "$(O#*(B" "$(O#+(B" "$(O#,(B" "$(O#-(B" ;$B8eH>$OEI$jDY$7(B 208 "($BF|(B)" "($B7n(B)" "($B2P(B)" "($B?e(B)" "($BLZ(B)" "($B6b(B)" "($BEZ(B)" 209 "($B:W(B)" "($B=K(B)" "($B<+(B)" "($B;j(B)" "$(O-l(B" "($B8F(B)" "$(O-j(B" "($B;q(B)" "($BL>(B)" 210 "$(O-k(B" "($B3X(B)" "($B:b(B)" "($B<R(B)" "($BFC(B)" "($B4F(B)" "($B4k(B)" "($B6((B)" "($BO+(B)" 211 "($BBg(B)" "($B>.(B)" "$(O-e(B" "$(O-f(B" "$(O-g(B" "$(O-h(B" "$(O-i(B" 212 "($B0e(B)" "($B:b(B)" "($BM%(B)" "($BO+(B)" "($B0u(B)" "($B95(B)" "($BHk(B)" ;$BK\Ev$O4]IU$-(B 213 "$(O-@(B" "$(O-B(B" "$(O-C(B" "$(O-A(B" "$(O-A-C(B" "(I2]A(B" "(IL(0D(B" "(IT0D^(B" "$(O-F(B" "$(O-G(B" 214 "$(O-D(B" "$(O-A-D(B" "$(O-E(B" "$(O-H(B" "$(O-N(B" "(IMYB(B" "$(O-I(B" "$(O-J(B" "(IN0](B" "$(O-L(B" "$(O-K(B" "$(O-O(B" "$(O-M(B" 215 "(I1J_0D(B" "(I:0N_(B" "(IJ2B(B" "(IK^Y(B" "(IO]<.](B" 216 "$(O-m(B" "$(O-n(B" "$(O-o(B" "$(O-_(B" 217 "$B3t<02q<R(B" "$BM-8B2q<R(B" "$B:bCDK!?M(B" ;"$(O-j(B" "$(O-k(B" 218 "$(O-s(B" "$(O-x(B" "$(O-y(B" 219 "$(O-`(B" "$(O-a(B" 220 "$(O$t(B" "$(O'r(B" "$(O's(B" "$(O't(B" "$(O'u(B" 221 ;; $B=D=q$-(B 222 "$B!"(B" "$B!#(B" "$B!1(B" "$B!2(B" "$B!<(B" "$B(!(B" "$B!>(B" "$B!A(B" 223 "$B!a(B" "$B(!(B" ;$B2#D>@~(B 224 "$B!D(B" "$B!E(B" "$B!J(B" "$B!K(B" "$B!L(B" "$B!M(B" "$B!N(B" "$B!O(B" "$B!P(B" "$B!Q(B" "$B!R(B" "$B!S(B" "$B!T(B" "$B!U(B" 225 "$B!V(B" "$B!W(B" "$B!X(B" "$B!Y(B" "$B!Z(B" "$B![(B" "$B!a(B" 226 "$B$!(B" "$B$#(B" "$B$%(B" "$B$'(B" "$B$)(B" "$B$C(B" "$B$c(B" "$B$e(B" "$B$g(B" "$B$n(B" 227 "$B%!(B" "$B%#(B" "$B%%(B" "$B%'(B" "$B%)(B" "$B%C(B" "$B%c(B" "$B%e(B" "$B%g(B" "$B%n(B" "$B%u(B" "$B%v(B") 228 "*Mac$B$N5!<o0MB8J8;z$NI=<($K;H$&J8;zNs$N%j%9%H!#(B") 229 230(defun izonmoji-make-char-list (i js je &optional k) 231 (unless k (setq k 1)) 232 (let ((j js) list) 233 (while (<= j je) 234 (setq list (cons (make-char 'japanese-jisx0208 i j) list)) 235 (setq j (+ j k))) 236 (nreverse list))) 237 238;; Windows$B$N4]IU$-(B1$B$O!"(B 239;; (split-char (decode-sjis-char (hexl-hex-string-to-integer "8740"))) 240(defvar izonmoji-win-chars-list 241 (append 242 (izonmoji-make-char-list 45 33 62) ;$B4]IU$-?t;z(B + $B%m!<%^?t;z(B($BBgJ8;z(B) 243 (izonmoji-make-char-list 45 64 86) ;$BC10L(B 244 (izonmoji-make-char-list 45 95 124) ;$B859f!"?t3X5-9f$J$I(B 245 (izonmoji-make-char-list 121 33 126) ;$B4A;z(B 246 (izonmoji-make-char-list 122 33 126) 247 (izonmoji-make-char-list 123 33 126) 248 (izonmoji-make-char-list 124 33 110) 249 (izonmoji-make-char-list 124 113 126) ;$B%m!<%^?t;z(B($B>.J8;z(B) 250 ) 251 "*Windows$B$N5!<o0MB8J8;z%j%9%H!#(B") 252 253(defvar izonmoji-mac-chars-list 254 (append 255 (izonmoji-make-char-list 41 33 52) ;$B4]IU$-?t;z(B 256 (izonmoji-make-char-list 41 63 82) ;$B3g8LIU$-?t;z(B 257 (izonmoji-make-char-list 41 93 101) ;$B9u4]IU$-?t;z(B 258 (izonmoji-make-char-list 41 113 123) ;$BE@IU$-?t;z(B 259 (izonmoji-make-char-list 42 33 47) ;$B%m!<%^?t;z(B($BBgJ8;z(B) 260 (izonmoji-make-char-list 42 53 67) ;$B%m!<%^?t;z(B($B>.J8;z(B) 261 (izonmoji-make-char-list 42 93 118) ;$B3g8LIU$-%"%k%U%!%Y%C%H(B 262 (izonmoji-make-char-list 43 33 62) ;$BC10L(B 263 (izonmoji-make-char-list 43 123 126) ;$BN,9f(B 264 (izonmoji-make-char-list 44 33 40) ;$B%H%i%s%W(B 265 (izonmoji-make-char-list 44 53 55) ;$BM9JX(B 266 (izonmoji-make-char-list 44 73 88) ;$BLp0u(B 267 (izonmoji-make-char-list 45 33 57) ;$BMKF|$J$I(B 268 (izonmoji-make-char-list 45 113 126) ;$B4]IU$-J8;z(B 269 (izonmoji-make-char-list 46 33 55) ;$B%+%?%+%JC10L(B 270 (izonmoji-make-char-list 46 63 67) ;$B%"%Q!<%H(B 271 (izonmoji-make-char-list 46 103 106) ;$B859f(B 272 (izonmoji-make-char-list 46 124 126) ;$B3t<02q<R(B 273 (izonmoji-make-char-list 47 33 35) ;$B?t3X5-9f(B 274 (izonmoji-make-char-list 47 53 54) ;"" 275 (izonmoji-make-char-list 47 73 73) ;$B$&!+(B 276 (izonmoji-make-char-list 47 75 78) ;$B%o!+(B 277 (izonmoji-make-char-list 117 34 35) ;$B=D=q$-(B 278 (izonmoji-make-char-list 117 49 50) 279 (izonmoji-make-char-list 117 60 62) 280 (izonmoji-make-char-list 117 65 69) 281 (izonmoji-make-char-list 117 74 91) 282 (izonmoji-make-char-list 117 97 97) 283 (izonmoji-make-char-list 120 33 41 2) 284 (izonmoji-make-char-list 120 67 67) 285 (izonmoji-make-char-list 120 99 99) 286 (izonmoji-make-char-list 120 101 103 2) 287 (izonmoji-make-char-list 120 110 110) 288 (izonmoji-make-char-list 121 33 41 2) 289 (izonmoji-make-char-list 121 67 67) 290 (izonmoji-make-char-list 121 99 99) 291 (izonmoji-make-char-list 121 101 103 2) 292 (izonmoji-make-char-list 121 110 110) 293 (izonmoji-make-char-list 121 117 118)) 294 "*Mac$B$N5!<o0MB8J8;z%j%9%H!#(B") 295 296(defvar izonmoji-mode-hook nil "*$B5!<o0MB8J8;z$rI=<($7$?8e$K8F$P$l$k%U%C%/!#(B") 297 298;; Internal variables 299 300(defvar izonmoji-mode nil) 301(make-variable-buffer-local 'izonmoji-mode) 302 303(defvar izonmoji-backuped-display-table nil) 304(make-variable-buffer-local 'izonmoji-backuped-display-table) 305 306(defun izonmoji-mode (&optional arg) 307 "$B5!<o0MB8J8;zI=<($r%H%0%k!#(B 308ARG $B$,(B non-nil $B$N>l9g!"(B1$B0J>e$N?t$J$i5!<o0MB8J8;z$rI=<(!#(B 309$B$=$l0J30$J$i5!<o0MB8J8;zI=<($r$d$a$k!#(B" 310 (interactive "P") 311 (if (if arg 312 (> (prefix-numeric-value arg) 0) 313 (not izonmoji-mode)) 314 (izonmoji-mode-on) 315 (izonmoji-mode-off))) 316 317(defun izonmoji-mode-on (&optional reverse win-face mac-face) 318 "$B5!<o0MB8J8;z$rI=<((B" 319 (interactive "P") 320 (let ((priority (reverse izonmoji-priority-list)) 321 from to table) 322 (when reverse 323 (setq priority (nreverse priority))) 324 (unless izonmoji-mode 325 (cond 326 ((featurep 'xemacs) 327 (let* ((ctable (specifier-instance current-display-table)) 328 (len (- (1+ (apply 'max (append izonmoji-win-chars-list 329 izonmoji-mac-chars-list))) 330 (length ctable))) 331 face glyph) 332 (setq izonmoji-backuped-display-table ctable 333 table (copy-sequence ctable)) 334 (when (> len 0) 335 (setq table (vconcat table (make-vector len nil)))) 336 (while priority 337 (cond 338 ((eq (car priority) 'win) 339 (setq from izonmoji-win-chars-list 340 to izonmoji-win-display-list 341 face (or win-face izonmoji-win-face 'default))) 342 ((eq (car priority) 'mac) 343 (setq from izonmoji-mac-chars-list 344 to izonmoji-mac-display-list 345 face (or mac-face izonmoji-mac-face 'default)))) 346 (setq priority (cdr priority)) 347 (while (and from to) 348 (if (or (eq face 'default) 349 ;; XEmacs 21.1 $B$G(B face $B$rIU$1$k$HMn$A$k$N$G!#(B 350 (and (= emacs-major-version 21) 351 (= emacs-minor-version 1))) 352 ;; face $B$r;XDj$7$J$$!#(B 353 (aset table (car from) (car to)) 354 (setq glyph (make-glyph (car to))) 355 (set-glyph-face glyph face) 356 (aset table (car from) glyph)) 357 (setq from (cdr from) to (cdr to)))) 358 (set-specifier current-display-table table (current-buffer)))) 359 (t ;GNU Emacs 360 (let (face-bits) 361 (setq izonmoji-backuped-display-table buffer-display-table 362 table (or (copy-sequence (or buffer-display-table 363 standard-display-table)) 364 (make-display-table))) 365 (while priority 366 (cond 367 ((eq (car priority) 'win) 368 (setq from izonmoji-win-chars-list 369 to izonmoji-win-display-list 370 face-bits (ash (face-id 371 (or win-face izonmoji-win-face 'default)) 372 19))) 373 ((eq (car priority) 'mac) 374 (setq from izonmoji-mac-chars-list 375 to izonmoji-mac-display-list 376 face-bits (ash (face-id 377 (or mac-face izonmoji-mac-face 'default)) 378 19)))) 379 (setq priority (cdr priority)) 380 (while (and from to) 381 (aset table (car from) 382 (apply 'vector (mapcar 383 (lambda (ch) (logior ch face-bits)) 384 (car to)))) 385 (setq from (cdr from) to (cdr to)))) 386 (setq buffer-display-table table))))) 387 (setq izonmoji-mode t) 388 (run-hooks 'izonmoji-mode-hook))) 389 390(defun izonmoji-mode-off (&optional initialize) 391 "$B5!<o0MB8J8;zI=<($r$d$a$k(B" 392 (interactive "P") 393 (when initialize 394 (setq izonmoji-mode t 395 izonmoji-backuped-display-table (make-display-table))) 396 (when izonmoji-mode 397 (if (featurep 'xemacs) 398 (set-specifier current-display-table 399 izonmoji-backuped-display-table (current-buffer)) 400 (setq buffer-display-table izonmoji-backuped-display-table)) 401 (setq izonmoji-mode nil))) 402 403;; izonmoji-shift-jis 404(when (and (fboundp 'ccl-compile-write-multibyte-character) 405 (not (memq 'izonmoji-shift-jis (coding-system-list)))) 406 (eval-and-compile 407 (defun izonmoji-ccl-write-sjis () 408 `((r1 = (r0 de-sjis r1)) 409 (r0 = (r1 << 7)) 410 (r0 += r7) 411 (r1 = ,(charset-id 'japanese-jisx0208)) 412 (write-multibyte-character r1 r0) 413 (repeat))) 414 415 (defun izonmoji-ccl-ibm-ext (d0 d1) 416 `((r0 -= ,d0) 417 (r1 -= ,d1) 418 ,@(izonmoji-ccl-write-sjis)))) 419 420 (define-ccl-program izonmoji-shift-jis-decode 421 `(2 422 (loop 423 (read r0) 424 (if (r0 < ?\x80) 425 (write-repeat r0)) 426 ;; if (r0 == 0x80 || r0 == 0xA0 || 0xEF < r0 < 0xFA || r0 > 0xFC) 427 (r1 = (r0 == ?\x80)) 428 (r1 |= (r0 == ?\xA0)) 429 (r2 = (r0 > ?\xEF)) 430 (r2 &= (r0 < ?\xFA)) 431 (r1 |= r2) 432 (r1 |= (r0 > ?\xFC)) 433 (if r1 434 (write-repeat r0)) 435 (r1 = (r0 <= ?\x9F)) 436 (r1 |= (r0 >= ?\xE0)) 437 (if r1 438 ((read r1) 439 (r2 = (r1 < ?\x40)) 440 (r2 |= (r1 == ?\x7F)) 441 (r2 |= (r1 > ?\xFC)) 442 (if r2 443 ((write r0) 444 (write-repeat r1))) 445 (if (r0 >= ?\xFA) 446 ((if (r0 == ?\xFA) 447 ((if (r1 <= ?\x49) 448 ,(izonmoji-ccl-ibm-ext 12 -175)) 449 (if (r1 <= ?\x53) 450 ,(izonmoji-ccl-ibm-ext 115 -10)) 451 (if (r1 <= ?\x57) 452 ,(izonmoji-ccl-ibm-ext 12 -165)) 453 (if (r1 == ?\x58) 454 ,(izonmoji-ccl-ibm-ext 115 -50)) 455 (if (r1 == ?\x59) 456 ,(izonmoji-ccl-ibm-ext 115 -41)) 457 (if (r1 == ?\x5A) 458 ,(izonmoji-ccl-ibm-ext 115 -42)) 459 (if (r1 == ?\x5B) 460 ,(izonmoji-ccl-ibm-ext 115 -63)) 461 (if (r1 <= ?\x7E) 462 ,(izonmoji-ccl-ibm-ext 13 28)) 463 (if (r1 <= ?\x9B) 464 ,(izonmoji-ccl-ibm-ext 13 29)) 465 (if (r1 <= ?\xFC) 466 ,(izonmoji-ccl-ibm-ext 13 28)))) 467 (if (r0 == ?\xFB) 468 ((if (r1 <= ?\x5B) 469 ,(izonmoji-ccl-ibm-ext 14 -161)) 470 (if (r1 <= ?\x7E) 471 ,(izonmoji-ccl-ibm-ext 13 28)) 472 (if (r1 <= ?\x9B) 473 ,(izonmoji-ccl-ibm-ext 13 29)) 474 (if (r1 <= ?\xFC) 475 ,(izonmoji-ccl-ibm-ext 13 28)))) 476 (if (r0 == ?\xFC) 477 ((if (r1 <= ?\x4B) 478 ,(izonmoji-ccl-ibm-ext 14 -161)))) 479 (write r0) 480 (write-repeat r1))) 481 ,@(izonmoji-ccl-write-sjis)) 482 ((r0 &= ?\x7F) 483 (r1 = ,(charset-id 'katakana-jisx0201)) 484 (write-multibyte-character r1 r0) 485 (repeat)))))) 486 487 (define-ccl-program izonmoji-shift-jis-encode 488 `(1 489 (loop 490 (read r0) 491 (if (r0 == ,(charset-id 'japanese-jisx0208)) 492 ((read r0) 493 (read r1) 494 (r0 &= ?\x7F) 495 (r1 &= ?\x7F) 496 (r1 = (r0 en-sjis r1)) 497 (write r1 r7) 498 (repeat)) 499 ((if (r0 == ,(charset-id 'katakana-jisx0201)) 500 (read r0)) 501 (write-repeat r0)))))) 502 503 (if (featurep 'xemacs) 504 (make-coding-system 'izonmoji-shift-jis 'ccl 505 "Shift-JIS for displaying IBM ext characters" 506 (list 'mnemonic "S" 507 'decode 'izonmoji-shift-jis-decode 508 'encode 'izonmoji-shift-jis-encode)) 509 (make-coding-system 'izonmoji-shift-jis 4 ?S 510 "Shift-JIS for displaying IBM ext characters" 511 (cons 'izonmoji-shift-jis-decode 512 'izonmoji-shift-jis-encode) 513 (list (cons 'safe-charsets 514 (coding-system-get 'japanese-shift-jis 515 'safe-charsets)))))) 516 517(add-to-list 'minor-mode-alist '(izonmoji-mode " Iz")) 518 519(provide 'izonmoji-mode) 520 521;;; izonmoji-mode.el ends here 522