mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-12-26 10:49:38 +00:00
org-export: Rewrite topology functions
* contrib/lisp/org-export.el (org-export-get-genealogy, org-export-get-parent, org-export-get-parent-headline, org-export-get-parent-table): Rewrite function to use :parent property. Remove communication channel from signature. (org-export-get-parent-element): Rename from `org-export-get-parent-paragraph'. (org-export-data, org-export-table-row-is-special-p) org-export-table-row-group, org-export-table-cell-starts-colgroup-p, org-export-table-cell-ends-colgroup-p, org-export-table-row-starts-header-p, org-export-table-row-ends-header-p, org-export-table-cell-address, org-export-first-sibling-p, org-export-last-sibling-p, org-export-resolve-fuzzy-link, org-export-get-ordinal): Apply signature change. (org-export--skip-p, org-export-table-cell-width, org-export-table-cell-alignment, org-export-table-cell-borders): Refactor code. Apply signature change. * contrib/lisp/org-e-ascii.el (org-e-ascii--current-text-width, org-e-ascii--unique-links, org-e-ascii-inlinetask, org-e-ascii-item, org-e-ascii-paragraph, org-e-ascii-quote-section, org-e-ascii-section, org-e-ascii--table-cell-width): Apply signature change. * contrib/lisp/org-e-html.el (org-e-html-link, org-e-html-link--inline-image): Use new function and apply signature change. (org-e-html-item, org-e-html-standalone-image-p, org-e-html-paragraph, org-e-html-section, org-e-html-table-cell, org-e-html-table-row, org-e-html-footnote-reference): Apply signature change. * contrib/lisp/org-e-latex.el (org-e-latex-link--inline-image): Use new function and apply signature change. (org-e-latex-footnote-reference, org-e-latex-item, org-e-latex-table-cell, org-e-latex-table-row): Apply signature change. * contrib/lisp/org-e-odt.el (org-e-odt-format-formula, org-e-odt-format-label, org-e-odt-link--inline-image): Use new function and apply signature change. (org-e-odt-item, org-e-odt-standalone-image-p, org-e-odt-paragraph, org-e-odt-plain-list, org-e-odt-table-style-spec, org-e-odt-get-table-cell-styles, org-e-odt-table-cell, org-e-odt-table-row, org-e-odt-table, org-e-odt-footnote-reference, org-e-odt-enumerate-element): Apply signature change.
This commit is contained in:
parent
af285d6c8c
commit
4728a4611e
@ -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
|
||||
|
@ -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<tbody>" . "\n</tbody>"))
|
||||
;; 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<thead>" . "\n</thead>"))
|
||||
;; Case 2: Row is from first and only row group.
|
||||
(t '("\n<tbody>" . "\n</tbody>")))))
|
||||
|
@ -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 "\\<longtable\\>" 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")
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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)))))
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user