X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mel-b-el.el;h=29372380c9544b9875b4e58c9a426f12040cbbf3;hb=70a973dccff22658ea821245190216fe2f55a1fe;hp=076f2f6fe37c456413d05afa37a7af3f64497646;hpb=e8b4d182275a38437111e94a864f568dece6ef28;p=elisp%2Fflim.git diff --git a/mel-b-el.el b/mel-b-el.el index 076f2f6..2937238 100644 --- a/mel-b-el.el +++ b/mel-b-el.el @@ -1,9 +1,9 @@ ;;; mel-b-el.el --- Base64 encoder/decoder. -;; Copyright (C) 1992,1995,1996,1997,1998 Free Software Foundation, Inc. +;; Copyright (C) 1992,1995,1996,1997,1998,1999 Free Software Foundation, Inc. ;; Author: ENAMI Tsugutomo -;; MORIOKA Tomohiko +;; MORIOKA Tomohiko ;; Created: 1995/6/24 ;; Keywords: MIME, Base64 @@ -123,8 +123,10 @@ external decoder is called." (ash (logand (car pack) 3) 4)))) buf)) -(defun-maybe base64-encode-string (string) - "Encode STRING to base64, and return the result." +(defun-maybe base64-encode-string (string &optional no-line-break) + "Base64-encode STRING and return the result. +Optional second argument NO-LINE-BREAK means do not break long lines +into shorter lines." (let* ((len (length string)) (b 0)(e 57) (dest "")) @@ -135,7 +137,7 @@ external decoder is called." (function base64-encode-1) (pack-sequence (substring string b e) 3) "") - "\n")) + (if (not no-line-break) "\n"))) (setq b e e (+ e 57))) (concat dest @@ -144,16 +146,14 @@ external decoder is called." (pack-sequence (substring string b) 3) "")))) -(defun base64-internal-encode-region (beg end) +(defun base64-internal-encode-region (beg end &optional no-line-break) (save-excursion (save-restriction (narrow-to-region beg end) (insert (prog1 - (base64-encode-string - (buffer-substring beg end)) - (delete-region beg end))) - (or (bolp) (insert ?\n))))) + (base64-encode-string (buffer-substring beg end) no-line-break) + (delete-region beg end)))))) ;;; @ internal base64 decoder @@ -231,7 +231,7 @@ external decoder is called." ;;; @ external encoder/decoder ;;; -(defun base64-external-encode-region (beg end) +(defun base64-external-encode-region (beg end &optional no-line-break) (save-excursion (save-restriction (narrow-to-region beg end) @@ -244,7 +244,12 @@ external decoder is called." ;; regularize line break code (goto-char (point-min)) (while (re-search-forward "\r$" nil t) - (replace-match ""))))) + (replace-match "")) + (if no-line-break + (progn + (goto-char (point-min)) + (while (search-forward "\n" nil t) + (replace-match ""))))))) (defun base64-external-decode-region (beg end) (save-excursion @@ -268,9 +273,11 @@ external decoder is called." ;;; @ application interfaces ;;; -(defun-maybe base64-encode-region (start end) - "Encode current region by base64. -START and END are buffer positions. +(defun-maybe base64-encode-region (start end &optional no-line-break) + "Base64-encode the region between START and END. +Return the length of the encoded text. +Optional third argument NO-LINE-BREAK means do not break long lines +into shorter lines. This function calls internal base64 encoder if size of region is smaller than `base64-internal-encoding-limit', otherwise it calls external base64 encoder specified by `base64-external-encoder'. In @@ -279,8 +286,8 @@ metamail or XEmacs package)." (interactive "*r") (if (and base64-internal-encoding-limit (> (- end start) base64-internal-encoding-limit)) - (base64-external-encode-region start end) - (base64-internal-encode-region start end))) + (base64-external-encode-region start end no-line-break) + (base64-internal-encode-region start end no-line-break))) (defun-maybe base64-decode-region (start end) "Decode current region by base64. @@ -374,7 +381,7 @@ START and END are buffer positions." (mime-write-decoded-region start end filename (nil "base64")) 'base64-write-decoded-region) - + ;;; @ end ;;;