From ab72802ab90950d8edc2d415443f089a1208f5cc Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Thu, 27 Mar 2014 15:12:05 +0100 Subject: [PATCH] org-element: Make `org-element-context' sloppy * lisp/org-element.el (org-element-context): Allow to parse node properties. --- lisp/org-element.el | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index d94243b..a774528 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -5598,7 +5598,9 @@ object type, but always include `:begin', `:end', `:parent' and `:post-blank'. As a special case, if point is right after an object and not at -the beginning of any other object, return that object. +the beginning of any other object, return that object. Also, +parse Org syntax and return objects in planning lines and node +properties, for convenience. Optional argument ELEMENT, when non-nil, is the closest element containing point, as returned by `org-element-at-point'. @@ -5668,8 +5670,12 @@ Providing it allows for quicker computation." (if (and (>= pos (point)) (< pos (line-end-position))) (narrow-to-region (point) (line-end-position)) (throw 'objects-forbidden element)))) - ;; At a planning line, if point is at a timestamp, return it, - ;; otherwise, return element. + ;; Convenience features. + ;; + ;; - At a planning line, if point is at a timestamp, return + ;; it, otherwise, return element. + ;; + ;; - Return objects in node properties values. ((eq type 'planning) (dolist (p '(:closed :deadline :scheduled)) (let ((timestamp (org-element-property p element))) @@ -5677,8 +5683,16 @@ Providing it allows for quicker computation." (<= (org-element-property :begin timestamp) pos) (> (org-element-property :end timestamp) pos)) (throw 'objects-forbidden timestamp)))) - ;; All other locations cannot contain objects: bail out. (throw 'objects-forbidden element)) + ((eq type 'node-property) + (beginning-of-line) + (search-forward ":" (line-end-position) t 2) + (skip-chars-forward " \t") + (if (> (point) pos) (throw 'objects-forbidden element) + (narrow-to-region (point) (line-end-position)) + ;; Do not limit object types in a node property. + (setq type 'paragraph))) + ;; All other locations cannot contain objects: bail out. (t (throw 'objects-forbidden element))) (goto-char (point-min)) (let ((restriction (org-element-restriction type)) -- 1.9.1