041144de83f7a501330dd433eb3346ba93844eb7
[chise/uptex-chise.git] / elisp / chise-tex.el
1 ;;; chise-tex.el --- Coding-system based chise2otf like tool
2
3 ;; Copyright (C) 2004,2005,2006,2007,2008,2009 MORIOKA Tomohiko
4
5 ;; Author: MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
6 ;; Keywords: OTF package, pTeX, CHISE, Multiscript, Multilingual
7
8 ;; This file is a part of Omega/CHISE.
9
10 ;; This program is free software; you can redistribute it and/or
11 ;; modify it under the terms of the GNU General Public License as
12 ;; published by the Free Software Foundation; either version 2, or (at
13 ;; your option) any later version.
14
15 ;; This program is distributed in the hope that it will be useful, but
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18 ;; General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with this program; see the file COPYING.  If not, write to
22 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24
25 ;;; Code:
26
27 (defun decompose-char (char)
28   (let (ret dest)
29     (while (setq ret (char-feature char '=decomposition))
30       (setq dest
31             (if (cddr ret)
32                 (append (cdr ret) dest)
33               (cons (nth 1 ret) dest))
34             char (car ret)))
35     (if dest
36         (cons char dest)
37       char)))
38
39 (defvar chise-tex-coded-charset-expression-alist
40   '((=ucs-bmp@gb        "UCSgb"         4 X)
41     (=ucs-bmp@jis       "UCSjis"        4 X)
42     (=ucs-bmp@ks        "UCSks"         4 X)
43     (=gt-pj-1           "GTpjA"         4 X)
44     (=gt-pj-2           "GTpjB"         4 X)
45     (=gt-pj-3           "GTpjC"         4 X)
46     (=gt-pj-4           "GTpjD"         4 X)
47     (=gt-pj-5           "GTpjE"         4 X)
48     (=gt-pj-6           "GTpjF"         4 X)
49     (=gt-pj-7           "GTpjG"         4 X)
50     (=gt-pj-8           "GTpjH"         4 X)
51     (=gt-pj-9           "GTpjI"         4 X)
52     (=gt-pj-10          "GTpjJ"         4 X)
53     (=gt-pj-11          "GTpjK"         4 X)
54     (=ruimoku-v6        "Ruimoku"       4 X)
55     (=hanziku-1         "HanzikuA"      4 X)
56     (=hanziku-2         "HanzikuB"      4 X)
57     (=hanziku-3         "HanzikuC"      4 X)
58     (=hanziku-4         "HanzikuD"      4 X)
59     (=hanziku-5         "HanzikuE"      4 X)
60     (=hanziku-6         "HanzikuF"      4 X)
61     (=hanziku-7         "HanzikuG"      4 X)
62     (=hanziku-8         "HanzikuH"      4 X)
63     (=hanziku-9         "HanzikuI"      4 X)
64     (=hanziku-10        "HanzikuJ"      4 X)
65     (=hanziku-11        "HanzikuK"      4 X)
66     (=hanziku-12        "HanzikuL"      4 X)
67     (=ucs-bmp@cns       "UCScns"        4 X)
68     (thai-tis620        "ThaiTIS"       2 X)
69     ))
70
71 (defvar chise-tex-accents-macro-alist
72   '((?\u0300 . "`") ; <COMBINING GRAVE ACCENT>
73     (?\u0301 . "'") ; <COMBINING ACUTE ACCENT>
74     (?\u0302 . "^") ; <COMBINING CIRCUMFLEX ACCENT>
75     ((?\u0302 ?\u0300) . "CircGrave")
76     ((?\u0302 ?\u0301) . ("\\'{\\^" . "}"))
77     ((?\u0302 ?\u0303) . ("\\~{\\^" . "}"))
78     ((?\u0302 ?\u0309) . "CircHook")
79     (?\u0303 . "~") ; <COMBINING TILDE>
80     (?\u0304 . "=") ; <COMBINING MACRON>
81     ((?\u0304 ?\u0301) . "textacutemacron")
82     (?\u0306 . "u") ; <COMBINING BREVE>
83     (?\u0307 . ".") ; <COMBINING DOT ABOVE>
84     (?\u0308 . "\"") ; <COMBINING DIAERESIS>
85     (?\u0309 . "Hook")
86     (?\u030B . "H") ; <COMBINING DOUBLE ACUTE ACCENT>
87     (?\u030C . "v") ; <COMBINING CARON>
88     ((?\u031B ?\u0301) . "HornAcute")
89     ((?\u031B ?\u0303) . "HornTilde")
90     (?\u0323 . "d") ; <COMBINING DOT BELOW>
91     ((?\u0323 ?\u0302) . "Circudot")
92     (?\u0327 . "c") ; <COMBINING CEDILLA>
93     (?\u0328 . "k") ; <COMBINING OGONEK>
94     (?\u032E . "ubreve")
95     (?\u0331 . "umacron")
96     ))
97
98 (defun chise-tex-encode-region-for-gb (start end)
99   (interactive "r")
100   (save-excursion
101     (save-restriction
102       (narrow-to-region start end)
103       (goto-char start)
104       (let (chr ret rest spec)
105         (while (and (skip-chars-forward "\x00-\xFF")
106                     (not (eobp)))
107           (setq chr (char-after))
108           (cond ((memq chr '(?\e$(O#@\e(B))
109                  (delete-char)
110                  (insert (format "\\UCSjis{%04X}"
111                                  (encode-char chr '=ucs@jis)))
112                  )
113                 ((and (setq ret (encode-char chr '=jis-x0208-1983))
114                       (< ret #x3021))
115                  (forward-char))
116                 ;; ((setq ret (encode-char chr '=jis-x0208-1990))
117                 ;;  (delete-char)
118                 ;;  (insert (decode-char '=jis-x0208-1983 ret)))
119                 ((and (encode-char chr '=ks-x1001)
120                       (setq ret (or (encode-char chr '=ucs@ks)
121                                     (char-ucs chr))))
122                  (delete-char)
123                  ;; (if (eq (char-before) ?\e$B!T\e(B)
124                  ;;     (insert " "))
125                  (insert (format "\\UCSks{%04X}" ret)))
126                 ((catch 'tag
127                    (setq rest chise-tex-coded-charset-expression-alist)
128                    (while (setq spec (car rest))
129                      (if (setq ret (encode-char chr (car spec)))
130                          (throw 'tag ret))
131                      (setq rest (cdr rest))))
132                  (delete-char)
133                  ;; (if (eq (char-before) ?\e$B!T\e(B)
134                  ;;     (insert " "))
135                  (insert (format (format "\\%s{%%0%d%s}"
136                                          (nth 1 spec)
137                                          (nth 2 spec)
138                                          (nth 3 spec))
139                                  ret)))
140                 (t
141                  (forward-char))))))))
142
143 (defun chise-tex-encode-ucs-char-at-point (&optional chr)
144   (unless chr
145     (setq chr (char-after)))
146   (let (ret rest spec)
147     (cond
148      ((and (encode-char chr '=ks-x1001)
149            (setq ret (or (encode-char chr '=ucs@ks)
150                          (char-ucs chr))))
151       (delete-char)
152       ;; (if (eq (char-before) ?\e$B!T\e(B)
153       ;;     (insert " "))
154       (insert (format "\\UCSks{%04X}" ret))
155       t)
156      ((setq ret (encode-char chr '=ucs-hangul))
157       (delete-char)
158       ;; (if (eq (char-before) ?\e$B!T\e(B)
159       ;;     (insert " "))
160       (insert (format "\\UCSks{%04X}" ret))
161       t)
162      ((eq chr ?\u00B2)
163       (delete-char)
164       (insert "$^2$")
165       t)
166      ((eq chr ?\u00B3)
167       (delete-char)
168       (insert "$^3$")
169       t)
170      ((eq chr ?\u00F8)
171       (delete-char)
172       (insert "\\o{}")
173       t)
174      ((eq chr ?\u0111)
175       (delete-char)
176       (insert "{\\usefont{T1}{pxr}{m}{n}\\dj}")
177       t)
178      ((eq chr ?\u0142)
179       (delete-char)
180       (insert "\\l{}")
181       t)
182      ((eq chr ?\u014B)
183       (delete-char)
184       (insert "{\\usefont{T1}{pxr}{m}{n}\\ng}")
185       t)
186      ((eq chr ?\u0250)
187       (delete-char)
188       (insert "\\textturna{}")
189       t)
190      ((eq chr ?\u0254)
191       (delete-char)
192       (insert "\\textopeno{}")
193       t)
194      ((eq chr ?\u0264)
195       (delete-char)
196       (insert "\\textramshorns{}")
197       t)
198      ((eq chr ?\u026F)
199       (delete-char)
200       (insert "\\textturnm{}")
201       t)
202      ((eq chr ?\u0282)
203       (delete-char)
204       (insert "{\\usefont{T1}{pxr}{m}{n}\\k{s}}")
205       t)
206      ((eq chr ?\u0294)
207       (delete-char)
208       ;; (insert "\\UCSjis{0294}")
209       (insert "\\textglotstop{}")
210       t)
211      ((eq chr ?\u2022)
212       (delete-char)
213       (insert "\\textbullet{}")
214       t)
215      ((eq chr ?\u2075)
216       (delete-char)
217       (insert "$^5$")
218       t)
219      ((eq chr ?\u2080)
220       (delete-char)
221       (insert "$_0$")
222       t)
223      ((eq chr ?\u2081)
224       (delete-char)
225       (insert "$_1$")
226       t)
227      ((eq chr ?\u2082)
228       (delete-char)
229       (insert "$_2$")
230       t)
231      ((eq chr ?\u2083)
232       (delete-char)
233       (insert "$_3$")
234       t)
235      ((eq chr ?\u2084)
236       (delete-char)
237       (insert "$_4$")
238       t)
239      ((eq chr ?\u2085)
240       (delete-char)
241       (insert "$_5$")
242       t)
243      ((eq chr ?\u2086)
244       (delete-char)
245       (insert "$_6$")
246       t)
247      ((eq chr ?\u2087)
248       (delete-char)
249       (insert "$_7$")
250       t)
251      ((eq chr ?\u2088)
252       (delete-char)
253       (insert "$_8$")
254       t)
255      ((eq chr ?\u2089)
256       (delete-char)
257       (insert "$_9$")
258       t)
259      ((eq chr ?\u208A)
260       (delete-char)
261       (insert "$_+$")
262       t)
263      ((eq chr ?\u208B)
264       (delete-char)
265       (insert "$_-$")
266       t)
267      ((eq chr ?\u208C)
268       (delete-char)
269       (insert "$_=$")
270       t)
271      ((eq chr ?\u208D)
272       (delete-char)
273       (insert "$_($")
274       t)
275      ((eq chr ?\u208E)
276       (delete-char)
277       (insert "$_)$")
278       t)
279      ((eq chr ?\u2637)
280       (delete-char)
281       (insert "\\UCSgb{2637}")
282       t)
283      ((eq (encode-char chr '=ucs@jis) #x8DBC)
284       (delete-char)
285       (insert "\\GTpjG{4933}")
286       t)
287      ((and (encode-char chr '=ucs@jp)
288            (setq ret (char-representative-of-domain chr 'gb))
289            (setq ret (encode-char ret '=ucs@gb))
290            (<= ret #xFFFF))
291       (delete-char)
292       ;; (if (eq (char-before) ?\e$B!T\e(B)
293       ;;     (insert " "))
294       (insert (format "\\UCSgb{%04X}" ret))
295       t)
296      ((catch 'tag
297         (setq rest chise-tex-coded-charset-expression-alist)
298         (while (setq spec (car rest))
299           (if (setq ret (encode-char chr (car spec)))
300               (throw 'tag ret))
301           (setq rest (cdr rest))))
302       (delete-char)
303       ;; (if (eq (char-before) ?\e$B!T\e(B)
304       ;;     (insert " "))
305       (insert (format (format "\\%s{%%0%d%s}"
306                               (nth 1 spec)
307                               (nth 2 spec)
308                               (nth 3 spec))
309                       ret))
310       t)
311      )))
312
313 (defun chise-tex-encode-region-for-jis (start end)
314   (interactive "r")
315   (save-excursion
316     (save-restriction
317       (narrow-to-region start end)
318       (goto-char start)
319       (let (chr ret
320                 ;; rest spec
321                 modifier base modifier-1)
322         (while (and (skip-chars-forward "\x00-\x7F")
323                     (not (eobp)))
324           (setq chr (char-after))
325           (cond ((encode-char chr '=jis-x0208-1983)
326                  (forward-char))
327                 ;; ((setq ret (encode-char chr '=jis-x0208-1990))
328                 ;;  (delete-char)
329                 ;;  (insert (decode-char '=jis-x0208-1983 ret)))
330                 ((and (not (eq (char-ucs chr) #x0439))
331                       (not (eq (char-ucs chr) #x0451))
332                       (setq ret (char-feature chr '=decomposition))
333                       (setq modifier (assq (nth 1 ret)
334                                            '((?\u0300 . "`")
335                                              (?\u0301 . "'")
336                                              (?\u0302 . "^")
337                                              (?\u0303 . "~")
338                                              (?\u0304 . "=")
339                                              (?\u0306 . "u")
340                                              (?\u0307 . ".")
341                                              (?\u0308 . "\"")
342                                              (?\u0309 . "Hook")
343                                              (?\u030C . "v")
344                                              (?\u0323 . "d")
345                                              (?\u0327 . "c")
346                                              ))))
347                  (delete-char)
348                  (setq base (car ret))
349                  (if (and (setq ret (char-feature base '=decomposition))
350                           (setq modifier-1
351                                 (assq (car modifier)
352                                       (cdr
353                                        (assq (nth 1 ret)
354                                              '((?\u0302
355                                                 (?\u0300 . "CircGrave")
356                                                 (?\u0301 . "CircAcute")
357                                                 (?\u0303 . "CircTilde")
358                                                 (?\u0309 . "CircHook")
359                                                 )
360                                                (?\u031B
361                                                 (?\u0301 . "HornAcute")
362                                                 )
363                                                (?\u0323
364                                                 (?\u0302 . "Circudot")
365                                                 )))))))
366                      (insert (format "\\%s{%c}" (cdr modifier-1) (car ret)))
367                    (insert (format "\\%s{%c}" (cdr modifier) base))))
368                 ((and (or (encode-char chr '=jis-x0213-1-2000)
369                           (encode-char chr '=jis-x0213-2-2000))
370                       (setq ret (or (encode-char chr '=ucs@jis/2000)
371                                     (encode-char chr '=ucs@jis/fw)))
372                       (<= ret #xFFFF))
373                  (delete-char)
374                  ;; (if (eq (char-before) ?\e$B!T\e(B)
375                  ;;     (insert " "))
376                  (insert (format "\\UCSjis{%04X}" ret)))
377                 ((chise-tex-encode-ucs-char-at-point chr))
378                 (t
379                  (forward-char))))))))
380
381 (defun chise-tex-encode-region-for-utf-8-jis (start end)
382   (interactive "r")
383   (save-excursion
384     (save-restriction
385       (narrow-to-region start end)
386       (goto-char start)
387       (let ((font-encoding 'T1)
388             chr ret
389             ;; rest spec
390             modifier base
391             ;; modifier-1
392             pos)
393         (while (and (skip-chars-forward "\x00-\x7F")
394                     (not (eobp)))
395           (setq chr (char-after))
396           (cond
397            ((and (setq ret (encode-char chr '=ucs))
398                  (and (<= #x0400 ret)(<= ret #x04F9)))
399             (if (eq font-encoding 'T2A)
400                 (forward-char)
401               (setq pos (point))
402               ;; (unless (and (prog1
403               ;;                  (search-backward
404               ;;                   "\\fontencoding{T2A}\\selectfont{}" nil t)
405               ;;                (goto-char pos))
406               ;;              (eq pos (match-end 0)))
407               ;;   (insert "\\fontencoding{T2A}\\selectfont{}")
408               ;;   )
409               (if (search-backward "\\CyrillicScript{"
410                                    (- pos (eval-when-compile
411                                             (length "\\CyrillicScript{")))
412                                    t)
413                   (search-forward "}" nil t)
414                 (insert "\\CyrillicScript{")
415                 (forward-char)
416                 (skip-chars-forward "---\u0400-\u04F9 ")
417                 (insert "}"))
418               ;; (setq font-encoding 'T2A)
419               )
420             )
421            ((and (setq ret (encode-char chr '=ucs))
422                  (and (<= #x0374 ret)(<= ret #x03F3)))
423             (if (eq font-encoding 'LGR)
424                 (forward-char)
425               (setq pos (point))
426               ;; (unless (and (prog1
427               ;;                  (search-backward
428               ;;                   "\\fontencoding{LGR}\\selectfont{}" nil t)
429               ;;                (goto-char pos))
430               ;;              (eq pos (match-end 0)))
431               ;;   (insert "\\fontencoding{LGR}\\selectfont{}")
432               ;;   )
433               (if (search-backward "\\GreekScript{"
434                                    (- pos (eval-when-compile
435                                             (length "\\GreekScript{")))
436                                    t)
437                   (search-forward "}" nil t)
438                 (insert "\\GreekScript{")
439                 (forward-char)
440                 (skip-chars-forward "\u0374-\u03F3 ")
441                 (insert "}"))
442               ;; (setq font-encoding 'LGR)
443               )
444             ;; (unless (eq font-encoding 'T1)
445             ;;   (unless (looking-at
446             ;;            "\\\\fontencoding{T1}\\\\selectfont{}")
447             ;;     (insert "\\fontencoding{T1}\\selectfont{}")
448             ;;     )
449             ;;   (setq font-encoding 'T1))
450             )
451            (t
452             (unless (eq font-encoding 'T1)
453               (setq pos (point))
454               (unless (and (prog1
455                                (search-backward
456                                 "\\fontencoding{T1}\\selectfont{}" nil t)
457                              (goto-char pos))
458                            (eq pos (match-end 0)))
459                 (insert "\\fontencoding{T1}\\selectfont{}")
460                 )
461               (setq font-encoding 'T1))
462             (cond ((eq (char-ucs chr) #x00D7)
463                    (delete-char)
464                    (insert "\\UCSjis{00D7}"))
465                   ((encode-char chr '=jis-x0208-1983)
466                    (forward-char))
467                   ((and (setq ret (char-ucs chr))
468                         (or (eq ret #x00C5)
469                             (eq ret #x00E5)
470                             (eq ret #x1E2B)
471                             ))
472                    (forward-char))
473                   ;; ((setq ret (encode-char chr '=jis-x0208-1990))
474                   ;;  (delete-char)
475                   ;;  (insert (decode-char '=jis-x0208-1983 ret)))
476                   ((eq (char-ucs chr) #x012B)
477                    (delete-char)
478                    (insert "\\={\\i}")
479                    )
480                   ((setq ret (encode-char chr 'thai-tis620))
481                    (delete-char)
482                    (insert (format "\\ThaiTIS{%X}" (logior ret #x80)))
483                    )
484                   ((and (not (eq (char-ucs chr) #x0439))
485                         (not (eq (char-ucs chr) #x0451))
486                         (listp (setq ret (decompose-char chr)))
487                         ;; (setq ret (char-feature chr '=decomposition))
488                         (setq modifier (cdr ret))
489                         ;; (setq modifier (assq (nth 1 ret)
490                         ;;                      chise-tex-accent-macro-alist))
491                         )
492                    ;; (delete-char)
493                    (setq base (car ret))
494                    (if (setq ret
495                              (if (cdr modifier)
496                                  (assoc modifier
497                                         chise-tex-accents-macro-alist)
498                                (assq (car modifier)
499                                      chise-tex-accents-macro-alist)))
500                        (progn
501                          (delete-char)
502                          (setq ret (cdr ret))
503                          (if (consp ret)
504                              (insert (format "%s%c%s"
505                                              (car ret) base (cdr ret)))
506                            (insert (format "\\%s{%c}" ret base))))
507                      (forward-char))
508                    ;; (if (and (setq ret (char-feature base '=decomposition))
509                    ;;          (setq modifier-1
510                    ;;                (assq
511                    ;;                 (car modifier)
512                    ;;                 (cdr
513                    ;;                  (assq
514                    ;;                   (nth 1 ret)
515                    ;;                   '((?\u0302
516                    ;;                      (?\u0300 . "\\CircGrave{%c}")
517                    ;;                      (?\u0301 . "\\'{\\^%c}")
518                    ;;                      (?\u0303 . "\\~{\\^%c}")
519                    ;;                      (?\u0309 . "\\CircHook{%c}")
520                    ;;                      )
521                    ;;                     (?\u0304 ; <COMBINING MACRON>
522                    ;;                      (?\u0301 ; <COMBINING ACUTE ACCENT>
523                    ;;                       . "\\textacutemacron{%c}")
524                    ;;                      )
525                    ;;                     (?\u031B
526                    ;;                      (?\u0301 . "\\HornAcute{%c}")
527                    ;;                      (?\u0303 . "\\HornTilde{%c}")
528                    ;;                      )
529                    ;;                     (?\u0323
530                    ;;                      (?\u0302 . "\\Circudot{%c}")
531                    ;;                      )))))))
532                    ;;     (insert (format (cdr modifier-1) (car ret)))
533                    ;;   (insert (format "\\%s{%c}" (cdr modifier) base)))
534                    )
535                   ((and (or (encode-char chr '=jis-x0213-1-2000)
536                             (encode-char chr '=jis-x0213-2-2000))
537                         (setq ret (or (encode-char chr '=ucs@jis/2000)
538                                       (encode-char chr '=ucs@jis/fw)))
539                         (<= ret #xFFFF))
540                    ;; (delete-char)
541                    ;; (if (eq (char-before) ?\e$B!T\e(B)
542                    ;;     (insert " "))
543                    ;; (insert (format "\\UCSjis{%04X}" ret))
544                    (forward-char))
545                   ((chise-tex-encode-ucs-char-at-point chr))
546                   (t
547                    (forward-char))))))))))
548
549 (defun chise-tex-decode-region (start end)
550   (interactive "r")
551   (save-excursion
552     (save-restriction
553       (narrow-to-region start end)
554       (goto-char start)
555       (let (macro code ret me rest spec)
556         (while (search-forward "\\={\\i}" nil t)
557           (replace-match "\e.D\eNo" t t))
558         (goto-char start)
559         (while (re-search-forward "\\\\\\(.\\){\\(.\\)}" nil t)
560           (when (and
561                  (setq macro
562                        (assq
563                         (aref (match-string 1) 0)
564                         '((?\` . ?\u0300) ; <COMBINING GRAVE ACCENT>
565                           (?\' . ?\u0301) ; <COMBINING ACUTE ACCENT>
566                           (?^  . ?\u0302) ; <COMBINING CIRCUMFLEX ACCENT>
567                           (?~  . ?\u0303) ; <COMBINING TILDE>
568                           (?=  . ?\u0304) ; <COMBINING MACRON>
569                           (?u  . ?\u0306) ; <COMBINING BREVE>
570                           (?\. . ?\u0307) ; <COMBINING DOT ABOVE>
571                           (?\" . ?\u0308) ; <COMBINING DIAERESIS>
572                           (?v  . ?\u030C) ; <COMBINING CARON>
573                           (?d  . ?\u0323) ; <COMBINING DOT BELOW>
574                           (?c  . ?\u0327) ; <COMBINING CEDILLA>
575                           )))
576                  (setq ret
577                        (cdr (assq (cdr macro)
578                                   (char-feature (aref (match-string 2) 0)
579                                                 'composition)))))
580             (delete-region (match-beginning 0)(match-end 0))
581             (insert ret)))
582         (goto-char start)
583         (while (re-search-forward "\\\\\\([a-zA-Z0-9]+\\){\\([0-9A-Fa-f]+\\)}"
584                                   nil t)
585           (setq macro (match-string 1)
586                 code (match-string 2)
587                 me (match-end 0))
588           (if (and (catch 'tag
589                      (setq rest chise-tex-coded-charset-expression-alist)
590                      (while (setq spec (car rest))
591                        (if (string= (nth 1 spec) macro)
592                            (throw 'tag spec))
593                        (setq rest (cdr rest))))
594                    (setq ret (decode-char (car spec)
595                                           (string-to-int
596                                            code
597                                            (if (eq (nth 3 spec) 'X)
598                                                16)))))
599               (progn
600                 (delete-region (match-beginning 0)(match-end 0))
601                 (insert ret))
602             (goto-char me)))))))
603
604 (make-coding-system
605  'iso-2022-jp-tex-gb 'iso2022
606  "ISO-2022-JP with TeX representation for GB fonts."
607  '(charset-g0 ascii
608    short t
609    seven t
610    ;; input-charset-conversion ((latin-jisx0201 ascii)
611    ;;                        (japanese-jisx0208-1978 japanese-jisx0208))
612    pre-write-conversion chise-tex-encode-region-for-gb
613    post-read-conversion chise-tex-decode-region
614    mnemonic "pTeX(GB)/7bit"
615    ))
616
617 (make-coding-system
618  'iso-2022-jp-tex-jis 'iso2022
619  "ISO-2022-JP with TeX representation for JIS fonts."
620  '(charset-g0 ascii
621    short t
622    seven t
623    ccs-priority-list (ascii
624                       =jis-x0208@1983 =jis-x0208@1978
625                       latin-jisx0201)
626    ;; output-charset-conversion ((=jis-x0208@1990 =jis-x0208@1983))
627    pre-write-conversion chise-tex-encode-region-for-jis
628    post-read-conversion chise-tex-decode-region
629    mnemonic "pTeX(JIS)/7bit"
630    ))
631
632 (make-coding-system
633  'utf-8-jp-tex 'utf-8
634  "Coding-system of UTF-8 for common glyphs used in Japan."
635  '(pre-write-conversion chise-tex-encode-region-for-utf-8-jis
636    post-read-conversion chise-tex-decode-region
637    charset-g0 =ucs@jp
638    charset-g1 =>ucs-jis
639    charset-g2 =>ucs
640    mnemonic "upTeX(JP)/UTF8"))
641
642
643 ;;; @ End.
644 ;;;
645
646 (provide 'chise-tex)
647
648 ;;; chise-tex.el ends here