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)))))