[PATCH v1 2/4] emacs: wash: Improved citation tidying
David Edmondson
dme at dme.org
Sun Aug 27 06:46:21 PDT 2017
Improve the citation tidying by being more aggressive about the
changes made:
- collapse all citation leaders to the canonical form (stripping out
intervening spaces, for example),
- ensure that a blank line exists before and after every block of
cited text.
---
emacs/notmuch-wash.el | 42 ++++++++++++++++++++++++++++++++++--------
1 file changed, 34 insertions(+), 8 deletions(-)
diff --git a/emacs/notmuch-wash.el b/emacs/notmuch-wash.el
index 5f8b9267..c449163f 100644
--- a/emacs/notmuch-wash.el
+++ b/emacs/notmuch-wash.el
@@ -300,29 +300,55 @@ that PREFIX should not include a newline."
Perform several transformations on the message body:
+- Remove any leading space from lines with citation leaders,
+- Collapse citation leaders to their minimal form (repeated >
+ followed by a space),
- Remove lines of repeated citation leaders with no other
content,
-- Remove citation leaders standing alone before a block of cited
- text,
-- Remove citation trailers standing alone after a block of cited
- text."
+- Remove citation leaders standing alone before and after a block
+ of cited text,
+- Ensure that a blank line separates a block of cited text from
+ non-cited text."
+
+ ;; Remove any leading spaces on citation lines.
+ (goto-char (point-min))
+ (while (re-search-forward "^ +>" nil t)
+ (replace-match ">"))
+
+ ;; Collapse all citation leaders to the minimal form.
+ (goto-char (point-min))
+ (while (re-search-forward "^>[> ]*>" nil t)
+ (replace-match (remove ? (match-string 0))))
;; Remove lines of repeated citation leaders with no other content.
(goto-char (point-min))
- (while (re-search-forward "\\(^>[> ]*\n\\)\\{2,\\}" nil t)
+ (while (re-search-forward "\\(^>+ ?\n\\)\\{2,\\}" nil t)
(replace-match "\\1"))
;; Remove citation leaders standing alone before a block of cited
;; text.
(goto-char (point-min))
- (while (re-search-forward "\\(\n\\|^[^>].*\\)\n\\(^>[> ]*\n\\)" nil t)
+ (while (re-search-forward "\\(\n\\|^[^>\n].*\\)\n\\(^>+ ?\n\\)" nil t)
(replace-match "\\1\n"))
;; Remove citation trailers standing alone after a block of cited
;; text.
(goto-char (point-min))
- (while (re-search-forward "\\(^>[> ]*\n\\)\\(^$\\|^[^>].*\\)" nil t)
- (replace-match "\\2")))
+ (while (re-search-forward "\\(^>+ ?\n\\)\\(^$\\|^[^>].*\\)" nil t)
+ (replace-match "\\2"))
+
+ ;; Ensure that a blank line separates a citation and any following
+ ;; text.
+ (goto-char (point-min))
+ (while (re-search-forward "\\(^>+ .*?\n\\)\\([^>\n]\\)" nil t)
+ (replace-match "\\1\n\\2"))
+
+ ;; Ensure that a blank line separates any text and a following
+ ;; citation.
+ (goto-char (point-min))
+ (while (re-search-forward "\\(^[^>\n].+?\n\\)>" nil t)
+ (replace-match "\\1\n>" ""))
+ )
;;
--
2.11.0
More information about the notmuch
mailing list