diff options
author | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2014-08-02 22:42:51 +0200 |
---|---|---|
committer | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2014-08-02 22:49:24 +0200 |
commit | cbb82d0c6e45e58e98dc910df2fcce8c6aa1a611 (patch) | |
tree | 77d24e7d786afe4f73e7b65ef17ac2a8cda9e7de | |
parent | b2866a504da0af9226018c94154ef330d0f2b700 (diff) | |
download | org-mode-cbb82d0c6e45e58e98dc910df2fcce8c6aa1a611.tar.gz |
Speed up paragraph filling
* lisp/org.el (org-fill-paragraph): Do not parse objects in whole
paragraph if none looks like a line break.
-rw-r--r-- | lisp/org.el | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/lisp/org.el b/lisp/org.el index 422a675..974bc14 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -162,8 +162,6 @@ Stars are put in group 1 and the trimmed body in group 2.") (declare-function org-table-maybe-eval-formula "org-table" ()) (declare-function org-table-maybe-recalculate-line "org-table" ()) -(declare-function org-element--parse-objects "org-element" - (beg end acc restriction)) (declare-function org-element-at-point "org-element" ()) (declare-function org-element-cache-reset "org-element" (&optional all)) (declare-function org-element-cache-refresh "org-element" (pos)) @@ -171,8 +169,6 @@ Stars are put in group 1 and the trimmed body in group 2.") (declare-function org-element-context "org-element" (&optional element)) (declare-function org-element-interpret-data "org-element" (data &optional parent)) -(declare-function org-element-map "org-element" - (data types fun &optional info first-match no-recursion)) (declare-function org-element-nested-p "org-element" (elem-a elem-b)) (declare-function org-element-parse-buffer "org-element" (&optional granularity visible-only)) @@ -180,11 +176,8 @@ Stars are put in group 1 and the trimmed body in group 2.") (declare-function org-element-put-property "org-element" (element property value)) (declare-function org-element-swap-A-B "org-element" (elem-a elem-b)) -(declare-function org-element--parse-objects "org-element" - (beg end acc restriction)) (declare-function org-element-parse-buffer "org-element" (&optional granularity visible-only)) -(declare-function org-element-restriction "org-element" (element)) (declare-function org-element-type "org-element" (element)) (defsubst org-uniquify (list) @@ -22858,25 +22851,17 @@ a footnote definition, try to fill the first paragraph within." (concat "^" message-cite-prefix-regexp) end t)) (setq end (match-beginning 0)))) ;; Fill paragraph, taking line breaks into account. - ;; For that, slice the paragraph using line breaks as - ;; separators, and fill the parts in reverse order to - ;; avoid messing with markers. + ;; For that, insert hard newline characters after line + ;; breaks and activate `use-hard-newlines'. (save-excursion - (goto-char end) - (mapc - (lambda (pos) - (fill-region-as-paragraph pos (point) justify) - (goto-char pos)) - ;; Find the list of ending positions for line breaks - ;; in the current paragraph. Add paragraph - ;; beginning to include first slice. - (nreverse - (cons beg - (org-element-map - (org-element--parse-objects - beg end nil (org-element-restriction 'paragraph)) - 'line-break - (lambda (lb) (org-element-property :end lb))))))) + (goto-char beg) + (while (re-search-forward "\\\\\\\\[ \t]*\\(\n\\)" end t) + (when (eq 'line-break + (org-element-type + (progn (backward-char) + (save-match-data (org-element-context))))) + (replace-match hard-newline nil nil nil 1))) + (let ((use-hard-newlines t)) (fill-region beg end justify))) t))) ;; Contents of `comment-block' type elements should be ;; filled as plain text, but only if point is within block |