Show
Ignore:
Timestamp:
01/30/09 23:52:02 (16 years ago)
Author:
naoya_t
Message:
 
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/elisp/pdicv-mode/trunk/nt-bocu.el

    r67 r71  
    11;;; nt-bocu.el --- decode/encode BOCU-1 string (via utf-8, so requires Mule-UCS) 
    22;; 
    3 ;; Copyright (C) 2005 Naoya TOZUKA. All Rights Reserved. 
     3;; Copyright (C) 2005-2009 naoya_t. All Rights Reserved. 
    44;; 
    5 ;; Author: Naoya TOZUKA <pdicviewer@gmail.com> 
    6 ;; Maintainer: Naoya TOZUKA <pdicviewer@gmail.com> 
    7 ;; Primary distribution site: http://pdicviewer.naochan.com/el/ 
     5;; Author: naoya_t <naoya.t@aqua.plala.or.jp> 
     6;; Maintainer: naoya_t <naoya.t@aqua.plala.or.jp> 
     7;; Primary distribution site: 
     8;;   http://lambdarepos.svnrepository.com/svn/share/lang/elisp/pdicv-mode/trunk 
    89;; 
    910;; Created: 12 Feb 2005 
     
    3839   ((>= tr #x10) (- tr 10)) ;10 ... 19 >> 06 ... 0F 
    3940   (t (1- tr))              ;01 ... 06 >> 00 ... 05 
    40    ); cond 
    41   ) 
     41   )) 
     42 
    4243(defsubst nt:bocu-encode-trail-char (c) 
    4344  "[BOCU] encode trail char" 
     
    4748   ((>= c #x06) (+ c 10)) ;06 ... 0F >> 10 ... 19 
    4849   (t (1+ c))             ;00 ... 05 >> 01 ... 06 
    49    ); cond 
    50   ) 
     50   )) 
    5151 
    5252(defun nt:bocustr-to-rawcode-list (s) 
     
    6767                                        ; trail 1 
    6868             (setq tr (nt:bocu-decode-trail-char (aref s i)) i (1+ i)) 
    69              (setq diff (+ diff tr)) 
    70              ) 
     69             (setq diff (+ diff tr)) ) 
    7170            ((< lead #x25) ;22-24 (L T T) 
    7271             (setq diff (+ -10513 (* (- lead #x25) 243 243))) 
     
    7675                                        ; trail 1 
    7776             (setq tr (nt:bocu-decode-trail-char (aref s i)) i (1+ i)) 
    78              (setq diff (+ diff tr)) 
    79              ) 
     77             (setq diff (+ diff tr)) ) 
    8078            ((< lead #x50) ;25-4f (L T) 
    8179             (setq diff (+ -64 (* (- lead #x50) 243))) 
    8280                                        ; trail 1 
    8381             (setq tr (nt:bocu-decode-trail-char (aref s i)) i (1+ i)) 
    84              (setq diff (+ diff tr)) 
    85              ) 
     82             (setq diff (+ diff tr)) ) 
    8683            ((< lead #xd0) ;50-cf (L) 
    87              (setq diff (- lead #x90)) 
    88              ) 
     84             (setq diff (- lead #x90)) ) 
    8985            ((< lead #xfb) ;d0-fa (L T) 
    9086             (setq diff (+ 64 (* (- lead #xd0) 243))) 
    9187                                        ; trail 1 
    9288             (setq tr (nt:bocu-decode-trail-char (aref s i)) i (1+ i)) 
    93              (setq diff (+ diff tr)) 
    94              ) 
     89             (setq diff (+ diff tr)) ) 
    9590            ((< lead #xfe) ;fb-fd (L T T) 
    9691             (setq diff (+ 10513 (* (- lead #xfb) 243 243))) 
     
    10095                                        ; trail 1 
    10196             (setq tr (nt:bocu-decode-trail-char (aref s i)) i (1+ i)) 
    102              (setq diff (+ diff tr)) 
    103              ) 
     97             (setq diff (+ diff tr)) ) 
    10498            ((= lead #xfe) ;fe    (L T T T) 
    10599             (setq diff 187660) 
     
    112106                                        ; trail 1 
    113107             (setq tr (nt:bocu-decode-trail-char (aref s i)) i (1+ i)) 
    114              (setq diff (+ diff tr)) 
    115              ) 
    116             ((= lead #xff) ; reset 
    117              ) 
    118             ); end of cond. 
     108             (setq diff (+ diff tr)) ) 
     109            ((= lead #xff) )) ; reset 
    119110 
    120111      (cond 
     
    122113        (push lead l) 
    123114                                        ;       (setq r (concat r (string lead))) 
    124         (if (< lead #x20) (setq pc #x40)) ;#x20�ʤ餽�Τޤ�        ) 
    125        ((< lead #xff) 
     115        (if (< lead #x20) (setq pc #x40)) ) ;#x20�ʤ餽�Τޤ�       ((< lead #xff) 
    126116        (progn 
    127117          (setq code (+ pc diff)) 
    128118          (if (< code 0) (setq code 0));; error recovery 
    129  
    130119          (push code l) 
    131120                                        ;         (setq r (concat r (if (> code 0) (code-to-utf8 code) "?"))) 
     
    140129                    )); pc 
    141130          )) 
    142        (t (setq pc #x40)); #xFF: reset 
    143        ) 
    144       ); wend 
    145     (nreverse l) 
    146     ); let 
    147   ) 
     131       (t (setq pc #x40)) )); #xFF: reset 
     132    (nreverse l) )) 
    148133 
    149134(defun nt:diff-to-bocustr (diff) 
     
    160145          (setq t1 (% diff 243)) (setq diff (/ diff 243)) 
    161146                                        ;(setq t0 diff) 
    162           (string #x21 (nt:bocu-encode-trail-char t1) (nt:bocu-encode-trail-char t2) (nt:bocu-encode-trail-char t3)) 
    163           ) 
    164         ) 
     147          (string #x21 (nt:bocu-encode-trail-char t1) (nt:bocu-encode-trail-char t2) (nt:bocu-encode-trail-char t3)) )) 
    165148       ((< diff -10513)   ; [-187660,-10513) : 22-24 
    166149        (progn 
     
    169152          (setq t1 (% diff 243)) (setq diff (/ diff 243)) 
    170153          (setq t0 diff) 
    171           (string (+ #x22 t0) (nt:bocu-encode-trail-char t1) (nt:bocu-encode-trail-char t2)) 
    172           ) 
    173         ) 
     154          (string (+ #x22 t0) (nt:bocu-encode-trail-char t1) (nt:bocu-encode-trail-char t2)) )) 
    174155       ((< diff -64)      ; [-10513,-64) : 25-4F 
    175156        (progn 
     
    177158          (setq t1 (% diff 243)) (setq diff (/ diff 243)) 
    178159          (setq t0 diff) 
    179           (string (+ #x25 t0) (nt:bocu-encode-trail-char t1)) 
    180           ) 
    181         ) 
     160          (string (+ #x25 t0) (nt:bocu-encode-trail-char t1)) )) 
    182161       ((< diff 64)       ; [-64,63) : 50-CF 
    183162        (progn 
    184163          (setq diff (- diff -64)) 
    185164          (setq t0 diff) 
    186           (string (+ #x50 t0)) 
    187           ) 
    188         ) 
     165          (string (+ #x50 t0)) )) 
    189166       ((< diff 10513)    ; [64,10513) : D0-FA 
    190167        (progn 
     
    192169          (setq t1 (% diff 243)) (setq diff (/ diff 243)) 
    193170          (setq t0 diff) 
    194           (string (+ #xD0 t0) (nt:bocu-encode-trail-char t1)) 
    195           ) 
    196         ) 
     171          (string (+ #xD0 t0) (nt:bocu-encode-trail-char t1)) )) 
    197172       ((< diff 187660)   ; [10513,187660) : FB-FD 
    198173        (progn 
     
    201176          (setq t1 (% diff 243)) (setq diff (/ diff 243)) 
    202177          (setq t0 diff) 
    203           (string (+ #xFB t0) (nt:bocu-encode-trail-char t1) (nt:bocu-encode-trail-char t2)) 
    204           ) 
    205         ) 
     178          (string (+ #xFB t0) (nt:bocu-encode-trail-char t1) (nt:bocu-encode-trail-char t2)) )) 
    206179       ((< diff 14536567) ; [187660,14536567) : FE 
    207180        (progn 
     
    211184          (setq t1 (% diff 243)) (setq diff (/ diff 243)) 
    212185                                        ;(setq t0 diff) 
    213           (string #xFE (nt:bocu-encode-trail-char t1) (nt:bocu-encode-trail-char t2) (nt:bocu-encode-trail-char t3)) 
    214           ) 
    215         ) 
    216        (t (throw 'bocu-encode-diff 'overflow-exception)) 
    217        ); cond 
    218       ); let 
    219     ); caught 
    220   ) 
     186          (string #xFE (nt:bocu-encode-trail-char t1) (nt:bocu-encode-trail-char t2) (nt:bocu-encode-trail-char t3)) )) 
     187       (t (throw 'bocu-encode-diff 'overflow-exception)) )))) 
    221188 
    222189(defun nt:rawcode-list-to-bocustr (l) ; not tested much 
     
    234201                  ((and (<= #x4E00 code) (<= code #x9FA5)) #x7711) 
    235202                  ((and (<= #xAC00 code) (<= code #xD7A3)) #xC1D1) 
    236                   (t (+ (logand code #xffff80) #x40)))) 
    237         ); let* 
    238       ); wend 
    239     s 
    240     ); let* 
    241   ) 
     203                  (t (+ (logand code #xffff80) #x40)))) )) 
     204    s)) 
    242205 
    243206(defsubst nt:bocu-decode (s) 
     
    245208  (let* ((rawcode-list (nt:bocustr-to-rawcode-list s)) 
    246209         (utf8str (nt:rawcode-list-to-utf8str rawcode-list))) 
    247     (decode-coding-string utf8str 'utf-8) 
    248     ) 
    249   ) 
     210    (decode-coding-string utf8str 'utf-8) )) 
    250211 
    251212(defsubst nt:bocu-encode (s) 
     
    253214  (let* ((utf8str (encode-coding-string s 'utf-8)) 
    254215         (rawcode-list (nt:utf8str-to-rawcode-list utf8str)) 
    255          (bocustr (nt:rawcode-list-to-bocustr rawcode-list)) 
    256          ) 
    257     bocustr 
    258     ) 
    259   ) 
     216         (bocustr (nt:rawcode-list-to-bocustr rawcode-list))) 
     217    bocustr)) 
    260218 
    261219;;; nt-bocu.el ends here