fdd1c37112fcb8f23320cecf268978b3885495e1
[elisp/tm.git] / tm-nemacs.el
1 ;;;
2 ;;; $Id: tm-nemacs.el,v 4.4 1994/08/01 05:09:00 morioka Exp $
3 ;;;
4
5 (provide 'tm-nemacs)
6
7 (require 'tl-18)
8
9 ;;; @ constants
10 ;;;
11 (defconst *junet* 2)
12 (defconst *internal* 3)
13 (defconst *euc-japan* 3)
14
15 (defconst lc-ascii 0)
16 (defconst lc-jp  146)
17
18
19 ;;; @ variables
20 ;;;
21
22 (defvar mime/lc-charset-and-encoding-alist
23   (list
24    (cons lc-ascii nil)
25    (cons lc-jp   '("ISO-2022-JP" . "B"))
26    ))
27
28 (defvar mime/latin-lc-list
29   (list lc-ascii))
30
31 (defun mime/char-leading-char (chr)
32   (if (< chr 128)
33       lc-ascii
34     lc-jp))
35
36 ;; by mol. 1993/9/26
37 (defun string-width (str)
38   "Return number of columns STRING will occupy.
39  [Mule compatible function in tm-nemacs]"
40   (length str))
41
42 (defun char-bytes (chr)
43   "Return number of bytes CHAR will occupy in a buffer.
44  [Mule compatible function in tm-nemacs]"
45   (if (< chr 128) 1 2))
46
47 (defun char-width (chr)
48   "Return number of columns CHAR will occupy when displayed.
49  [Mule compatible function in tm-nemacs]"
50   (if (< chr 128) 1 2))
51
52 (defun code-convert-string (str ic oc)
53   "Convert code in STRING from SOURCE code to TARGET code,
54 On successful converion, returns the result string,
55 else returns nil. [Mule compatible function in tm-nemacs]"
56   (if (not (eq ic oc))
57       (convert-string-kanji-code str ic oc)
58     str))
59
60 (defun check-ASCII-string (str)
61   (let ((i 0)
62         len)
63     (setq len (length str))
64     (catch 'label
65       (while (< i len)
66         (if (>= (elt str i) 128)
67             (throw 'label nil))
68         (setq i (+ i 1))
69         )
70       str)))
71        
72 ;; by mol. 1993/10/4
73 (defun mime/convert-string-to-emacs (charset str)
74   (cond ((string-match "^ISO-2022-JP$" charset)
75          (convert-string-kanji-code str 2 3))
76         ((string-match "^US-ASCII$" charset) str)
77         ((string-match "^ISO-8859-[1-9]$" charset)
78          (check-ASCII-string str))
79         (t nil)
80         ))
81
82 ;; by mol. 1993/11/2
83 (defun mime/convert-string-from-emacs (string charset)
84   (cond ((equal charset "ISO-2022-JP")
85          (code-convert-string string *internal* *junet*))
86         ((equal charset "US-ASCII") string)
87         (t nil)
88         ))
89
90 ;; by mol. 1993/10/4
91 (defun mime/decode-encoded-text (charset encoding str)
92   (let ((ds (mime/convert-string-to-emacs
93              charset
94              (cond ((string-match "^B$" encoding)
95                     (mime/base64-decode-string str))
96                    ((string-match "^Q$" encoding)
97                     (mime/Quoted-Printable-decode-string str))
98                    (t
99                     (message "unknown encoding %s" encoding)
100                     (concat "=?" charset "?" encoding "?" str "?=")
101                     )))))
102     (if ds
103         ds
104       (concat "=?" charset "?" encoding "?" str "?="))
105     ))