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