mel of MEL 3.2.
[elisp/flim.git] / mel-q.el
index ca11faf..36f2d2f 100644 (file)
--- a/mel-q.el
+++ b/mel-q.el
@@ -1,5 +1,5 @@
 ;;;
-;;; $Id: mel-q.el,v 1.5 1995/06/26 05:56:39 morioka Exp $
+;;; $Id: mel-q.el,v 3.0 1995/11/02 03:48:01 morioka Exp $
 ;;;
 
 ;;; @ constants
@@ -48,10 +48,13 @@ external decoder is called.")
   (let ((i 0))
     (mapconcat (function
                (lambda (chr)
-                 (cond ((or (< chr 32) (< 126 chr) (eq chr ?=))
+                 (cond ((eq chr ?\n)
+                        (setq i 0)
+                        "\n")
+                       ((or (< chr 32) (< 126 chr) (eq chr ?=))
                         (if (>= i 73)
                             (progn
-                              (setq i 0)
+                              (setq i 3)
                               (concat "=\n" (quoted-printable-quote-char chr))
                               )
                           (progn
@@ -60,7 +63,7 @@ external decoder is called.")
                             )))
                        (t (if (>= i 75)
                               (progn
-                                (setq i 0)
+                                (setq i 1)
                                 (concat "=\n" (char-to-string chr))
                                 )
                             (progn
@@ -105,13 +108,14 @@ external decoder is called.")
   (save-excursion
     (save-restriction
       (narrow-to-region beg end)
-      (goto-char (point-min))
-      (while (re-search-forward "^.*$" nil t)
-       (replace-match
-        (quoted-printable-encode-string
-         (buffer-substring (match-beginning 0)(match-end 0))
-         ))
-       ))))
+      (let ((str (buffer-substring beg end)))
+       (delete-region beg end)
+       (insert (quoted-printable-encode-string str))
+       )
+      (or (bolp)
+         (insert "=\n")
+         )
+      )))
 
 (defun quoted-printable-internal-decode-region (beg end)
   (save-excursion
@@ -127,7 +131,8 @@ external decoder is called.")
          (setq b (match-beginning 0))
          (setq e (match-end 0))
          (setq str (buffer-substring b e))
-         (replace-match (quoted-printable-decode-string str))
+         (delete-region b e)
+         (insert (quoted-printable-decode-string str))
          ))
       )))
 
@@ -146,17 +151,32 @@ external decoder is called.")
 
 (defun quoted-printable-external-encode-region (beg end)
   (save-excursion
-    (apply (function call-process-region)
-          beg end (car quoted-printable-external-encoder)
-          t t nil (cdr quoted-printable-external-encoder))
-    ))
+    (save-restriction
+      (narrow-to-region beg end)
+      (let ((selective-display nil) ;Disable ^M to nl translation.
+           (mc-flag nil)      ;Mule
+           (kanji-flag nil))  ;NEmacs
+       (apply (function call-process-region)
+              beg end (car quoted-printable-external-encoder)
+              t t nil (cdr quoted-printable-external-encoder))
+       )
+      ;; for OS/2
+      ;;   regularize line break code
+      (goto-char (point-min))
+      (while (re-search-forward "\r$" nil t)
+       (replace-match "")
+       )
+      )))
 
 (defun quoted-printable-external-decode-region (beg end)
   (save-excursion
-    (apply (function call-process-region)
-          beg end (car quoted-printable-external-decoder)
-          t t nil (cdr quoted-printable-external-decoder))
-    ))
+    (let ((selective-display nil) ;Disable ^M to nl translation.
+         (mc-flag nil)      ;Mule
+         (kanji-flag nil))  ;NEmacs
+      (apply (function call-process-region)
+            beg end (car quoted-printable-external-decoder)
+            t t nil (cdr quoted-printable-external-decoder))
+      )))
 
 (defun quoted-printable-encode-region (beg end)
   (interactive "r")
@@ -205,7 +225,8 @@ external decoder is called.")
 (defun q-encoding-encode-string-for-phrase (str)
   (mapconcat (function
              (lambda (chr)
-               (cond ((or (and (<= ?A chr)(<= chr ?Z))
+               (cond ((eq chr 32) "_")
+                     ((or (and (<= ?A chr)(<= chr ?Z))
                           (and (<= ?a chr)(<= chr ?z))
                           (and (<= ?0 chr)(<= chr ?9))
                           (memq chr '(?! ?* ?+ ?- ?/))
@@ -223,11 +244,9 @@ external decoder is called.")
        ((eq mode 'comment)
         (q-encoding-encode-string-for-comment str)
         )
-       ((eq mode 'phrase)
+       (t
         (q-encoding-encode-string-for-phrase str)
-        )
-       (t (quoted-printable-encode-string str))
-       ))
+        )))
 
 (defun q-encoding-decode-string (str)
   (let (q h l)
@@ -275,4 +294,4 @@ external decoder is called.")
 ;;; @ end
 ;;;
 
-(provide 'qprint)
+(provide 'mel-q)