]> git.eshelyaron.com Git - emacs.git/commitdiff
* woman.el (woman-strings): Fix double-quote handling.
authorKevin Ryde <user42@zip.com.au>
Sat, 7 Jul 2012 10:06:38 +0000 (18:06 +0800)
committerChong Yidong <cyd@gnu.org>
Sat, 7 Jul 2012 10:06:38 +0000 (18:06 +0800)
(woman-decode-region): Replace escaped-escapes without destroying
bold or underline.

Fixes: debbugs:1151
lisp/ChangeLog
lisp/woman.el

index 6491025648f9694eccfe0835db17921c0961bc7e..1dc857d134af177843771e6ee75a1cf7c34b5fd2 100644 (file)
@@ -1,3 +1,9 @@
+2012-07-07  Kevin Ryde <user42@zip.com.au>
+
+       * woman.el (woman-strings): Fix double-quote handling (Bug#1151).
+       (woman-decode-region): Replace escaped-escapes without destroying
+       bold or underline (Bug#11552).
+
 2012-07-07  Chong Yidong  <cyd@gnu.org>
 
        * simple.el (yank-pop-change-selection): Doc fix (Bug#11361).
index e220cd8062cd272d959bf7e77b0190578cf78ebf..4767b062335000a4d484d422485f9bbb75b4cd76 100644 (file)
@@ -2385,20 +2385,20 @@ Currently set only from '\" t in the first line of the source file.")
     (if woman-negative-vertical-space
        (woman-negative-vertical-space from))
 
-    (if woman-preserve-ascii
-       ;; Re-instate escaped escapes to just `\' and unpaddable
-       ;; spaces to just `space', without inheriting any text
-       ;; properties.  This is not necessary, UNLESS the buffer is to
-       ;; be saved as ASCII.
-       (progn
-         (goto-char from)
-         (while (search-forward woman-escaped-escape-string nil t)
-           (delete-char -1)
-           (insert ?\\))
-         (goto-char from)
-         (while (search-forward woman-unpadded-space-string nil t)
-           (delete-char -1)
-           (insert ?\s))))
+    (when woman-preserve-ascii
+      ;; Re-instate escaped escapes to just `\' and unpaddable spaces
+      ;; to just `space'.  This is not necessary for display since
+      ;; there are display table entries for the escaped chars, but it
+      ;; is necessary if the buffer might be saved as ASCII.
+      ;;
+      ;; `subst-char-in-region' preserves text properties on the
+      ;; characters, which is necessary for bold, underline, etc on
+      ;; \e.  There's usually no face on spaces, but if there is then
+      ;; it's good to keep that too.
+      (subst-char-in-region from (point-max)
+                           woman-escaped-escape-char ?\\)
+      (subst-char-in-region from (point-max)
+                           woman-unpadded-space-char ?\s))
 
     ;; Must return the new end of file if used in format-alist.
     (point-max)))
@@ -2865,15 +2865,18 @@ interpolated by `\*x' and `\*(xx' escapes."
             (re-search-forward "[^ \t\n]+")
             (let ((string (match-string 0)))
               (skip-chars-forward " \t")
-;               (setq string
-;                     (cons string
-;                           ;; hack (?) for CGI.man!
-;                           (cond ((looking-at "\"\"") "\"")
-;                                 ((looking-at ".*") (match-string 0)))
-;                           ))
-              ;; Above hack causes trouble in arguments!
-              (looking-at ".*")
-              (setq string (cons string (match-string 0)))
+              (if (= ?\" (following-char))
+                  ;; Double-quote starts a string, eg.
+                  ;;   .ds foo "blah...
+                  ;; is value blah... through to newline.  There's no
+                  ;; closing " (per the groff manual), but rather any
+                  ;; further " is included literally in the string.  Eg.
+                  ;;   .ds foo ""
+                  ;; sets foo to a single " character.
+                  (forward-char))
+              (setq string (cons string
+                                 (buffer-substring (point)
+                                                   (line-end-position))))
               ;; This should be an update, but consing a new string
               ;; onto the front of the alist has the same effect:
               (setq woman-string-alist (cons string woman-string-alist))