X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=ew-bq.el;h=ae6cd420ed256ab02f84d8719e45672cecd6ac17;hb=e3747e8f4ecbf39d106d117fb494506089cc5c2a;hp=945603a376e52be8006545d1749b2ae82f01ed30;hpb=56e5158b6736b10f1dc239fd6edf508343d9470b;p=elisp%2Fflim.git diff --git a/ew-bq.el b/ew-bq.el index 945603a..ae6cd42 100644 --- a/ew-bq.el +++ b/ew-bq.el @@ -78,38 +78,22 @@ (append "!*+-/0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" ())) (defconst ew-ccl-256-to-64-table - '(nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil 62 nil nil nil 63 - 52 53 54 55 56 57 58 59 - 60 61 nil nil nil t nil nil - nil 0 1 2 3 4 5 6 - 7 8 9 10 11 12 13 14 - 15 16 17 18 19 20 21 22 - 23 24 25 nil nil nil nil nil - nil 26 27 28 29 30 31 32 - 33 34 35 36 37 38 39 40 - 41 42 43 44 45 46 47 48 - 49 50 51 nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil - nil nil nil nil nil nil nil nil)) + '(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil 62 nil nil nil 63 + 52 53 54 55 56 57 58 59 60 61 nil nil nil t nil nil + nil 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + 15 16 17 18 19 20 21 22 23 24 25 nil nil nil nil nil + nil 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 + 41 42 43 44 45 46 47 48 49 50 51 nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)) (defconst ew-ccl-64-to-256-table '(?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P @@ -161,7 +145,7 @@ (define-ccl-program ew-ccl-encode-uq (eval-when-compile - `(1 + `(3 (loop (loop (read-branch @@ -180,7 +164,7 @@ (define-ccl-program ew-ccl-encode-cq (eval-when-compile - `(1 + `(3 (loop (loop (read-branch @@ -199,7 +183,7 @@ (define-ccl-program ew-ccl-encode-pq (eval-when-compile - `(1 + `(3 (loop (loop (read-branch @@ -333,18 +317,92 @@ ;;; -(make-coding-system 'ew-ccl-uq 4 ?Q "Q-encoding in unstructured field" +;; ew-ccl-encode-base64 does not works on 20.2 by same reason of ew-ccl-encode-b +(define-ccl-program ew-ccl-encode-base64 + (eval-when-compile + `(2 + ((r3 = 0) + (loop + (r2 = 0) + (read-branch + r1 + ,@(mapcar + (lambda (r1) + `((write ,(nth (lsh r1 -2) ew-ccl-64-to-256-table)) + (r0 = ,(logand r1 3)))) + ew-ccl-256-table)) + (r2 = 1) + (read-branch + r1 + ,@(mapcar + (lambda (r1) + `((write r0 ,(vconcat + (mapcar + (lambda (r0) + (nth (logior (lsh r0 4) + (lsh r1 -4)) + ew-ccl-64-to-256-table)) + ew-ccl-4-table))) + (r0 = ,(logand r1 15)))) + ew-ccl-256-table)) + (r2 = 2) + (read-branch + r1 + ,@(mapcar + (lambda (r1) + `((write r0 ,(vconcat + (mapcar + (lambda (r0) + (nth (logior (lsh r0 2) + (lsh r1 -6)) + ew-ccl-64-to-256-table)) + ew-ccl-16-table))))) + ew-ccl-256-table)) + (r1 &= 63) + (write r1 ,(vconcat + (mapcar + (lambda (r1) + (nth r1 ew-ccl-64-to-256-table)) + ew-ccl-64-table))) + (r3 += 1) + (if (r3 == 19) ; 4 * 19 = 76 --> line break. + ((write "\r\n") + (r3 = 0))) + (repeat))) + (branch + r2 + (if (r0 > 0) (write "\r\n")) + ((write r0 ,(vconcat + (mapcar + (lambda (r0) + (nth (lsh r0 4) ew-ccl-64-to-256-table)) + ew-ccl-4-table))) + (write "==\r\n")) + ((write r0 ,(vconcat + (mapcar + (lambda (r0) + (nth (lsh r0 2) ew-ccl-64-to-256-table)) + ew-ccl-16-table))) + (write "=\r\n"))) + ))) + +;;; + +(make-coding-system 'ew-ccl-uq 4 ?Q "MIME Q-encoding in unstructured field" (cons ew-ccl-decode-q ew-ccl-encode-uq)) -(make-coding-system 'ew-ccl-cq 4 ?Q "Q-encoding in comment" +(make-coding-system 'ew-ccl-cq 4 ?Q "MIME Q-encoding in comment" (cons ew-ccl-decode-q ew-ccl-encode-cq)) -(make-coding-system 'ew-ccl-pq 4 ?Q "Q-encoding in phrase" +(make-coding-system 'ew-ccl-pq 4 ?Q "MIME Q-encoding in phrase" (cons ew-ccl-decode-q ew-ccl-encode-pq)) -(make-coding-system 'ew-ccl-b 4 ?B "B-encoding" +(make-coding-system 'ew-ccl-b 4 ?B "MIME B-encoding" (cons ew-ccl-decode-b ew-ccl-encode-b)) +(make-coding-system 'ew-ccl-base64 4 ?B "MIME Base64-encoding" + (cons ew-ccl-decode-b ew-ccl-encode-base64)) + ;;; (eval-and-compile