diff options
author | Kevin Ryde <user42@zip.com.au> | 2012-07-07 18:06:38 +0800 |
---|---|---|
committer | Chong Yidong <cyd@gnu.org> | 2012-07-07 18:06:38 +0800 |
commit | f0ecdfeaae605c0dfa115925a38f285641a69230 (patch) | |
tree | 3fc4167d0ae51f7a6ce803e818a6bb7a6bce19e3 | |
parent | ab4c47d38224bc57201e45fa0918ca708bcf7054 (diff) | |
download | emacs-f0ecdfeaae605c0dfa115925a38f285641a69230.tar.gz |
* woman.el (woman-strings): Fix double-quote handling.
(woman-decode-region): Replace escaped-escapes without destroying
bold or underline.
Fixes: debbugs:1151
-rw-r--r-- | lisp/ChangeLog | 6 | ||||
-rw-r--r-- | lisp/woman.el | 49 |
2 files changed, 32 insertions, 23 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6491025648f..1dc857d134a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -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). diff --git a/lisp/woman.el b/lisp/woman.el index e220cd8062c..4767b062335 100644 --- a/lisp/woman.el +++ b/lisp/woman.el @@ -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)) |