|
@@ -637,9 +637,10 @@ standard mode."
|
|
|
;; - type :: list of strings
|
|
|
;; - update :: `org-export-update-info'
|
|
|
|
|
|
-;; + `genealogy' :: List of current element's parents types.
|
|
|
+;; + `genealogy' :: Flat list of current object or element's parents
|
|
|
+;; from closest to farthest.
|
|
|
;; - category :: local
|
|
|
-;; - type :: list of symbols
|
|
|
+;; - type :: list of elements and objects
|
|
|
;; - update :: `org-export-update-info'
|
|
|
|
|
|
;; + `headline-alist' :: Alist between headlines raw name and their
|
|
@@ -675,12 +676,6 @@ standard mode."
|
|
|
;; - category :: local
|
|
|
;; - type :: list of strings
|
|
|
|
|
|
-;; + `inherited-properties' :: Properties of the headline ancestors
|
|
|
-;; of the current element or object. Those from the closest
|
|
|
-;; headline have precedence over the others.
|
|
|
-;; - category :: local
|
|
|
-;; - type :: plist
|
|
|
-
|
|
|
;; + `keywords' :: List of keywords attached to data.
|
|
|
;; - category :: option
|
|
|
;; - type :: string
|
|
@@ -689,11 +684,6 @@ standard mode."
|
|
|
;; - category :: option
|
|
|
;; - type :: string
|
|
|
|
|
|
-;; + `parent-properties' :: Properties of the parent element.
|
|
|
-;; - category :: local
|
|
|
-;; - type :: plist
|
|
|
-;; - update :: `org-export-update-info'
|
|
|
-
|
|
|
;; + `parse-tree' :: Whole parse tree, available at any time during
|
|
|
;; transcoding.
|
|
|
;; - category :: global
|
|
@@ -1338,11 +1328,7 @@ The following properties are updated:
|
|
|
`footnote-seen-labels' List of already parsed footnote
|
|
|
labels (string list)
|
|
|
`genealogy' List of current element's parents
|
|
|
- (symbol list).
|
|
|
-`inherited-properties' List of inherited properties from
|
|
|
- parent headlines (plist).
|
|
|
-`parent-properties' List of last element's properties
|
|
|
- (plist).
|
|
|
+ (list of elements and objects).
|
|
|
`previous-element' Previous element's type (symbol).
|
|
|
`previous-object' Previous object's type (symbol).
|
|
|
|
|
@@ -1353,19 +1339,7 @@ Return the property list."
|
|
|
(recursep
|
|
|
(org-combine-plists
|
|
|
info
|
|
|
- `(:genealogy ,(cons type (plist-get info :genealogy))
|
|
|
- :previous-element nil
|
|
|
- :previous-object nil
|
|
|
- :parent-properties
|
|
|
- ,(if (memq type org-element-all-elements)
|
|
|
- (nth 1 blob)
|
|
|
- (plist-get info :parent-properties))
|
|
|
- :inherited-properties
|
|
|
- ,(if (eq type 'headline)
|
|
|
- (org-combine-plists
|
|
|
- (plist-get info :inherited-properties) (nth 1 blob))
|
|
|
- (plist-get info :inherited-properties)))
|
|
|
- ;; Add persistent properties.
|
|
|
+ `(:genealogy ,(cons blob (plist-get info :genealogy)))
|
|
|
org-export-persistent-properties))
|
|
|
;; Case 2: No recursion.
|
|
|
(t
|
|
@@ -1500,7 +1474,7 @@ Return transcoded string."
|
|
|
;; indentation: there is none and it might be
|
|
|
;; misleading.
|
|
|
(and (not (plist-get info :previous-element))
|
|
|
- (let ((parent (car (plist-get info :genealogy))))
|
|
|
+ (let ((parent (caar (plist-get info :genealogy))))
|
|
|
(memq parent '(footnote-definition item)))))))
|
|
|
(org-export-data
|
|
|
paragraph
|
|
@@ -2279,7 +2253,8 @@ INFO is the plist used as a communication channel."
|
|
|
"Non-nil when HEADLINE is the last sibling in its sub-tree.
|
|
|
INFO is the plist used as a communication channel."
|
|
|
(= (org-element-get-property :end headline)
|
|
|
- (or (plist-get (plist-get info :parent-properties) :end)
|
|
|
+ (or (org-element-get-property
|
|
|
+ :end (org-export-get-parent-headline headline info))
|
|
|
(plist-get info :point-max))))
|
|
|
|
|
|
|
|
@@ -2322,7 +2297,8 @@ Return the transcoded string."
|
|
|
;; file becomes a direct child of the current headline
|
|
|
;; in the buffer.
|
|
|
:headline-offset
|
|
|
- ,(- (+ (plist-get (plist-get info :inherited-properties) :level)
|
|
|
+ ,(- (+ (org-element-get-property
|
|
|
+ :level (org-export-get-parent-headline keyword info))
|
|
|
(plist-get info :headline-offset))
|
|
|
(1- (org-export-get-min-level data info)))))))))
|
|
|
|
|
@@ -2541,17 +2517,9 @@ like inline images, which are a subset of links \(in that case,
|
|
|
;; a parent headline will also trigger a full search,
|
|
|
;; notwithstanding WITHIN-SECTION value.
|
|
|
(data
|
|
|
- (let ((parse-tree (plist-get info :parse-tree)))
|
|
|
- (if within-section
|
|
|
- (let ((parent (plist-get (plist-get info :inherited-properties)
|
|
|
- :begin)))
|
|
|
- (if (not parent) parse-tree
|
|
|
- (org-element-map
|
|
|
- parse-tree 'headline
|
|
|
- (lambda (el local)
|
|
|
- (when (= (org-element-get-property :begin el) parent) el))
|
|
|
- info 'first-match)))
|
|
|
- parse-tree))))
|
|
|
+ (if (not within-section) (plist-get info :parse-tree)
|
|
|
+ (or (org-export-get-parent-headline element info)
|
|
|
+ (plist-get info :parse-tree)))))
|
|
|
;; Increment counter until ELEMENT is found again.
|
|
|
(org-element-map
|
|
|
data type
|
|
@@ -2865,6 +2833,17 @@ links."
|
|
|
(org-export-collect-elements 'src-block backend info))
|
|
|
|
|
|
|
|
|
+;;;; Misc. Tools
|
|
|
+
|
|
|
+(defun org-export-get-parent-headline (blob info)
|
|
|
+ "Return BLOB's closest parent headline or nil."
|
|
|
+ (catch 'exit
|
|
|
+ (mapc
|
|
|
+ (lambda (el) (when (eq (car el) headline) (throw 'exit el)))
|
|
|
+ (plist-get info :genealogy))
|
|
|
+ nil))
|
|
|
+
|
|
|
+
|
|
|
|
|
|
;;; The Dispatcher
|
|
|
|