X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fbase64.el;h=0eec5f4310cc367b85c75f91899ea6e88a30688d;hb=a526b7eba49c81420c8caed38c3bafe0e20cdecb;hp=88493c62a1b7df3ea76a89df66d65eb353f2256f;hpb=517d8c1e72ed898204ef80597cda8084746d52c3;p=elisp%2Fgnus.git- diff --git a/lisp/base64.el b/lisp/base64.el index 88493c6..0eec5f4 100644 --- a/lisp/base64.el +++ b/lisp/base64.el @@ -73,9 +73,13 @@ base64-encoder-program.") (setq p (cdr p))) v)) +(defvar base64-binary-coding-system 'binary) + (defun base64-run-command-on-region (start end output-buffer command &rest arg-list) - (let ((tempfile nil) status errstring) + (let ((tempfile nil) status errstring default-process-coding-system + (coding-system-for-write base64-binary-coding-system) + (coding-system-for-read base64-binary-coding-system)) (unwind-protect (progn (setq tempfile (make-temp-name "base64")) @@ -94,29 +98,21 @@ base64-encoder-program.") (setq errstring (buffer-string)) (kill-buffer nil) (cons status errstring))))) - (condition-case () - (delete-file tempfile) - (error nil))))) - -(defun base64-insert-char (char &optional count ignored buffer) - (condition-case nil - (progn - (insert-char char count ignored buffer) - (fset 'base64-insert-char 'insert-char)) - (wrong-number-of-arguments - (fset 'base64-insert-char 'base64-xemacs-insert-char) - (base64-insert-char char count ignored buffer)))) + (ignore-errors + (delete-file tempfile))))) -(defun base64-xemacs-insert-char (char &optional count ignored buffer) - (if (and buffer (eq buffer (current-buffer))) - (insert-char char count) - (save-excursion - (set-buffer buffer) - (insert-char char count)))) +(if (string-match "XEmacs" emacs-version) + (defalias 'base64-insert-char 'insert-char) + (defun base64-insert-char (char &optional count ignored buffer) + (if (or (null buffer) (eq buffer (current-buffer))) + (insert-char char count) + (with-current-buffer buffer + (insert-char char count)))) + (setq base64-binary-coding-system 'no-conversion)) (defun base64-decode-region (start end) (interactive "r") - (message "Decoding base64...") + ;;(message "Decoding base64...") (let ((work-buffer nil) (done nil) (counter 0) @@ -143,7 +139,7 @@ base64-encoder-program.") ((> (skip-chars-forward base64-alphabet end) 0) (setq lim (point)) (while (< inputpos lim) - (setq bits (+ bits + (setq bits (+ bits (aref base64-alphabet-decoding-vector (char-int (char-after inputpos))))) (setq counter (1+ counter) @@ -162,7 +158,7 @@ base64-encoder-program.") (error "at least %d bits missing at end of base64 encoding" (* (- 4 counter) 6))) (setq done t)) - ((= (char-after (point)) ?=) + ((eq (char-after (point)) ?=) (setq done t) (cond ((= counter 1) (error "at least 2 bits missing at end of base64 encoding")) @@ -179,9 +175,10 @@ base64-encoder-program.") (insert-buffer-substring work-buffer) (delete-region (point) end)) (and work-buffer (kill-buffer work-buffer)))) - (message "Decoding base64... done")) + ;;(message "Decoding base64... done") + ) -(defun base64-encode-region (start end) +(defun base64-encode-region (start end &optional no-line-break) (interactive "r") (message "Encoding base64...") (let ((work-buffer nil) @@ -218,7 +215,8 @@ base64-encoder-program.") (aref alphabet (logand bits 63)) 1 nil work-buffer) (setq cols (+ cols 4)) - (cond ((= cols 72) + (cond ((and (= cols 72) + (not no-line-break)) (base64-insert-char ?\n 1 nil work-buffer) (setq cols 0))) (setq bits 0 counter 0)) @@ -237,11 +235,9 @@ base64-encoder-program.") (base64-insert-char (aref alphabet (logand (lsh bits -6) 63)) 1 nil work-buffer) (base64-insert-char ?= 1 nil work-buffer))) - ;;;!!! LMI removed this, because he didn't like having - ;;;!!! newlines added to the end of the encoding. - ;;(if (> cols 0) - ;; (base64-insert-char ?\n 1 nil work-buffer)) - ) + (if (and (> cols 0) + (not no-line-break)) + (base64-insert-char ?\n 1 nil work-buffer))) (or (markerp end) (setq end (set-marker (make-marker) end))) (goto-char start) (insert-buffer-substring work-buffer) @@ -272,6 +268,8 @@ base64-encoder-program.") (delete-region (point-max) (point)) (prog1 (buffer-string) - (kill-buffer (current-buffer))))) + (kill-buffer (current-buffer))))) + +(fset 'base64-decode-string 'base64-decode) (provide 'base64)