1(in-package "SB!IMPL")
2
3;;; EUC-JP
4(declaim (inline ucs-to-eucjp eucjp-to-ucs
5                 mb-len-as-eucjp eucjp-continuation-byte-p))
6
7(defun ucs-to-eucjp (code)
8  (declare (optimize speed (safety 0))
9           (type fixnum code))
10  (if (<= code #x7F) code
11      (get-multibyte-mapper *ucs-to-eucjp-table* code)))
12
13(defun eucjp-to-ucs (code)
14  (declare (optimize speed (safety 0))
15           (type fixnum code))
16  (if (<= code #x7F) code
17      (get-multibyte-mapper *eucjp-to-ucs-table* code)))
18
19(defun mb-len-as-eucjp (code)
20  (declare (optimize speed (safety 0))
21           (type (unsigned-byte 8) code))
22  (cond ((< code #x80) 1)
23        ((or (= code #x8E) (<= #xA1 code #xFE)) 2)
24        ((= code #x8F) 3)))
25
26(defun eucjp-continuation-byte-p (code)
27  (declare (optimize speed (safety 0))
28           (type (unsigned-byte 8) code))
29  (<= #xA1 code #xFE))
30
31(eval-when (:compile-toplevel)
32  (sb!xc:proclaim '(muffle-conditions compiler-note)))
33(define-multibyte-encoding :euc-jp (:euc-jp :eucjp :|eucJP|)
34  ucs-to-eucjp eucjp-to-ucs mb-len-as-eucjp eucjp-continuation-byte-p)
35
36;;; Shift_JIS
37(declaim (inline ucs-to-sjis sjis-to-ucs
38                 mb-len-as-sjis sjis-continuation-byte-p))
39
40(defun ucs-to-sjis (code)
41  (declare (optimize speed (safety 0))
42           (type fixnum code))
43  (if (<= code #x7F) code
44      (get-multibyte-mapper *ucs-to-sjis-table* code)))
45
46(defun sjis-to-ucs (code)
47  (declare (optimize speed (safety 0))
48           (type fixnum code))
49  (if (<= code #x7F) code
50      (get-multibyte-mapper *sjis-to-ucs-table* code)))
51
52(defun mb-len-as-sjis (code)
53  (declare (optimize speed (safety 0))
54           (type (unsigned-byte 8) code))
55  (cond ((or (< code #x80) (<= #xA1 code #xDF)) 1)
56        ((or (<= #x81 code #x9F) (<= #xE0 code #xFC)) 2)))
57
58(defun sjis-continuation-byte-p (code)
59  (declare (optimize speed (safety 0))
60           (type (unsigned-byte 8) code))
61  (or (<= #x40 code #x7E) (<= #x80 code #xFC)))
62
63(define-multibyte-encoding :shift_jis (:shift_jis :sjis :|Shift_JIS| :cp932)
64  ucs-to-sjis sjis-to-ucs mb-len-as-sjis sjis-continuation-byte-p)
65