branch: externals-release/org
commit 55fd660b4e33f215c8af7a3bfe16dc198f1a6159
Author: Ihor Radchenko <yanta...@posteo.net>
Commit: Ihor Radchenko <yanta...@posteo.net>

    org-element: Auto-undefer deferred properties that depend on buffer 
positions
    
    * lisp/org-element.el (org-element--get-node-properties):
    (org-element--headline-parse-title):
    (org-element--headline-parse-title-raw):
    (org-element--headline-parse-title-parse):
    (org-element-comment-block-parser):
    (org-element-example-block-parser):
    (org-element-export-block-parser):
    (org-element-latex-environment-parser):
    (org-element-src-block-parser):
    (org-element-table-parser):
    (org-element--parse-generic-emphasis):
    (org-element-export-snippet-parser):
    (org-element-inline-babel-call-parser):
    (org-element-latex-fragment-parser): Auto-undefer node properties that
    are calculated based on buffer position of the node.  This will make
    the return value of `org-element-at-point' a little more robust once
    the buffer is modified.  The :begin/:end, and other positional
    properties may not be up-to-date, but at least some other properties
    may be "frozen" if they are undeferred early.  Auto-undefer is still
    disabled for properties that do not depend on buffer positions and may
    benefit from dynamic calculation that takes into account syntax
    changes that are influenced by global variables.
---
 lisp/org-element.el | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/lisp/org-element.el b/lisp/org-element.el
index b15f0b69d9..191bb5698d 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -1188,7 +1188,7 @@ parse properties for property drawer at point."
                    (property-name-symbol (intern property-name))
                    (property-value
                     (org-element-deferred-create
-                     nil #'org-element--substring
+                     t #'org-element--substring
                      (- (match-beginning 3) begin)
                      (- (match-end 3) begin))))
               (cond
@@ -1355,7 +1355,7 @@ Throw `:org-element-deferred-retry' signal at the end."
             (title-end (point))
             (raw-value
               (org-element-deferred-create
-               nil #'org-element--headline-raw-value
+               t #'org-element--headline-raw-value
                (- title-start begin) (- title-end begin))))
         (org-element-put-property headline :raw-value raw-value)
         (org-element-put-property headline :level level)
@@ -1386,12 +1386,12 @@ Throw `:org-element-deferred-retry' signal at the end."
 
 (defconst org-element--headline-parse-title-raw
   (org-element-deferred-create
-   nil #'org-element--headline-parse-title t)
+   t #'org-element--headline-parse-title t)
   "Constant holding deferred value for raw headline `:title' property.")
 
 (defconst org-element--headline-parse-title-parse
   (org-element-deferred-create
-   nil #'org-element--headline-parse-title nil)
+   t #'org-element--headline-parse-title nil)
   "Constant holding deferred value for parsed headline `:title' property.")
 
 (defconst org-element--headline-deferred
@@ -2414,7 +2414,7 @@ Assume point is at comment block beginning."
                             (if (eobp) (point) (line-beginning-position))))
                 (value
                   (org-element-deferred-create
-                   nil #'org-element--substring
+                   t #'org-element--substring
                    (- contents-begin begin)
                    (- contents-end begin))))
            (org-element-create
@@ -2532,7 +2532,7 @@ Return a new syntax node of `example-block' type 
containing `:begin',
                 (contents-begin (line-beginning-position 2))
                 (value
                   (org-element-deferred-create
-                   nil #'org-element--unescape-substring
+                   t #'org-element--unescape-substring
                    (- contents-begin begin)
                    (- contents-end begin)))
                 (pos-before-blank (progn (goto-char contents-end)
@@ -2612,7 +2612,7 @@ Assume point is at export-block beginning."
                           (if (eobp) (point) (line-beginning-position))))
               (value
                 (org-element-deferred-create
-                 nil #'org-element--unescape-substring
+                 t #'org-element--unescape-substring
                  (- contents-begin begin)
                  (- contents-end begin))))
          (org-element-create
@@ -2800,7 +2800,7 @@ Assume point is at the beginning of the latex 
environment."
               (begin (car affiliated))
               (value
                 (org-element-deferred-create
-                 nil #'org-element--substring
+                 t #'org-element--substring
                  (- code-begin begin)
                  (- code-end begin)))
               (end (progn (skip-chars-forward " \r\t\n" limit)
@@ -3059,7 +3059,7 @@ Assume point is at the beginning of the block."
                 ;; Retrieve code.
                 (value
                   (org-element-deferred-create
-                   nil #'org-element--unescape-substring
+                   t #'org-element--unescape-substring
                    (- (line-beginning-position 2) begin)
                    (- contents-end begin)))
                 (pos-before-blank (progn (goto-char contents-end)
@@ -3159,7 +3159,7 @@ Assume point is at the beginning of the table."
              :contents-end (and (eq type 'org) table-end)
              :value (and (eq type 'table.el)
                           (org-element-deferred-create
-                           nil #'org-element--substring
+                           t #'org-element--substring
                            (- table-begin begin)
                            (- table-end begin)))
              :post-blank (count-lines pos-before-blank end)
@@ -3322,7 +3322,7 @@ Assume point is at first MARK."
                         (list :value
                               (and (memq type '(code verbatim))
                                    (org-element-deferred-create
-                                    nil #'org-element--substring
+                                    t #'org-element--substring
                                     (- contents-begin origin)
                                     (- contents-end origin))))
                       (list :contents-begin contents-begin
@@ -3572,7 +3572,7 @@ Assume point is at the beginning of the snippet."
             (value
               (when contents-end
                 (org-element-deferred-create
-                 nil #'org-element--substring
+                 t #'org-element--substring
                  (- contents-begin begin)
                  (- contents-end begin))))
             (post-blank (skip-chars-forward " \t"))
@@ -3667,7 +3667,7 @@ Assume point is at the beginning of the babel call."
                       (replace-regexp-in-string "\n[ \t]*" " " (org-trim p)))))
               (value
                 (org-element-deferred-create
-                 nil #'org-element--substring
+                 t #'org-element--substring
                  0 (- (point) begin)))
               (post-blank (skip-chars-forward " \t"))
               (end (point)))
@@ -3801,7 +3801,7 @@ Assume point is at the beginning of the LaTeX fragment."
          'latex-fragment
         (list :value
                (org-element-deferred-create
-                nil #'org-element--substring
+                t #'org-element--substring
                 0 (- after-fragment begin))
               :begin begin
               :end end

Reply via email to