diff --git a/contrib/lisp/org-e-ascii.el b/contrib/lisp/org-e-ascii.el
index c8bc33480..6c716cc1d 100644
--- a/contrib/lisp/org-e-ascii.el
+++ b/contrib/lisp/org-e-ascii.el
@@ -53,7 +53,7 @@
(declare-function org-export-get-headline-number "org-export" (headline info))
(declare-function org-export-get-ordinal "org-export"
(element info &optional types predicate))
-(declare-function org-export-get-parent-headline "org-export" (blob info))
+(declare-function org-export-get-parent-headline "org-export" (blob))
(declare-function org-export-get-relative-level "org-export" (headline info))
(declare-function org-export-low-level-p "org-export" (headline info))
(declare-function org-export-output-file-name "org-export"
@@ -564,7 +564,7 @@ INFO is a plist used as a communication channel."
;; Elements with a relative width: store maximum text width in
;; TOTAL-WIDTH.
(otherwise
- (let* ((genealogy (cons element (org-export-get-genealogy element info)))
+ (let* ((genealogy (cons element (org-export-get-genealogy element)))
;; Total width is determined by the presence, or not, of an
;; inline task among ELEMENT parents.
(total-width
@@ -574,7 +574,7 @@ INFO is a plist used as a communication channel."
;; No inlinetask: Remove global margin from text width.
(- org-e-ascii-text-width
org-e-ascii-global-margin
- (let ((parent (org-export-get-parent-headline element info)))
+ (let ((parent (org-export-get-parent-headline element)))
;; Inner margin doesn't apply to text before first
;; headline.
(if (not parent) 0
@@ -830,7 +830,7 @@ is a plist used as a communication channel."
;; count links that might be in the title.
(headline
(if (eq (org-element-type element) 'headline) element
- (or (org-export-get-parent-headline element info) element))))
+ (or (org-export-get-parent-headline element) element))))
;; Get all links in HEADLINE.
(org-element-map
headline 'link (lambda (link) (funcall unique-link-p link)) info)))
@@ -1306,7 +1306,7 @@ holding contextual information."
(make-string width (if utf8p ?━ ?_)))
;; Flush the inlinetask to the right.
(- org-e-ascii-text-width org-e-ascii-global-margin
- (if (not (org-export-get-parent-headline inlinetask info)) 0
+ (if (not (org-export-get-parent-headline inlinetask)) 0
org-e-ascii-inner-margin)
(org-e-ascii--current-text-width inlinetask info)))))))
@@ -1329,7 +1329,7 @@ contextual information."
;; First parent of ITEM is always the plain-list. Get
;; `:type' property from it.
(org-list-bullet-string
- (case (org-element-property :type (org-export-get-parent item info))
+ (case (org-element-property :type (org-export-get-parent item))
(descriptive
(concat (org-export-data (org-element-property :tag item) info)
": "))
@@ -1473,7 +1473,7 @@ information."
CONTENTS is the contents of the paragraph, as a string. INFO is
the plist used as a communication channel."
(org-e-ascii--fill-string
- (let ((parent (org-export-get-parent paragraph info)))
+ (let ((parent (org-export-get-parent paragraph)))
;; If PARAGRAPH is the first one in a list element, be sure to
;; add the check-box in front of it, before any filling. Later,
;; it would interfere with line width.
@@ -1567,7 +1567,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
value
(+ org-e-ascii-quote-margin
;; Don't apply inner margin if parent headline is low level.
- (let ((headline (org-export-get-parent-headline quote-section info)))
+ (let ((headline (org-export-get-parent-headline quote-section)))
(if (org-export-low-level-p headline info) 0
org-e-ascii-inner-margin))))))
@@ -1597,7 +1597,7 @@ contextual information."
;; Separate list of links and section contents.
(when (org-string-nw-p links) (concat "\n\n" links)))))
;; Do not apply inner margin if parent headline is low level.
- (let ((headline (org-export-get-parent-headline section info)))
+ (let ((headline (org-export-get-parent-headline section)))
(if (or (not headline) (org-export-low-level-p headline info)) 0
org-e-ascii-inner-margin))))
@@ -1698,7 +1698,7 @@ are ignored."
(or (and (not org-e-ascii-table-widen-columns)
(org-export-table-cell-width table-cell info))
(let* ((max-width 0)
- (table (org-export-get-parent-table table-cell info))
+ (table (org-export-get-parent-table table-cell))
(specialp (org-export-table-has-special-column-p table))
(col (cdr (org-export-table-cell-address table-cell info))))
(org-element-map
diff --git a/contrib/lisp/org-e-html.el b/contrib/lisp/org-e-html.el
index e065580aa..cd1fd4090 100644
--- a/contrib/lisp/org-e-html.el
+++ b/contrib/lisp/org-e-html.el
@@ -2022,7 +2022,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
CONTENTS is nil. INFO is a plist holding contextual information."
(concat
;; Insert separator between two footnotes in a row.
- (let ((prev (org-export-get-previous-element footnote-reference info)))
+ (let ((prev (org-export-get-previous-element footnote-reference)))
(when (eq (org-element-type prev) 'footnote-reference)
org-e-html-footnote-separator))
(cond
@@ -2261,7 +2261,7 @@ contextual information."
"Transcode an ITEM element from Org to HTML.
CONTENTS holds the contents of the item. INFO is a plist holding
contextual information."
- (let* ((plain-list (org-export-get-parent item info))
+ (let* ((plain-list (org-export-get-parent item))
(type (org-element-property :type plain-list))
(counter (org-element-property :counter item))
(checkbox (org-element-property :checkbox item))
@@ -2382,7 +2382,7 @@ used as a communication channel."
((file-name-absolute-p raw-path)
(expand-file-name raw-path))
(t raw-path)))
- (parent (org-export-get-parent-paragraph link info))
+ (parent (org-export-get-parent-element link))
(caption (org-e-html--caption/label-string
(org-element-property :caption parent)
(org-element-property :name parent)
@@ -2428,7 +2428,7 @@ standalone images, do the following.
(paragraph element)
(link (and (org-export-inline-image-p
element org-e-html-inline-image-rules)
- (org-export-get-parent element info)))
+ (org-export-get-parent element)))
(t nil))))
(when paragraph
(assert (eq (org-element-type paragraph) 'paragraph))
@@ -2484,7 +2484,7 @@ INFO is a plist holding contextual information. See
(let ((attr (mapconcat
'identity
(org-element-property
- :attr_html (org-export-get-parent-paragraph link info))
+ :attr_html (org-export-get-parent-element link))
" ")))
(if attr (concat " " attr) "")))
protocol)
@@ -2615,7 +2615,7 @@ the plist used as a communication channel."
(class (cdr (assoc style '((footnote . "footnote")
(verse . nil)))))
(extra (if class (format " class=\"%s\"" class) ""))
- (parent (org-export-get-parent paragraph info)))
+ (parent (org-export-get-parent paragraph)))
(cond
((and (equal (org-element-type parent) 'item)
(= (org-element-property :begin paragraph)
@@ -2783,7 +2783,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
"Transcode a SECTION element from Org to HTML.
CONTENTS holds the contents of the section. INFO is a plist
holding contextual information."
- (let ((parent (org-export-get-parent-headline section info)))
+ (let ((parent (org-export-get-parent-headline section)))
;; Before first headline: no container, just return CONTENTS.
(if (not parent) contents
;; Get div's class and id references.
@@ -2905,8 +2905,8 @@ contextual information."
"Transcode a TABLE-CELL element from Org to HTML.
CONTENTS is nil. INFO is a plist used as a communication
channel."
- (let* ((table-row (org-export-get-parent table-cell info))
- (table (org-export-get-parent-table table-cell info))
+ (let* ((table-row (org-export-get-parent table-cell))
+ (table (org-export-get-parent-table table-cell))
(cell-attrs
(if (not org-e-html-table-align-individual-fields) ""
(format (if (and (boundp 'org-e-html-format-table-no-css)
@@ -2945,7 +2945,7 @@ communication channel."
'("\n
" . "\n"))
;; Case 2: Row is from first rowgroup. Table has >=1 rowgroups.
((org-export-table-has-header-p
- (org-export-get-parent-table table-row info) info)
+ (org-export-get-parent-table table-row) info)
'("\n" . "\n"))
;; Case 2: Row is from first and only row group.
(t '("\n" . "\n")))))
diff --git a/contrib/lisp/org-e-latex.el b/contrib/lisp/org-e-latex.el
index 043b75cde..0bbc2ab25 100644
--- a/contrib/lisp/org-e-latex.el
+++ b/contrib/lisp/org-e-latex.el
@@ -56,7 +56,7 @@
(declare-function org-export-get-footnote-definition "org-export"
(footnote-reference info))
(declare-function org-export-get-footnote-number "org-export" (footnote info))
-(declare-function org-export-get-previous-element "org-export" (blob info))
+(declare-function org-export-get-previous-element "org-export" (blob))
(declare-function org-export-get-relative-level "org-export" (headline info))
(declare-function org-export-unravel-code "org-export" (element))
(declare-function org-export-inline-image-p "org-export"
@@ -1150,7 +1150,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
CONTENTS is nil. INFO is a plist holding contextual information."
(concat
;; Insert separator between two footnotes in a row.
- (let ((prev (org-export-get-previous-element footnote-reference info)))
+ (let ((prev (org-export-get-previous-element footnote-reference)))
(when (eq (org-element-type prev) 'footnote-reference)
org-e-latex-footnote-separator))
(cond
@@ -1160,7 +1160,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
(org-export-get-footnote-number footnote-reference info)))
;; Use also \footnotemark if reference is within another footnote
;; reference or footnote definition.
- ((loop for parent in (org-export-get-genealogy footnote-reference info)
+ ((loop for parent in (org-export-get-genealogy footnote-reference)
thereis (memq (org-element-type parent)
'(footnote-reference footnote-definition)))
(let ((num (org-export-get-footnote-number footnote-reference info)))
@@ -1408,7 +1408,7 @@ contextual information."
(let* ((counter
(let ((count (org-element-property :counter item))
(level
- (loop for parent in (org-export-get-genealogy item info)
+ (loop for parent in (org-export-get-genealogy item)
count (eq (org-element-type parent) 'plain-list)
until (eq (org-element-type parent) 'headline))))
(and count
@@ -1501,7 +1501,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
"Return LaTeX code for an inline image.
LINK is the link pointing to the inline image. INFO is a plist
used as a communication channel."
- (let* ((parent (org-export-get-parent-paragraph link info))
+ (let* ((parent (org-export-get-parent-element link))
(path (let ((raw-path (org-element-property :path link)))
(if (not (file-name-absolute-p raw-path)) raw-path
(expand-file-name raw-path))))
@@ -2179,7 +2179,7 @@ a communication channel."
(match-string 1 contents)
(match-string 2 contents))
contents)
- (when (org-export-get-next-element table-cell info) " & ")))
+ (when (org-export-get-next-element table-cell) " & ")))
;;;; Table Row
@@ -2193,7 +2193,7 @@ a communication channel."
(when (eq (org-element-property :type table-row) 'standard)
(let* ((attr (mapconcat 'identity
(org-element-property
- :attr_latex (org-export-get-parent table-row info))
+ :attr_latex (org-export-get-parent table-row))
" "))
(longtablep (and attr (string-match "\\" attr)))
(booktabsp
@@ -2221,7 +2221,7 @@ a communication channel."
(if booktabsp "\\midrule" "\\hline")
;; Number of columns.
(cdr (org-export-table-dimensions
- (org-export-get-parent-table table-row info) info))))
+ (org-export-get-parent-table table-row) info))))
;; When BOOKTABS are activated enforce bottom rule even when
;; no hline was specifically marked.
((and booktabsp (memq 'bottom borders)) "\\bottomrule")
diff --git a/contrib/lisp/org-e-odt.el b/contrib/lisp/org-e-odt.el
index cab4c66d1..7610161c9 100644
--- a/contrib/lisp/org-e-odt.el
+++ b/contrib/lisp/org-e-odt.el
@@ -534,7 +534,7 @@ Update styles.xml with styles that were collected as part of
(t (error "what is this?"))))
(caption-from
(case (org-element-type element)
- (link (org-export-get-parent-paragraph element info))
+ (link (org-export-get-parent-element element))
(t element)))
(captions (org-e-odt-format-label caption-from info 'definition))
(caption (car captions))
@@ -858,7 +858,7 @@ ATTR is a string of other attributes of the a element."
(defun org-e-odt-format-label (element info op)
(let* ((caption-from
(case (org-element-type element)
- (link (org-export-get-parent-paragraph element info))
+ (link (org-export-get-parent-element element))
(t element)))
;; get label and caption.
(label (org-element-property :name caption-from))
@@ -2802,7 +2802,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
CONTENTS is nil. INFO is a plist holding contextual information."
(concat
;; Insert separator between two footnotes in a row.
- (let ((prev (org-export-get-previous-element footnote-reference info)))
+ (let ((prev (org-export-get-previous-element footnote-reference)))
(when (eq (org-element-type prev) 'footnote-reference)
org-e-odt-footnote-separator))
(cond
@@ -2989,7 +2989,7 @@ contextual information."
"Transcode an ITEM element from Org to ODT.
CONTENTS holds the contents of the item. INFO is a plist holding
contextual information."
- (let* ((plain-list (org-export-get-parent item info))
+ (let* ((plain-list (org-export-get-parent item))
(type (org-element-property :type plain-list))
(counter (org-element-property :counter item))
(tag (let ((tag (org-element-property :tag item)))
@@ -3158,7 +3158,7 @@ used as a communication channel."
(org-e-odt-copy-image-file src)))
;; extract attributes from #+ATTR_ODT line.
(attr-from (case (org-element-type element)
- (link (org-export-get-parent-paragraph element info))
+ (link (org-export-get-parent-element element))
(t element)))
;; convert attributes to a plist.
(attr-plist (org-e-odt-element-attributes attr-from info))
@@ -3257,7 +3257,7 @@ standalone images, do the following.
(paragraph element)
(link (and (org-export-inline-image-p
element org-e-odt-inline-image-rules)
- (org-export-get-parent element info)))
+ (org-export-get-parent element)))
(t nil))))
(when paragraph
(assert (eq (org-element-type paragraph) 'paragraph))
@@ -3403,7 +3403,7 @@ the plist used as a communication channel."
(class (cdr (assoc style '((footnote . "footnote")
(verse . nil)))))
(extra (if class (format " class=\"%s\"" class) ""))
- (parent (org-export-get-parent paragraph info))
+ (parent (org-export-get-parent paragraph))
(parent-type (org-element-type parent))
(style (case parent-type
(quote-block 'quote)
@@ -3443,7 +3443,7 @@ contextual information."
;; If top-level list, re-start numbering. Otherwise,
;; continue numbering.
(format "text:continue-numbering=\"%s\""
- (let* ((parent (org-export-get-parent plain-list info)))
+ (let* ((parent (org-export-get-parent plain-list)))
(if (and parent (equal (org-element-type parent) 'item))
"true" "false")))
contents))))
@@ -3624,7 +3624,7 @@ contextual information."
;;;; Table Cell
(defun org-e-odt-table-style-spec (element info)
- (let* ((table (org-export-get-parent-table element info))
+ (let* ((table (org-export-get-parent-table element))
(table-attributes (org-e-odt-element-attributes table info))
(table-style (plist-get table-attributes :style)))
(assoc table-style org-e-odt-table-styles)))
@@ -3650,7 +3650,7 @@ styles congruent with the ODF-1.2 specification."
(r (car table-cell-address)) (c (cdr table-cell-address))
(style-spec (org-e-odt-table-style-spec table-cell info))
(table-dimensions (org-export-table-dimensions
- (org-export-get-parent-table table-cell info)
+ (org-export-get-parent-table table-cell)
info)))
(when style-spec
;; LibreOffice - particularly the Writer - honors neither table
@@ -3697,7 +3697,7 @@ channel."
(r (car table-cell-address))
(c (cdr table-cell-address))
(horiz-span (or (org-export-table-cell-width table-cell info) 0))
- (table-row (org-export-get-parent table-cell info))
+ (table-row (org-export-get-parent table-cell))
(custom-style-prefix (org-e-odt-get-table-cell-styles
table-cell info))
(paragraph-style
@@ -3708,9 +3708,9 @@ channel."
(cond
((and (= 1 (org-export-table-row-group table-row info))
(org-export-table-has-header-p
- (org-export-get-parent-table table-row info) info))
+ (org-export-get-parent-table table-row) info))
"OrgTableHeading")
- ((let* ((table (org-export-get-parent-table table-cell info))
+ ((let* ((table (org-export-get-parent-table table-cell))
(table-attrs (org-e-odt-element-attributes table info))
(table-header-columns (plist-get table-attrs
:header-columns)))
@@ -3763,7 +3763,7 @@ communication channel."
(let* ((rowgroup-tags
(if (and (= 1 (org-export-table-row-group table-row info))
(org-export-table-has-header-p
- (org-export-get-parent-table table-row info) info))
+ (org-export-get-parent-table table-row) info))
;; If the row belongs to the first rowgroup and the
;; table has more than one row groups, then this row
;; belongs to the header row group.
@@ -3854,7 +3854,7 @@ contextual information."
(let* ((--get-previous-elements
(function
(lambda (blob info)
- (let ((parent (org-export-get-parent blob info)))
+ (let ((parent (org-export-get-parent blob)))
(cdr (member blob (reverse (org-element-contents parent))))))))
(--element-preceded-by-table-p
(function
@@ -3864,7 +3864,7 @@ contextual information."
(--walk-list-genealogy-and-collect-tags
(function
(lambda (table info)
- (let* ((genealogy (org-export-get-genealogy table info))
+ (let* ((genealogy (org-export-get-genealogy table))
(list-genealogy
(when (equal (org-element-type (car genealogy)) 'item)
(loop for el in genealogy
@@ -4181,7 +4181,7 @@ using `org-open-file'."
(let* ((numbered-parent-headline-at-<=-n
(function
(lambda (element n info)
- (loop for x in (org-export-get-genealogy element info)
+ (loop for x in (org-export-get-genealogy element)
thereis (and (eq (org-element-type x) 'headline)
(<= (org-export-get-relative-level x info) n)
(org-export-numbered-headline-p x info)
diff --git a/contrib/lisp/org-e-publish.el b/contrib/lisp/org-e-publish.el
index 1920abff8..6662d9df6 100644
--- a/contrib/lisp/org-e-publish.el
+++ b/contrib/lisp/org-e-publish.el
@@ -50,7 +50,7 @@
(declare-function
org-export-to-file "org-export"
(backend file &optional subtreep visible-only body-only ext-plist))
-(declare-function org-export-get-parent-headline "org-export" (blob info))
+(declare-function org-export-get-parent-headline "org-export" (blob))
(declare-function org-export-get-environment "org-export"
(&optional backend subtreep ext-plist))
(declare-function org-export-get-inbuffer-options "org-export"
@@ -979,7 +979,7 @@ keyword."
(when (string= (downcase (org-element-property :key k))
"index")
(let ((index (org-element-property :value k))
- (parent (org-export-get-parent-headline k info)))
+ (parent (org-export-get-parent-headline k)))
(list index (plist-get info :input-file) parent))))
info)))
;; Return parse-tree to avoid altering output.
diff --git a/contrib/lisp/org-export.el b/contrib/lisp/org-export.el
index 613b92bc5..90ac829f4 100644
--- a/contrib/lisp/org-export.el
+++ b/contrib/lisp/org-export.el
@@ -1601,8 +1601,8 @@ tag."
;; Check table-cell.
(table-cell
(and (org-export-table-has-special-column-p
- (nth 1 (org-export-get-genealogy blob options)))
- (not (org-export-get-previous-element blob options))))
+ (org-export-get-parent-table blob))
+ (not (org-export-get-previous-element blob))))
;; Check clock.
(clock (not (plist-get options :with-clocks)))
;; Check planning.
@@ -1702,7 +1702,7 @@ Return transcoded string."
;; indentation: there is none and it
;; might be misleading.
(when (eq type 'paragraph)
- (let ((parent (org-export-get-parent data info)))
+ (let ((parent (org-export-get-parent data)))
(and (equal (car (org-element-contents parent))
data)
(memq (org-element-type parent)
@@ -2837,13 +2837,13 @@ Any tag belonging to this list will also be removed."
(defun org-export-first-sibling-p (headline info)
"Non-nil when HEADLINE is the first sibling in its sub-tree.
INFO is the plist used as a communication channel."
- (not (eq (org-element-type (org-export-get-previous-element headline info))
+ (not (eq (org-element-type (org-export-get-previous-element headline))
'headline)))
(defun org-export-last-sibling-p (headline info)
"Non-nil when HEADLINE is the last sibling in its sub-tree.
INFO is the plist used as a communication channel."
- (not (org-export-get-next-element headline info)))
+ (not (org-export-get-next-element headline)))
;;;; For Links
@@ -3004,7 +3004,7 @@ Assume LINK type is \"fuzzy\"."
(when (eq (org-element-type parent) 'headline)
(let ((foundp (funcall find-headline path parent)))
(when foundp (throw 'exit foundp)))))
- (org-export-get-genealogy link info)) nil)
+ (org-export-get-genealogy link)) nil)
;; No match with a common ancestor: try the full parse-tree.
(funcall find-headline
(if match-title-p (substring path 1) path)
@@ -3109,7 +3109,7 @@ objects of the same type."
;; table, item, or headline containing the object.
(when (eq (org-element-type element) 'target)
(setq element
- (loop for parent in (org-export-get-genealogy element info)
+ (loop for parent in (org-export-get-genealogy element)
when
(memq
(org-element-type parent)
@@ -3402,7 +3402,7 @@ All special rows will be ignored during export."
;; ... the table contains a special column and the row start
;; with a marking character among, "^", "_", "$" or "!",
(and (org-export-table-has-special-column-p
- (org-export-get-parent table-row info))
+ (org-export-get-parent table-row))
(member first-cell '(("^") ("_") ("$") ("!"))))
;; ... it contains only alignment cookies and empty cells.
(let ((special-row-p 'empty))
@@ -3442,7 +3442,7 @@ rows and table rules. Group 1 is also table's header."
((eq (org-element-property :type row) 'rule)
(setq row-flag nil)))
(when (equal table-row row) (throw 'found group)))
- (org-element-contents (org-export-get-parent table-row info)))))))
+ (org-element-contents (org-export-get-parent table-row)))))))
(defun org-export-table-cell-width (table-cell info)
"Return TABLE-CELL contents width.
@@ -3451,11 +3451,10 @@ INFO is a plist used as the communication channel.
Return value is the width given by the last width cookie in the
same column as TABLE-CELL, or nil."
- (let* ((genealogy (org-export-get-genealogy table-cell info))
- (row (car genealogy))
+ (let* ((row (org-export-get-parent table-cell))
(column (let ((cells (org-element-contents row)))
(- (length cells) (length (member table-cell cells)))))
- (table (nth 1 genealogy))
+ (table (org-export-get-parent-table table-cell))
cookie-width)
(mapc
(lambda (row)
@@ -3489,11 +3488,10 @@ same column as TABLE-CELL. If no such cookie is found, a default
alignment value will be deduced from fraction of numbers in the
column (see `org-table-number-fraction' for more information).
Possible values are `left', `right' and `center'."
- (let* ((genealogy (org-export-get-genealogy table-cell info))
- (row (car genealogy))
+ (let* ((row (org-export-get-parent table-cell))
(column (let ((cells (org-element-contents row)))
(- (length cells) (length (member table-cell cells)))))
- (table (nth 1 genealogy))
+ (table (org-export-get-parent-table table-cell))
(number-cells 0)
(total-cells 0)
cookie-align)
@@ -3549,9 +3547,8 @@ Return value is a list of symbols, or nil. Possible values are:
row (resp. last row) of the table, ignoring table rules, if any.
Returned borders ignore special rows."
- (let* ((genealogy (org-export-get-genealogy table-cell info))
- (row (car genealogy))
- (table (nth 1 genealogy))
+ (let* ((row (org-export-get-parent table-cell))
+ (table (org-export-get-parent-table table-cell))
borders)
;; Top/above border? TABLE-CELL has a border above when a rule
;; used to demarcate row groups can be found above. Hence,
@@ -3635,7 +3632,7 @@ INFO is a plist used as a communication channel."
;; of a row (or after the special column, if any) or when it has
;; a left border.
(or (equal (org-element-map
- (org-export-get-parent table-cell info)
+ (org-export-get-parent table-cell)
'table-cell 'identity info 'first-match)
table-cell)
(memq 'left (org-export-table-cell-borders table-cell info))))
@@ -3646,7 +3643,7 @@ INFO is a plist used as a communication channel."
;; A cell ends a column group either when it is at the end of a row
;; or when it has a right border.
(or (equal (car (last (org-element-contents
- (org-export-get-parent table-cell info))))
+ (org-export-get-parent table-cell))))
table-cell)
(memq 'right (org-export-table-cell-borders table-cell info))))
@@ -3672,7 +3669,7 @@ INFO is a plist used as a communication channel."
"Non-nil when TABLE-ROW is the first table header's row.
INFO is a plist used as a communication channel."
(and (org-export-table-has-header-p
- (org-export-get-parent-table table-row info) info)
+ (org-export-get-parent-table table-row) info)
(org-export-table-row-starts-rowgroup-p table-row info)
(= (org-export-table-row-group table-row info) 1)))
@@ -3680,7 +3677,7 @@ INFO is a plist used as a communication channel."
"Non-nil when TABLE-ROW is the last table header's row.
INFO is a plist used as a communication channel."
(and (org-export-table-has-header-p
- (org-export-get-parent-table table-row info) info)
+ (org-export-get-parent-table table-row) info)
(org-export-table-row-ends-rowgroup-p table-row info)
(= (org-export-table-row-group table-row info) 1)))
@@ -3714,8 +3711,8 @@ a communication channel.
Address is a CONS cell (ROW . COLUMN), where ROW and COLUMN are
zero-based index. Only exportable cells are considered. The
function returns nil for other cells."
- (let* ((table-row (org-export-get-parent table-cell info))
- (table (org-export-get-parent-table table-cell info)))
+ (let* ((table-row (org-export-get-parent table-cell))
+ (table (org-export-get-parent-table table-cell)))
;; Ignore cells in special rows or in special column.
(unless (or (org-export-table-row-is-special-p table-row info)
(and (org-export-table-has-special-column-p table)
@@ -3852,102 +3849,64 @@ Return a list of src-block elements with a caption."
;; Here are various functions to retrieve information about the
;; neighbourhood of a given element or object. Neighbours of interest
;; are direct parent (`org-export-get-parent'), parent headline
-;; (`org-export-get-parent-headline'), parent paragraph
-;; (`org-export-get-parent-paragraph'), previous element or object
+;; (`org-export-get-parent-headline'), first element containing an
+;; object, (`org-export-get-parent-element'), parent table
+;; (`org-export-get-parent-table'), previous element or object
;; (`org-export-get-previous-element') and next element or object
;; (`org-export-get-next-element').
;;
-;; All of these functions are just a specific use of the more generic
-;; `org-export-get-genealogy', which returns the genealogy relative to
-;; the element or object.
+;; `org-export-get-genealogy' returns the full genealogy of a given
+;; element or object, from closest parent to full parse tree.
-(defun org-export-get-genealogy (blob info)
- "Return genealogy relative to a given element or object.
-BLOB is the element or object being considered. INFO is a plist
-used as a communication channel."
- (let* ((type (org-element-type blob))
- (end (org-element-property :end blob))
- walk-data ; for byte-compiler.
- (walk-data
- (lambda (data genealogy)
- ;; Walk DATA, looking for BLOB. GENEALOGY is the list of
- ;; parents of all elements in DATA.
- (mapc
- (lambda (el)
- (cond
- ((stringp el) nil)
- ((equal el blob) (throw 'exit genealogy))
- ((>= (org-element-property :end el) end)
- ;; If BLOB is an object and EL contains a secondary
- ;; string, be sure to check it.
- (when (memq type org-element-all-objects)
- (let ((sec-prop
- (cdr (assq (org-element-type el)
- org-element-secondary-value-alist))))
- (when sec-prop
- (funcall
- walk-data
- (cons 'org-data
- (cons nil (org-element-property sec-prop el)))
- (cons el genealogy)))))
- (funcall walk-data el (cons el genealogy)))))
- (org-element-contents data)))))
- (catch 'exit (funcall walk-data (plist-get info :parse-tree) nil) nil)))
-
-(defun org-export-get-parent (blob info)
+(defun org-export-get-parent (blob)
"Return BLOB parent or nil.
-BLOB is the element or object considered. INFO is a plist used
-as a communication channel."
- (car (org-export-get-genealogy blob info)))
+BLOB is the element or object considered."
+ (org-element-property :parent blob))
-(defun org-export-get-parent-headline (blob info)
+(defun org-export-get-genealogy (blob)
+ "Return full genealogy relative to a given element or object.
+BLOB is the element or object being considered."
+ (let (genealogy (parent blob))
+ (while (setq parent (org-element-property :parent parent))
+ (push parent genealogy))
+ (nreverse genealogy)))
+
+(defun org-export-get-parent-headline (blob)
"Return BLOB parent headline or nil.
-BLOB is the element or object being considered. INFO is a plist
-used as a communication channel."
- (catch 'exit
- (mapc
- (lambda (el) (when (eq (org-element-type el) 'headline) (throw 'exit el)))
- (org-export-get-genealogy blob info))
- nil))
+BLOB is the element or object being considered."
+ (let ((parent blob))
+ (while (and (setq parent (org-element-property :parent parent))
+ (not (eq (org-element-type parent) 'headline))))
+ parent))
-(defun org-export-get-parent-paragraph (object info)
- "Return OBJECT parent paragraph or nil.
-OBJECT is the object to consider. INFO is a plist used as
-a communication channel."
- (catch 'exit
- (mapc
- (lambda (el) (when (eq (org-element-type el) 'paragraph) (throw 'exit el)))
- (org-export-get-genealogy object info))
- nil))
+(defun org-export-get-parent-element (object)
+ "Return first element containing OBJECT or nil.
+OBJECT is the object to consider."
+ (let ((parent object))
+ (while (and (setq parent (org-element-property :parent parent))
+ (memq (org-element-type parent) org-element-all-objects)))
+ parent))
-(defun org-export-get-parent-table (object info)
+(defun org-export-get-parent-table (object)
"Return OBJECT parent table or nil.
-OBJECT is either a `table-cell' or `table-element' type object.
-INFO is a plist used as a communication channel."
- (catch 'exit
- (mapc
- (lambda (el) (when (eq (org-element-type el) 'table) (throw 'exit el)))
- (org-export-get-genealogy object info))
- nil))
+OBJECT is either a `table-cell' or `table-element' type object."
+ (let ((parent object))
+ (while (and (setq parent (org-element-property :parent parent))
+ (not (eq (org-element-type parent) 'table))))
+ parent))
-(defun org-export-get-previous-element (blob info)
+(defun org-export-get-previous-element (blob)
"Return previous element or object.
-
-BLOB is an element or object. INFO is a plist used as
-a communication channel.
-
-Return previous element or object, a string, or nil."
- (let ((parent (org-export-get-parent blob info)))
+BLOB is an element or object. Return previous element or object,
+a string, or nil."
+ (let ((parent (org-export-get-parent blob)))
(cadr (member blob (reverse (org-element-contents parent))))))
-(defun org-export-get-next-element (blob info)
+(defun org-export-get-next-element (blob)
"Return next element or object.
-
-BLOB is an element or object. INFO is a plist used as
-a communication channel.
-
-Return next element or object, a string, or nil."
- (let ((parent (org-export-get-parent blob info)))
+BLOB is an element or object. Return next element or object,
+a string, or nil."
+ (let ((parent (org-export-get-parent blob)))
(cadr (member blob (org-element-contents parent)))))