org-export-reference: Document new timestamp tools
[worg.git] / dev / org-export-reference.org
1 #+TITLE:      Org Export Reference Documentation
2 #+AUTHOR:     Nicolas Goaziou
3 #+EMAIL:      n.goaziou AT gmail DOT com
4 #+OPTIONS:    H:3 num:nil toc:t \n:nil @:t ::t |:t ^:t -:t f:t *:t TeX:t LaTeX:t skip:nil d:(HIDE) tags:not-in-toc
5 #+STARTUP:    align fold nodlcheck hidestars oddeven lognotestate
6 #+SEQ_TODO:   TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@)
7 #+TAGS:       Write(w) Update(u) Fix(f) Check(c) NEW(n)
8 #+LANGUAGE:   en
9 #+PRIORITIES: A C B
10 #+CATEGORY:   worg
11
12 [[file:../index.org][{Back to Worg's index}]]
13
14 This document is aimed at back-end developers for the generic export
15 engine =org-export.el=.  It assumes a good understanding of Org
16 syntax --- as specified by /Org Elements/ --- from the reader.
17
18 It covers [[#back-end][back-end creation]] process, all [[#attributes][attributes]] associated to each
19 element or object type, properties offered by the [[#communication][communication
20 channel]] during export, the [[#filter-system][filter system]] internals and [[#toolbox][tools]] provided
21 by the exporter.
22
23
24 * Defining a Back-End
25
26   A back-end is defined with ~org-export-define-backend~ macro.  It
27   requires two mandatory arguments: the back-end name and its
28   translation table, an alist that associates element and object types
29   to translator functions.  According to the macro doc-string:
30
31   #+BEGIN_QUOTE
32   These functions should return a string without any trailing space,
33   or nil.  They must accept three arguments: the object or element
34   itself, its contents or nil when it isn't recursive and the property
35   list used as a communication channel.
36
37   Contents, when not nil, are stripped from any global indentation
38   (although the relative one is preserved).  They also always end with
39   a single newline character.
40
41   If, for a given type, no function is found, that element or object
42   type will simply be ignored, along with any blank line or white
43   space at its end.  The same will happen if the function returns the
44   nil value.  If that function returns the empty string, the type will
45   be ignored, but the blank lines or white spaces will be kept.
46
47   In addition to element and object types, one function can be
48   associated to the ~template~ symbol and another one to the
49   ~plain-text~ symbol.
50
51   The former returns the final transcoded string, and can be used to
52   add a preamble and a postamble to document's body.  It must accept
53   two arguments: the transcoded string and the property list
54   containing export options.
55
56   The latter, when defined, is to be called on every text not
57   recognized as an element or an object.  It must accept two
58   arguments: the text string and the information channel.  It is an
59   appropriate place to protect special chars relative to the back-end.
60   #+END_QUOTE
61
62   Optionally, the macro can set-up back-end specific properties (like
63   values from specific buffer keywords) accessible from every
64   translator function with the ~:options-alist~ keyword.  See
65   ~org-export-options-alist~ for details on the structure of the
66   value.
67
68   As an example, the following excerpt from =e-latex= back-end
69   definition introduces three new buffer keywords (and their
70   headline's property counterpart), and redefine ~DATE~ default value:
71
72   #+BEGIN_SRC emacs-lisp
73   (org-export-define-backend e-latex
74     ...
75     :options-alist ((:date "DATE" nil org-e-latex-date-format t)
76                     (:latex-class "LATEX_CLASS" nil org-e-latex-default-class t)
77                     (:latex-class-options "LATEX_CLASS_OPTIONS" nil nil t)
78                     (:latex-header-extra "LATEX_HEADER" nil nil newline)))
79   #+END_SRC
80
81   It is also possible, with ~:export-block~ keyword, to associate
82   given block names to the ~export-block~ type.  Such blocks can
83   contain raw code that will be directly inserted in the output, as
84   long as the corresponding translator function says so.
85
86   In the following example, in the ~e-html~ back-end, =HTML= blocks
87   are export blocks.  The associated translator function inserts their
88   contents as-is, and ignores any other export block.
89
90   #+BEGIN_SRC emacs-lisp
91   (org-export-define-backend e-html
92     (...
93      (export-block . org-e-html-export-block)
94      ... )
95     :export-block "HTML")
96
97   (defun org-e-html-export-block (export-block contents info)
98     "Transcode a EXPORT-BLOCK element from Org to HTML.
99   CONTENTS is nil.  INFO is a plist used as a communication
100   channel."
101     (when (string= (org-element-property :type export-block) "HTML")
102       (org-element-property :value export-block)))
103   #+END_SRC
104
105   Eventually ~org-export-define-backend~ allows to define back-ends
106   specific filters.  Refer to [[#filter-system][The Filter System]] section for more
107   information.
108
109   If the new back-end shares most properties with another one,
110   ~org-export-define-derived-backend~ macro can be used to simplify
111   the process.  In the example below, we implement a new back-end
112   which behaves like =e-latex= excepted for headlines and the
113   template.
114
115   #+BEGIN_SRC emacs-lisp
116   (org-export-define-derived-backend my-latex e-latex
117     :translate-alist ((headline . custom-headline-translator)
118                       (template . custom-template)))
119   #+END_SRC
120
121   Back-ends defined with either function can be registered in the
122   export dispatcher using special keyword =:menu-entry=.  See macros
123   docstrings for more information.
124
125 * Elements Attributes
126   :PROPERTIES:
127   :CUSTOM_ID: attributes
128   :END:
129
130   Element attributes are accessed with ~org-element-property~
131   function.  Other accessors relative to elements are
132   ~org-element-type~ and ~org-element-contents~.
133
134   Each greater element, element and object has a fixed set of
135   properties attached to it.  Among them, four are shared by all
136   types: ~:begin~ and ~:end~, which refer to the beginning and ending
137   buffer positions of the considered element or object, ~:post-blank~,
138   which holds the number of blank lines, or white spaces, at its end
139   and ~:parent~ which refers to the element or object containing it.
140
141   Greater elements, elements and objects containing objects will have
142   ~:contents-begin~ and ~:contents-end~ properties to delimit
143   contents.  Greater elements and elements accepting affiliated
144   keywords will also have a ~:post-affiliated~ property, referring to
145   the buffer position after any affiliated keyword, when applicable.
146
147   In addition to these properties, each element can optionally get
148   some more from affiliated keywords, namely: ~:attr_ascii~,
149   ~:attr_docbook~, ~:attr_html~, ~:attr_latex~, ~:attr_odt~,
150   ~:caption~, ~:header~, ~:name~, ~:plot~, and ~:results~.
151
152   At the lowest level, a ~:parent~ property is also attached to any
153   string, as a text property.
154
155   Other properties, specific to each element or object, are listed
156   below.
157
158 ** Babel Call
159
160    Element.
161
162    - ~:info~ :: Information about function being called, as returned
163                 by ~ob-babel-lob-get-info~ (string).
164 ** Bold
165
166    Recursive object.
167
168    No specific property.
169
170 ** Center Block
171
172    Greater element.
173
174    - ~:hiddenp~ :: Non-nil if the block is hidden (boolean).
175
176 ** Clock
177
178    Element.
179
180    - ~:duration~ :: Clock duration for a closed clock, or nil (string
181                     or nil).
182    - ~:status~ :: Status of current clock (symbol: ~closed~ or
183                   ~running~).
184    - ~:value~ :: Timestamp associated to clock keyword (timestamp
185                  object).
186
187 ** Code
188
189    Object.
190
191    - ~:value~ :: Contents (string).
192
193 ** Comment
194
195    Element.
196
197    - ~:value~ :: Comments, with pound signs (string).
198
199 ** Comment Block
200
201    Element.
202
203    - ~:value~ :: Comments, without block's boundaries (string).
204    - ~:hiddenp~ :: Non-nil if block is hidden (boolean).
205
206 ** Diary Sexp
207
208    Element.
209
210    - ~:value~ :: Full Sexp (string).
211
212 ** Drawer
213
214    Greater element.
215
216    - ~:drawer-name~ :: Drawer's name (string).
217    - ~:hiddenp~ :: Non-nil if the drawer is hidden (boolean).
218
219    /Note relative to export:/ The idea behind drawers is that they are
220    transparent export-wise.  By default, they should return their
221    contents only.
222
223 ** Dynamic Block
224
225    Greater element.
226
227    - ~:arguments~ :: Block's parameters (string).
228    - ~:block-name~ :: Block's name (string).
229    - ~:drawer-name~ :: Drawer's name (string).
230    - ~:hiddenp~ :: Non-nil if the block is hidden (boolean).
231
232 ** Entity
233
234    Object.
235
236    - ~:ascii~ :: Entity's ASCII representation (string).
237    - ~:html~ :: Entity's HTML representation (string).
238    - ~:latex~ :: Entity's LaTeX representation (string).
239    - ~:latex-math-p~ :: Non-nil if entity's LaTeX representation
240         should be in math mode (boolean).
241    - ~:latin1~ :: Entity's Latin-1 encoding representation (string).
242    - ~:name~ :: Entity's name, without backslash nor brackets
243                 (string).
244    - ~:use-brackets-p~ :: Non-nil if entity is written with optional
245         brackets in original buffer (boolean).
246    - ~:utf-8~ :: Entity's UTF-8 encoding representation (string).
247
248 ** Example Block
249
250    Element.
251
252    - ~:hiddenp~ :: Non-nil if block is hidden (boolean).
253    - ~:label-fmt~ :: Format string used to write labels in current
254                      block, if different from
255                      ~org-coderef-label-format~ (string or nil).
256    - ~:language~ :: Language of the code in the block, if specified
257                     (string or nil).
258    - ~:number-lines~ :: Non-nil if code lines should be numbered.
259         A ~new~ value starts numbering from 1 wheareas ~continued~
260         resume numbering from previous numbered block (symbol: ~new~,
261         ~continued~ or nil).
262    - ~:options~ :: Block's options located on the block's opening line
263                    (string).
264    - ~:parameters~ :: Optional header arguments (string or nil).
265    - ~:preserve-indent~ :: Non-nil when indentation within the block
266         mustn't be modified upon export (boolean).
267    - ~:retain-labels~ :: Non-nil if labels should be kept visible upon
268         export (boolean).
269    - ~:switches~ :: Optional switches for code block export (string or
270                     nil).
271    - ~:use-labels~ :: Non-nil if links to labels contained in the
272                       block should display the label instead of the
273                       line number (boolean).
274    - ~:value~ :: Contents (string).
275
276 ** Export Block
277
278    Element.
279
280    - ~:hiddenp~ :: Non-nil if block is hidden (boolean).
281    - ~:type~ :: Related back-end's name (string).
282    - ~:value~ :: Contents (string).
283
284 ** Export Snippet
285
286    Object.
287
288    - ~:back-end~ :: Relative back-end's name (string).
289    - ~:value~ :: Export code (string).
290
291 ** Fixed Width
292
293    Element.
294
295    - ~:value~ :: Contents, with colons (string).
296
297 ** Footnote Definition
298
299    Greater element.
300
301    - ~:label~ :: Label used for references (string).
302
303 ** Footnote Reference
304
305    Object.
306
307    - ~:inline-definition~ :: Footnote's definition, when inlined
308         (secondary string or nil).
309    - ~:label~ :: Footnote's label, if any (string or nil).
310    - ~:raw-definition~ :: Uninterpreted footnote's definition, when
311         inlined (string or nil).
312    - ~:type~ :: Determine whether reference has its definition inline,
313                 or not (symbol: ~inline~, ~standard~).
314
315 ** Headline
316
317    Greater element.
318
319    In addition to the following list, any property specified in
320    a property drawer attached to the headline will be accessible as an
321    attribute (with underscores replaced with hyphens and a lowercase
322    name, i.e. ~:custom-id~).
323    
324    - ~:archivedp~ :: Non-nil if the headline has an archive tag
325                      (boolean).
326    - ~:closed~ :: Headline's CLOSED reference, if any (timestamp
327                   object or nil)
328    - ~:commentedp~ :: Non-nil if the headline has a comment keyword
329                       (boolean).
330    - ~:deadline~ :: Headline's DEADLINE reference, if any (timestamp
331                     object or nil).
332    - ~:footnote-section-p~ :: Non-nil if the headline is a footnote
333         section (boolean).
334    - ~:hiddenp~ :: Non-nil if the headline is hidden (boolean).
335    - ~:level~ :: Reduced level of the headline (integer).
336    - ~:pre-blank~ :: Number of blank lines between the headline and
337                      the first non-blank line of its contents
338                      (integer).
339    - ~:priority~ :: Headline's priority, as a character (integer).
340    - ~:quotedp~ :: Non-nil if the headline contains a quote keyword
341                    (boolean).
342    - ~:raw-value~ :: Raw headline's text, without the stars and the
343                      tags (string).
344    - ~:scheduled~ :: Headline's SCHEDULED reference, if any (timestamp
345                      object or nil).
346    - ~:tags~ :: Headline's tags, if any, without the archive
347                 tag. (list of strings).
348    - ~:title~ :: Parsed headline's text, without the stars and the
349                  tags (secondary string).
350    - ~:todo-keyword~ :: Headline's TODO keyword without quote and
351         comment strings, if any (string or nil).
352    - ~:todo-type~ :: Type of headline's TODO keyword, if any (symbol:
353                      ~done~, ~todo~).
354
355 ** Horizontal Rule
356
357    Element.
358
359    No specific property.
360
361 ** Inline Babel Call
362
363    Object.
364
365    - ~:info~ :: Information about function called, as returned by
366                 ~org-babel-lob-get-info~ (list).
367
368    /Note relative to export:/ Since Babel related blocks are expanded
369    before parsing, these can safely be ignored by back-ends.
370
371 ** Inline Src Block
372
373    Object.
374
375    - ~:language~ :: Language of the code in the block (string).
376    - ~:parameters~ :: Optional header arguments (string or nil).
377    - ~:value~ :: Source code (string).
378
379 ** Inlinetask
380
381    Greater element.
382    
383    In addition to the following list, any property specified in
384    a property drawer attached to the headline will be accessible as an
385    attribute (with underscores replaced with hyphens and a lowercase
386    name, i.e. ~:custom-id~).
387
388    - ~:closed~ :: Inlinetask's CLOSED reference, if any (timestamp
389                   object or nil)
390    - ~:deadline~ :: Inlinetask's DEADLINE reference, if any (timestamp
391                     object or nil).
392    - ~:hiddenp~ :: Non-nil if the headline is hidden (boolean).
393    - ~:level~ :: Reduced level of the inlinetask (integer).
394    - ~:priority~ :: Headline's priority, as a character (integer).
395    - ~:raw-value~ :: Raw inlinetask's text, without the stars and the
396                      tags (string).
397    - ~:scheduled~ :: Inlinetask's SCHEDULED reference, if any
398                      (timestamp object or nil).
399    - ~:tags~ :: Inlinetask's tags, if any (list of strings).
400    - ~:title~ :: Parsed inlinetask's text, without the stars and the
401                  tags (secondary string).
402    - ~:todo-keyword~ :: Inlinetask's TODO keyword, if any (string or
403         nil).
404    - ~:todo-type~ :: Type of inlinetask's TODO keyword, if any
405                      (symbol: ~done~, ~todo~).
406
407 ** Italic
408
409    Recursive object.
410
411    No specific property.
412
413 ** Item
414
415    Greater element.
416
417    - ~:bullet~ :: Item's bullet (string).
418    - ~:checkbox~ :: Item's check-box, if any (symbol: ~on~, ~off~,
419                     ~trans~, nil).
420    - ~:counter~ :: Item's counter, if any.  Literal counters become
421                    ordinals (integer).
422    - ~:raw-tag~ :: Uninterpreted item's tag, if any (string or nil).
423    - ~:tag~ :: Parsed item's tag, if any (secondary string or nil).
424    - ~:hiddenp~ :: Non-nil if item is hidden (boolean).
425    - ~:structure~ :: Full list's structure, as returned by
426                      ~org-list-struct~ (alist).
427
428 ** Keyword
429
430    Element.
431
432    - ~:key~ :: Keyword's name (string).
433    - ~:value~ :: Keyword's value (string).
434
435    /Note relative to export:/ Each back-end should, as far as
436    possible, support a number of common keywords.  These include:
437
438    - Back-end relative keyword (i.e. "LATEX" for =e-latex=), which
439      should always return its value as-is.
440
441    - "TARGET" keyword, which should always return a nil value.
442
443    - "TOC" keyword.  It accepts four common values: "headlines",
444      "tables", "figures", "listings".  Also, "headlines" value can
445      have an optional numeric argument to specify depth of the
446      contents.
447
448      See [[#collect-headlines][~org-export-collect-headlines~]], [[#collect-tables][~org-export-collect-tables~]],
449      [[#collect-figures][~org-export-collect-figures~]] and [[#collect-listings][~org-export-collect-listings~]].
450
451    - "INDEX" keyword.
452
453 ** LaTeX Environment
454
455    Element.
456
457    - ~:begin~ :: Buffer position at first affiliated keyword or at the
458                  beginning of the first line of environment (integer).
459    - ~:end~ :: Buffer position at the first non-blank line after last
460                line of the environment, or buffer's end (integer).
461    - ~:post-blank~ :: Number of blank lines between last environment's
462                       line and next non-blank line or buffer's end
463                       (integer).
464    - ~:value~ :: LaTeX code (string).
465
466 ** LaTeX Fragment
467
468    Object.
469
470    - ~:value~ :: LaTeX code (string).
471
472 ** Line Break
473
474    Element.
475
476    No specific property.
477
478 ** Link
479
480    Recursive object.
481
482    - ~:application~ :: Name of application requested to open the link
483                        in Emacs (string or nil). It only applies to
484                        "file" type links.
485    - ~:path~ :: Identifier for link's destination.  It is usually the
486                 link part with type, if specified, removed (string).
487    - ~:raw-link~ :: Uninterpreted link part (string).
488    - ~:search-option~ :: Additional information for file location
489         (string or nil). It only applies to "file" type links.
490    - ~:type~ :: Link's type.  Possible types (string) are:
491      - ~coderef~ :: Line in some source code,
492      - ~custom-id~ :: Specific headline's custom-id,
493      - ~file~ :: External file,
494      - ~fuzzy~ :: Target, target keyword, a named element or an
495                   headline in the current parse tree,
496      - ~id~ :: Specific headline's id,
497      - ~radio~ :: Radio-target.
498      It can also be any ~org-link-types~ element.
499
500
501    /Notes relative to export:/
502
503    - A fuzzy link leading to a target keyword should be ignored during
504      export: it's an invisible target.
505
506    - A fuzzy link with no description should display the
507      cross-reference number of its target.  This number can be:
508
509      - If link's destination is a target object within a footnote, it
510        will be footnote's number.
511
512      - If link's destination is a target object in a list, it will be
513        an item number.
514
515      - If link leads to a named element, it will be the sequence number
516        of that element among named elements of the same type.
517
518      - Otherwise, it will be the number of the headline containing
519        link's destination.
520
521      See [[#get-ordinal][~org-export-get-ordinal~]] function.
522
523 ** Macro
524
525    Object.
526
527    - ~:args~ :: Arguments passed to the macro (list of strings).
528    - ~:key~ :: Macro's name (string).
529    - ~:value~ :: Replacement text (string).
530
531    /Note relative to export:/ Macro expansion takes place before
532    buffer parsing. As such, export back-ends don't have to handle:
533    they'll never see them.
534
535 ** Paragraph
536
537    Element containing objects.
538
539    No specific property.
540
541 ** Plain List
542
543    Greater element.
544
545    - ~:structure~ :: Full list's structure, as returned by
546                      ~org-list-struct~ (alist).
547    - ~:type~ :: List's type (symbol: ~descriptive~, ~ordered~,
548                 ~unordered~).
549
550 ** Planning
551
552    Element.
553
554    - ~:closed~ :: Timestamp associated to closed keyword, if any
555                   (timestamp object or nil).
556    - ~:deadline~ :: Timestamp associated to deadline keyword, if any
557                     (timestamp object or nil).
558    - ~:scheduled~ :: Timestamp associated to scheduled keyword, if any
559                      (timestamp object or nil).
560
561 ** Property Drawer
562
563    Element.
564
565    - ~:hiddenp~ :: Non-nil if drawer is hidden (boolean).
566    - ~:properties~ :: Properties defined in the drawer (alist).
567
568 ** =Quote= Block
569
570    Greater element.
571
572    - ~:hiddenp~ :: Non-nil if block is hidden (boolean).
573
574 ** =Quote= Section
575
576    Element.
577
578    - ~:value~ :: Quoted text (string).
579
580 ** Radio Target
581
582    Recursive object.
583
584    - ~:raw-value~ :: Uninterpreted contents (string).
585
586 ** Section
587
588    Greater element.
589
590    No specific property.
591
592 ** Special Block
593
594    Greater element.
595
596    - ~:hiddenp~ :: Non-nil if block is hidden (boolean).
597    - ~:type~ :: Block's name (string).
598
599 ** Src Block
600
601    Element.
602
603    - ~:hiddenp~ :: Non-nil if block is hidden (boolean).
604    - ~:label-fmt~ :: Format string used to write labels in current
605                      block, if different from
606                      ~org-coderef-label-format~ (string or nil).
607    - ~:language~ :: Language of the code in the block, if specified
608                     (string or nil).
609    - ~:number-lines~ :: Non-nil if code lines should be numbered.
610         A ~new~ value starts numbering from 1 wheareas ~continued~
611         resume numbering from previous numbered block (symbol: ~new~,
612         ~continued~ or nil).
613    - ~:parameters~ :: Optional header arguments (string or nil).
614    - ~:preserve-indent~ :: Non-nil when indentation within the block
615         mustn't be modified upon export (boolean).
616    - ~:retain-labels~ :: Non-nil if labels should be kept visible upon
617         export (boolean).
618    - ~:switches~ :: Optional switches for code block export (string or
619                     nil).
620    - ~:use-labels~ :: Non-nil if links to labels contained in the
621                       block should display the label instead of the
622                       line number (boolean).
623    - ~:value~ :: Source code (string).
624
625 ** Statistics Cookie
626
627    Object.
628
629    - ~:value~ :: Full cookie (string).
630
631 ** Strike Through
632
633    Recursive object.
634
635    No specific property.
636
637 ** Subscript
638
639    Recursive object.
640
641    - ~:use-brackets-p~ :: Non-nil if contents are enclosed in curly
642         brackets (t, nil).
643
644 ** Superscript
645
646    Recursive object.
647
648    - ~:use-brackets-p~ :: Non-nil if contents are enclosed in curly
649         brackets (t, nil).
650
651 ** Table
652
653    Greater element.
654
655    - ~:tblfm~ :: Formulas associated to the table, if any (string or
656                  nil).
657    - ~:type~ :: Table's origin (symbol: ~table.el~, ~org~).
658    - ~:value~ :: Raw ~table.el~ table or nil (string or nil).
659
660 ** Table Cell
661
662    Recursive object.
663
664    No specific property.
665
666 ** Table Row
667
668    Element containing objects.
669
670    - ~:type~ :: Row's type (symbol: ~standard~, ~rule~).
671
672 ** Target
673
674    Object.
675
676    - ~:value~ :: Target's ID (string).
677
678
679    Notes relatives to export:
680
681    - Target should become an anchor, if back-end permits it.
682    - Target's ID shouldn't be visible on export.
683
684 ** Timestamp
685
686    Object.
687
688    - ~:day-end~ :: Day part from timestamp end.  If no ending date is
689                    defined, it defaults to start day part (integer).
690    - ~:day-start~ :: Day part from timestamp start (integer).
691    - ~:hour-start~ :: Hour part from timestamp end. If no ending date
692                       is defined, it defaults to start hour part, if
693                       any (integer or nil).
694    - ~:hour-start~ :: Hour part from timestamp start, if specified
695                       (integer or nil).
696    - ~:minute-start~ :: Minute part from timestamp end. If no ending
697         date is defined, it defaults to start minute part, if any
698         (integer or nil).
699    - ~:minute-start~ :: Minute part from timestamp start, if specified
700         (integer or nil).
701    - ~:month-end~ :: Month part from timestamp end.  If no ending date
702                      is defined, it defaults to start month part
703                      (integer).
704    - ~:month-start~ :: Month part from timestamp start (integer).
705    - ~:raw-value~ :: Raw timestamp (string).
706    - ~:repeater-type~ :: Type of repeater, if any (symbol: ~catch-up~,
707         ~restart~, ~cumulate~ or nil)
708    - ~:repeater-unit~ :: Unit of shift, if a repeater is defined
709         (symbol: ~year~, ~month~, ~week~, ~day~, ~hour~ or nil).
710    - ~:repeater-value~ :: Value of shift, if a repeater is defined
711         (integer or nil).
712    - ~:type~ :: Type of timestamp (symbol: ~active~, ~active-range~,
713                 ~diary~, ~inactive~, ~inactive-range~).
714    - ~:year-end~ :: Year part from timestamp end.  If no ending date
715                     is defined, it defaults to start year part
716                     (integer).
717    - ~:year-start~ :: Year part from timestamp start (integer).
718
719 ** Underline
720
721    Recursive object.
722
723    No specific property.
724
725 ** Verbatim
726
727    Object.
728
729    - ~:value~ :: Contents (string).
730
731 ** Verse Block
732
733    Element containing objects.
734
735    - ~:hiddenp~ :: Non-nil if block is hidden (boolean).
736
737 * The Communication Channel
738   :PROPERTIES:
739   :CUSTOM_ID: communication
740   :END:
741
742   This is the full list of properties available during transcode
743   process, with their category (~option~ or ~tree~) and their value
744   type.
745
746 ** ~:author~
747
748    Author's name.
749     
750    - category :: option
751    - type :: string
752
753 ** ~:back-end~
754
755    Current back-end used for transcoding.
756
757    - category :: tree
758    - type :: symbol
759
760 ** ~:creator~
761
762    String to write as creation information.
763
764    - category :: option
765    - type :: string
766
767 ** ~:date~
768
769    String to use as date.
770
771    - category :: option
772    - type :: string
773
774 ** ~:description~
775
776    Description text for the current data.
777
778    - category :: option
779    - type :: string
780
781 ** ~:email~
782
783    Author's email.
784
785    - category :: option
786    - type :: string
787
788 ** ~:exclude-tags~
789
790    Tags for exclusion of sub-trees from export process.
791
792    - category :: option
793    - type :: list of strings
794
795 ** ~:exported-data~
796
797    Hash table used to memoize results from [[#data][~org-export-data~]].
798
799    - category :: tree
800    - type :: hash table
801
802 ** ~:filetags~
803
804    List of global tags for buffer.  Used by [[#get-tags][~org-export-get-tags~]] to
805    get tags with inheritance.
806    - category :: option
807    - type :: list of strings
808
809 ** ~:footnote-definition-alist~
810
811    /Alist/ between footnote labels and their definition, as parsed
812    data.  Only non-inline footnotes are represented in this /alist/.
813    Also, every definition isn't guaranteed to be referenced in the
814    parse tree.  The purpose of this property is to preserve
815    definitions from oblivion – i.e. when the parse tree comes from
816    a part of the original buffer –, it isn't meant for direct use in
817    a back-end.  To retrieve a definition relative to a reference, use
818    [[#get-footnote-definition][~org-export-get-footnote-definition~]] instead.
819
820    - category :: option
821    - type :: alist (STRING . LIST)
822
823 ** ~:headline-levels~
824    :PROPERTIES:
825    :CUSTOM_ID: headline-levels
826    :END:
827
828    Maximum level being exported as an headline.  Comparison is done
829    with the relative level of headlines in the parse tree, not
830    necessarily with their actual level.
831
832    - category :: option
833    - type :: integer
834
835 ** ~:headline-numbering~
836
837    Alist between headlines' beginning position and their numbering, as
838    a list of numbers – cf. [[#get-headline-number][~org-export-get-headline-number~]].
839
840    - category :: tree
841    - type :: alist (INTEGER . LIST)
842
843 ** ~:headline-offset~
844
845    Difference between relative and real level of headlines in the
846    parse tree.  For example, a value of -1 means a level 2 headline
847    should be considered as level 1 —
848    cf. [[#get-relative-level][~org-export-get-relative-level~]].
849
850    - category :: tree
851    - type :: integer
852
853 ** ~:ignore-list~
854
855    List of elements and objects that will be unconditionally ignored
856    during export.
857
858    - category :: option
859    - type :: list of elements
860
861 ** ~:id-alist~
862
863    Alist between ID strings and destination file's path, relative to
864    current directory.
865
866    - category :: option
867    - type :: alist (STRING . STRING)
868
869 ** ~:input-file~
870
871    Full path to input file, if any.
872
873    - category :: option
874    - type :: string or nil
875
876 ** ~:keywords~
877
878    List of keywords attached to data.
879
880    - category :: option
881    - type :: string
882
883 ** ~:language~
884
885    Default language used for translations.
886
887    - category :: option
888    - type :: string
889
890 ** ~:parse-tree~
891
892    Whole parse tree, available at any time during transcoding.
893
894    - category :: option
895    - type :: list (as returned by ~org-element-parse-buffer~)
896
897 ** ~:preserve-breaks~
898
899    Non-nil means transcoding should preserve all line breaks.
900
901    - category :: option
902    - type :: symbol (nil, t)
903
904 ** ~:section-numbers~
905
906    Non-nil means transcoding should add section numbers to headlines.
907
908    - category :: option
909    - type :: symbol (nil, t)
910
911 ** ~:select-tags~
912    :PROPERTIES:
913    :CUSTOM_ID: select-tags
914    :END:
915
916    List of tags enforcing inclusion of sub-trees in transcoding.  When
917    such a tag is present, sub-trees without it are /de facto/ excluded
918    from the process.  See [[#use-select-tags][~:use-select-tags~]].
919
920    - category :: option
921    - type :: list of strings
922
923 ** ~:target-list~
924
925    List of targets raw names encountered in the parse tree.  This is
926    used to partly resolve "fuzzy" links —
927    cf. [[#resolve-fuzzy-link][~org-export-resolve-fuzzy-link~]].
928
929    - category :: tree
930    - type :: list of strings
931
932 ** ~:time-stamp-file~
933
934    Non-nil means transcoding should insert a time stamp in the output.
935
936    - category :: option
937    - type :: symbol (nil, t)
938
939 ** ~:translate-alist~
940
941    Alist between element and object types and transcoding functions
942    relative to the current back-end.  Special keys ~template~ and
943    ~plain-text~ are also possible.
944
945    - category :: option
946    - type :: alist (SYMBOL . FUNCTION)
947
948 ** ~:use-select-tags~
949    :PROPERTIES:
950    :CUSTOM_ID: use-select-tags
951    :END:
952
953    When non-nil, a select tags has been found in the parse tree.
954    Thus, any headline without one will be filtered out.  See
955    [[#select-tags][~:select-tags~]].
956
957    - category :: tree
958    - type :: interger or nil
959
960 ** ~:with-archived-trees~
961
962    Non-nil when archived sub-trees should also be transcoded.  If it
963    is set to the ~headline~ symbol, only the archived headline's name
964    is retained.
965
966    - category :: option
967    - type :: symbol (nil, t, ~headline~)
968
969 ** ~:with-author~
970
971    Non-nil means author's name should be included in the output.
972
973    - category :: option
974    - type :: symbol (nil, t)
975
976 ** ~:with-clocks~
977
978    Non-nil means clock keywords should be exported.
979
980    - category :: option
981    - type :: symbol (nil, t)
982
983 ** ~:with-creator~
984
985    Non-nil means a creation sentence should be inserted at the end of
986    the transcoded string.  If the value is ~comment~, it should be
987    commented.
988
989    - category :: option
990    - type :: symbol (~comment~, nil, t)
991
992 ** ~:with-date~
993
994    Non nil means output should contain a date.
995
996    - category :: option
997    - type :: symbol (nil, t)
998
999 ** ~:with-drawers~
1000
1001    Non-nil means drawers should be exported.  If its value is a list
1002    of names, only drawers with such names will be transcoded.
1003
1004    - category :: option
1005    - type :: symbol (nil, t) or list of strings
1006
1007 ** ~:with-email~
1008
1009    Non-nil means output should contain author's email.
1010
1011    - category :: option
1012    - type :: symbol (nil, t)
1013
1014 ** ~:with-emphasize~
1015
1016    Non-nil means emphasized text should be interpreted.
1017
1018    - category :: option
1019    - type :: symbol (nil, t)
1020
1021 ** ~:with-fixed-width~
1022
1023    Non-nil if transcoder should interpret strings starting with
1024    a colon as a fixed-with — verbatim — area.
1025
1026    - category :: option
1027    - type :: symbol (nil, t)
1028
1029 ** ~:with-footnotes~
1030
1031    Non-nil if transcoder should interpret footnotes.
1032
1033    - category :: option
1034    - type :: symbol (nil, t)
1035
1036 ** ~:with-plannings~
1037
1038    Non-nil means transcoding should include planning info.
1039
1040    - category :: option
1041    - type :: symbol (nil, t)
1042
1043 ** ~:with-priority~
1044
1045    Non-nil means transcoding should include priority cookies.
1046
1047    - category :: option
1048    - type :: symbol (nil, t)
1049
1050 ** ~:with-smart-quotes~
1051
1052    Non-nil means activate smart quotes during export.
1053
1054    - category :: option
1055    - type :: symbol (nil ,t)
1056
1057 ** ~:with-special-strings~
1058
1059    Non-nil means transcoding should interpret special strings in plain
1060    text.
1061
1062    - category :: option
1063    - type :: symbol (nil, t)
1064
1065 ** ~:with-sub-superscript~
1066
1067    Non-nil means transcoding should interpret subscript and
1068    superscript.  With a value of ~{}~, only interpret those using
1069    curly brackets.
1070
1071    - category :: option
1072    - type :: symbol (nil, ~{}~, t)
1073
1074 ** ~:with-tables~
1075
1076    Non-nil means transcoding should interpret tables.
1077
1078    - category :: option
1079    - type :: symbol (nil, t)
1080
1081 ** ~:with-tags~
1082
1083    Non-nil means transcoding should keep tags in headlines.
1084    A ~not-in-toc~ value will remove them from the table of contents,
1085    if any, nonetheless.
1086
1087    - category :: option
1088    - type :: symbol (nil, t, ~not-in-toc~)
1089
1090 ** ~:with-tasks~
1091
1092    Non-nil means transcoding should include headlines with a TODO
1093    keyword.  A ~todo~ value will only include headlines with a TODO
1094    type keyword while a ~done~ value will do the contrary.  If a list
1095    of strings is provided, only tasks with keywords belonging to that
1096    list will be kept.
1097
1098    - category :: option
1099    - type :: symbol (t, ~todo~, ~done~, nil) or list of strings
1100
1101 ** ~:with-timestamps~
1102
1103    Non-nil means transcoding should include time stamps.  Special
1104    value ~active~ (resp. ~inactive~) ask to export only active
1105    (resp. inactive) timestamps.  Otherwise, completely remove them.
1106
1107    - category :: option
1108    - type :: symbol: (~active~, ~inactive~, t, nil)
1109
1110 ** ~:with-toc~
1111
1112    Non-nil means that a table of contents has to be added to the
1113    output.  An integer value limits its depth.
1114
1115    - category :: option
1116    - type :: symbol (nil, t or integer)
1117
1118 ** ~:with-todo-keywords~
1119
1120    Non-nil means transcoding should include TODO keywords.
1121
1122    - category :: option
1123    - type :: symbol (nil, t)
1124
1125 * The Filter System
1126   :PROPERTIES:
1127   :CUSTOM_ID: filter-system
1128   :END:
1129
1130   Filters sets are lists of functions.  They allow to pre-process
1131   parse tree before export and to post-process output of each
1132   transcoded object or element.
1133
1134   Each function in a set must accept three arguments: a string (or
1135   a parse tree as a special case), a symbol representing the current
1136   back-end, and the communication channel, as a plist.
1137
1138   From the developer side, filters sets can be installed using
1139   ~:filters-alist~ keyword while defining the back-end with
1140   ~org-export-define-derived-backend~.  Each association has a key
1141   among the following symbols and a function or a list of functions as
1142   value:
1143
1144   - ~:filter-babel-call~
1145   - ~:filter-bold~
1146   - ~:filter-center-block~
1147   - ~:filter-clock~
1148   - ~:filter-code~
1149   - ~:filter-comment~
1150   - ~:filter-comment-block~
1151   - ~:filter-drawer~
1152   - ~:filter-dynamic-block~
1153   - ~:filter-entity~
1154   - ~:filter-example-block~
1155   - ~:filter-export-block~
1156   - ~:filter-export-snippet~
1157   - ~:filter-final-output~
1158   - ~:filter-fixed-width~
1159   - ~:filter-footnote-definition~
1160   - ~:filter-footnote-reference~
1161   - ~:filter-headline~
1162   - ~:filter-horizontal-rule~
1163   - ~:filter-inline-babel-call~
1164   - ~:filter-inline-src-block~
1165   - ~:filter-inlinetask~
1166   - ~:filter-italic~
1167   - ~:filter-item~
1168   - ~:filter-keyword~
1169   - ~:filter-latex-environment~
1170   - ~:filter-latex-fragment~
1171   - ~:filter-line-break~
1172   - ~:filter-link~
1173   - ~:filter-macro~
1174   - ~:filter-paragraph~
1175   - ~:filter-parse-tree~
1176   - ~:filter-plain-list~
1177   - ~:filter-plain-text~
1178   - ~:filter-planning~
1179   - ~:filter-property-drawer~
1180   - ~:filter-quote-block~
1181   - ~:filter-quote-section~
1182   - ~:filter-radio-target~
1183   - ~:filter-section~
1184   - ~:filter-special-block~
1185   - ~:filter-src-block~
1186   - ~:filter-strike-through~
1187   - ~:filter-statistics-cookie~
1188   - ~:filter-subscript~
1189   - ~:filter-superscript~
1190   - ~:filter-table~
1191   - ~:filter-table-cell~
1192   - ~:filter-table-row~
1193   - ~:filter-target~
1194   - ~:filter-timestamp~
1195   - ~:filter-underline~
1196   - ~:filter-verbatim~
1197   - ~:filter-verse-block~
1198
1199
1200   For example, =e-ascii= back-end implements a filter that makes sure
1201   headlines end with two blank lines:
1202
1203   #+BEGIN_SRC emacs-lisp
1204   (org-export-define-backend e-ascii
1205     ...
1206     :filters-alist ((:filter-headline . org-e-ascii-filter-headline-blank-lines)
1207                     (:filter-section . org-e-ascii-filter-headline-blank-lines)))
1208
1209   (defun org-e-ascii-filter-section-blank-lines (headline back-end info)
1210     "Filter controlling number of blank lines after a section."
1211     (if (not (eq back-end 'e-ascii)) headline
1212       (let ((blanks (make-string 2 ?\n)))
1213         (replace-regexp-in-string "\n\\(?:\n[ \t]*\\)*\\'" blanks headline))))
1214   #+END_SRC
1215
1216 * The Toolbox
1217   :PROPERTIES:
1218   :CUSTOM_ID: toolbox
1219   :END:
1220
1221   A whole set of tools is available to help build new exporters.  Any
1222   function general enough to have its use across a couple of back-ends
1223   may be added here.
1224
1225   Many of them are high-level access to properties from the
1226   communication channel.  As such, they should be preferred to
1227   straight access to communication channel, when possible.
1228
1229 ** ~org-element-adopt-element~
1230    :PROPERTIES:
1231    :CUSTOM_ID: adopt-element
1232    :END:
1233
1234    Add an element to the contents of another element.
1235
1236    See also: [[#set-element][~org-element-set-element~]]
1237
1238 ** ~org-element-set-element~
1239    :PROPERTIES:
1240    :CUSTOM_ID: set-element
1241    :END:
1242
1243    Replace an element with another in the parse tree.
1244
1245    See also: [[#adopt-element][~org-element-adopt-element~]].
1246
1247 ** ~org-export-activate-smart-quotes~
1248    :PROPERTIES:
1249    :CUSTOM_ID: activate-smart-quotes
1250    :END:
1251
1252    Transform quotes and apostrophes into their "smart" counterpart in
1253    a given string.
1254
1255    It should be used after a check against ~:with-smart-quotes~ value
1256    in communication channel.
1257
1258    Since this function needs the original string, it may be useful to
1259    apply others transformations (i.e. characters protection) on a copy
1260    of that string and provide the pristine original string as the
1261    optional argument.
1262
1263    For example, in ~e-html~ back-end, it is necessary to protect "<",
1264    ">" and "&" characters before calling this function.  Here's an
1265    excerpt of the ~plain-text~ transcoder:
1266
1267    #+BEGIN_SRC emacs-lisp
1268    (let ((output text))
1269      ;; Protect following characters: <, >, &.
1270      (setq output (org-e-html-encode-plain-text output))
1271      ;; Handle smart quotes.  Be sure to provide original string since
1272      ;; OUTPUT may have been modified.
1273      (when (plist-get info :with-smart-quotes)
1274        (setq output (org-export-activate-smart-quotes output :html info text)))
1275      ...
1276      ;; Return value.
1277      output)
1278    #+END_SRC
1279
1280 ** ~org-export-collect-figures~
1281    :PROPERTIES:
1282    :CUSTOM_ID: collect-figures
1283    :END:
1284
1285    Return a list of all exportable figures in parse tree.
1286
1287    Used to build a table of figures.
1288    
1289    See also: [[#collect-headlines][~org-export-collect-headlines~]],
1290    [[#collect-tables][~org-export-collect-tables~]], [[#collect-listings][~org-export-collect-listings~]].
1291
1292 ** ~org-export-collect-footnote-definitions~
1293    :PROPERTIES:
1294    :CUSTOM_ID: collect-footnote-definitions
1295    :END:
1296
1297    List actually used footnotes definitions in order to add footnote
1298    listings throughout the transcoded data.
1299
1300    Feed it with the whole parse tree to get the full footnote listing.
1301    Feed it with the current headline to get partial footnote listing
1302    relative to that headline.
1303
1304    Number, label, if any, and definition are provided.
1305
1306    See also: [[#footnote-first-reference-p][~org-export-footnote-first-reference-p~]],
1307    [[#get-footnote-definition][~org-export-get-footnote-definition~]],
1308    [[#get-footnote-number][~org-export-get-footnote-number~]].
1309
1310 ** ~org-export-collect-headlines~
1311    :PROPERTIES:
1312    :CUSTOM_ID: collect-headlines
1313    :END:
1314
1315    Return a list of all exportable headlines, possibly limited to
1316    a certain depth.
1317
1318    Used to build a table of contents.
1319
1320    See also: [[#collect-tables][~org-export-collect-tables~]],
1321    [[#collect-figures][~org-export-collect-figures~]], [[#collect-listings][~org-export-collect-listings~]].
1322
1323 ** ~org-export-collect-listings~
1324    :PROPERTIES:
1325    :CUSTOM_ID: collect-listings
1326    :END:
1327
1328    Return a list of all exportable source blocks with a caption or
1329    a name in parse tree.
1330
1331    Used to build a table of listings.
1332
1333    See also: [[#collect-headlines][~org-export-collect-headlines~]],
1334    [[#collect-tables][~org-export-collect-tables~]], [[#collect-figures][~org-export-collect-figures~]].
1335 ** ~org-export-collect-tables~
1336    :PROPERTIES:
1337    :CUSTOM_ID: collect-tables
1338    :END:
1339
1340    Return a list of all exportable tables with a caption or a name in
1341    parse tree.
1342
1343    Used to build a table of tables.
1344
1345    See also: [[#collect-headlines][~org-export-collect-headlines~]],
1346    [[#collect-figures][~org-export-collect-figures~]], [[#collect-listings][~org-export-collect-listings~]].
1347
1348 ** ~org-export-data~
1349    :PROPERTIES:
1350    :CUSTOM_ID: data
1351    :END:
1352
1353    Transcode a given element, object, secondary string or string using
1354    current back-end.
1355
1356    It is used primarily to transcode secondary strings, like ~:title~.
1357    For example =e-beamer= back-end uses the following:
1358
1359    #+BEGIN_SRC emacs-lisp
1360    (defun org-e-beamer-template (contents info)
1361      (let ((title (org-export-data (plist-get info :title) info)))
1362        ...))
1363    #+END_SRC
1364
1365 ** ~org-export-first-sibling-p~
1366    :PROPERTIES:
1367    :CUSTOM_ID: first-sibling-p
1368    :END:
1369
1370    Non-nil if an headline is the first of its siblings.
1371
1372    Used to know when to start a list if headline's relative level is
1373    below the one specified in [[#headline-levels][~:headline-levels~]] property.
1374
1375    See also: [[#get-relative-level][~org-export-get-relative-level~]],
1376    [[#number-to-roman][~org-export-number-to-roman~]], [[#last-sibling-p][~org-export-last-sibling-p~]].
1377
1378 ** ~org-export-footnote-first-reference-p~
1379    :PROPERTIES:
1380    :CUSTOM_ID: footnote-first-reference-p
1381    :END:
1382
1383    Non-nil when a footnote reference if the first reference relative
1384    to its definition.
1385
1386    Used when a back-end needs to attach the footnote definition only
1387    to the first occurrence of the corresponding label.
1388
1389    See also: [[#collect-footnote-definitions][~org-export-collect-footnote-definitions~]],
1390    [[#get-footnote-definition][~org-export-get-footnote-definition~]],
1391    [[#get-footnote-number][~org-export-get-footnote-number~]].
1392
1393 ** ~org-export-format-code-default~
1394    :PROPERTIES:
1395    :CUSTOM_ID: format-code-default
1396    :END:
1397
1398    Return contents of a =src-block= or =example-block= element in
1399    a format suited for raw text or verbatim output.  More
1400    specifically, it takes care of line numbering and labels
1401    integration depending of element's switches, but no formatting is
1402    otherwise applied to source code.
1403
1404    See also: [[#format-code][~org-export-format-code~]], [[#unravel-code][~org-export-unravel-code~]].
1405
1406 ** ~org-export-format-code~
1407    :PROPERTIES:
1408    :CUSTOM_ID: format-code
1409    :END:
1410
1411    Helper function to format source code.  It applies a given function
1412    on each line of the code, passing current line number and
1413    associated code reference label, if any, as arguments.
1414
1415    See also: [[#format-code-default][~org-export-format-code-default~]], [[#get-loc][~org-export-get-loc~]],
1416    [[#unravel-code][~org-export-unravel-code~]].
1417
1418 ** ~org-export-format-timestamp~
1419    :PROPERTIES:
1420    :CUSTOM_ID: format-timestamp
1421    :END:
1422
1423    Format a timestamp object with an arbitrary format string.
1424
1425    See also: [[#timestamp-has-time-p][~org-export-timestamp-has-time-p~]],
1426    [[#split-timestamp-range][~org-export-split-timestamp-range~]],
1427    [[#translate-timestamp][~org-export-translate-timestamp~]].
1428
1429 ** ~org-export-get-caption~
1430    :PROPERTIES:
1431    :CUSTOM_ID: get-caption
1432    :END:
1433
1434    Return the caption of a given element, as a secondary string.  With
1435    an optional argument, return the short caption instead.
1436
1437    As an example, =e-ascii= back-end, when creating a list of
1438    listings, uses the following:
1439
1440    #+BEGIN_SRC emacs-lisp
1441    (defun org-e-ascii--list-listings (keyword info)
1442      (let ((title (org-e-ascii--translate "List of Listings" info)))
1443        (concat title "\n"
1444                ...
1445                (mapconcat
1446                 (lambda (src-block)
1447                   ...
1448                   ;; Use short name in priority, if available.
1449                   (let ((caption (or (org-export-get-caption src-block t)
1450                                      (org-export-get-caption src-block))))
1451                     (org-export-data caption info)
1452                     ...))
1453                 (org-export-collect-listings info) "\n"))))
1454    #+END_SRC
1455
1456    See also: [[#read-attribute][~org-export-read-attribute~]].
1457
1458 ** ~org-export-get-category~
1459    :PROPERTIES:
1460    :CUSTOM_ID: get-category
1461    :END:
1462
1463    Return category associated to a given element or object.  Unlike to
1464    the ~:category~ property from headlines and inlinetasks, this
1465    function handles inheritance and ~CATEGORY~ keywords.  Therefore,
1466    it should be the preferred way to retrieve a category during
1467    export.
1468
1469    See also: [[#get-node-property][~org-export-get-node-property~]].
1470
1471 ** ~org-export-get-coderef-format~
1472    :PROPERTIES:
1473    :CUSTOM_ID: get-coderef-format
1474    :END:
1475
1476    Return an appropriate format string for code reference links.
1477
1478    See also: [[#resolve-coderef][~org-export-resolve-coderef~]].
1479
1480 ** ~org-export-get-footnote-definition~
1481    :PROPERTIES:
1482    :CUSTOM_ID: get-footnote-definition
1483    :END:
1484
1485    Retrieve the footnote definition relative to a given footnote
1486    reference.
1487
1488    If the footnote definition in inline, it is returned as a secondary
1489    string.  Otherwise, it is full Org data.
1490
1491    See also: [[#collect-footnote-definitions][~org-export-collect-footnote-definitions~]],
1492    [[#footnote-first-reference-p][~org-export-footnote-first-reference-p~]],
1493    [[#get-footnote-number][~org-export-get-footnote-number~]].
1494
1495 ** ~org-export-get-footnote-number~
1496    :PROPERTIES:
1497    :CUSTOM_ID: get-footnote-number
1498    :END:
1499
1500    Return the ordinal attached to a footnote reference or definition.
1501
1502    See also: [[#collect-footnote-definitions][~org-export-collect-footnote-definitions~]],
1503    [[#footnote-first-reference-p][~org-export-footnote-first-reference-p~]],
1504    [[#get-footnote-definition][~org-export-get-footnote-definition~]].
1505
1506 ** ~org-export-get-genealogy~
1507    :PROPERTIES:
1508    :CUSTOM_ID: get-genealogy
1509    :END:
1510
1511    Return flat list of current object or element's parents from
1512    closest to farthest, along with their contents.
1513
1514    See also: [[#get-next-element][~org-export-get-next-element~]], [[#get-parent][~org-export-get-parent~]],
1515    [[#get-parent-headline][~org-export-get-parent-headline~]],
1516    [[#get-parent-paragraph][~org-export-get-parent-paragraph~]],
1517    [[#get-previous-element][~org-export-get-previous-element~]].
1518
1519 ** ~org-export-get-headline-number~
1520    :PROPERTIES:
1521    :CUSTOM_ID: get-headline-number
1522    :END:
1523
1524    Return the section number of an headline, as a list of integers.
1525
1526    See also: [[#headline-numbered-p][~org-export-headline-numbered-p~]],
1527    [[#number-to-roman][~org-export-number-to-roman~]].
1528
1529 ** ~org-export-get-loc~
1530    :PROPERTIES:
1531    :CUSTOM_ID: get-loc
1532    :END:
1533
1534    Return count of accumulated lines of code from previous
1535    line-numbered =example-block= and =src-block= elements, according
1536    to current element's switches.
1537
1538    In other words, the first line of code in the current block is
1539    supposed to be numbered as the returned value plus one, assuming
1540    its ~:number-lines~ properties is non-nil.
1541
1542    See also: [[#format-code][~org-export-format-code~]], [[#unravel-code][~org-export-unravel-code~]].
1543
1544 ** ~org-export-get-next-element~
1545    :PROPERTIES:
1546    :CUSTOM_ID: get-next-element
1547    :END:
1548
1549    Return element (resp. object or string) after an element
1550    (resp. object), or nil.
1551
1552    See also: [[#get-genealogy][~org-export-get-genealogy~]], [[#get-parent][~org-export-get-parent~]],
1553    [[#get-parent-headline][~org-export-get-parent-headline~]],
1554    [[#get-parent-paragraph][~org-export-get-parent-paragraph~]],
1555    [[#get-previous-element][~org-export-get-previous-element~]].
1556
1557 ** ~org-export-get-node-property~
1558    :PROPERTIES:
1559    :CUSTOM_ID: get-node-property
1560    :END:
1561
1562    Return the node property associated to an element or object.  If
1563    the element is an headline, this is equivalent to reading the
1564    property with ~org-element-property~.
1565
1566    Though, this function can optionally handle inheritance.
1567
1568    See also: [[#get-category][~org-export-get-category~]].
1569
1570 ** ~org-export-get-ordinal~
1571    :PROPERTIES:
1572    :CUSTOM_ID: get-ordinal
1573    :END:
1574
1575    Associate a sequence number to any object or element.  It is meant
1576    to be used to build captions.
1577
1578    Also, it could be applied on a fuzzy link's destination, since such
1579    links are expected to be replaced with the sequence number of their
1580    destination, provided they have no description.
1581
1582    Taken from =e-ascii= back-end, the following example shows how
1583    fuzzy links could be handled :
1584
1585    #+BEGIN_SRC emacs-lisp :exports code
1586    (let ((type (org-element-property :type link)))
1587      (cond
1588       ...
1589       ;; Do not apply a special syntax on fuzzy links pointing to targets.
1590       ((string= type "fuzzy")
1591        (let ((destination (org-export-resolve-fuzzy-link link info)))
1592          ;; Ignore invisible "#+TARGET: path".
1593          (unless (eq (org-element-type destination) 'keyword)
1594            ;; If link has a description, use it.
1595            (if (org-string-nw-p desc) desc
1596              (when destination
1597                (let ((number (org-export-get-ordinal destination info)))
1598                  (when number
1599                    (if (atom number) (number-to-string number)
1600                      (mapconcat 'number-to-string number ".")))))))))
1601       ...))
1602    #+END_SRC
1603
1604    See also : [[#resolve-fuzzy-link][~org-export-resolve-fuzzy-link~]]
1605
1606 ** ~org-export-get-parent-element~
1607    :PROPERTIES:
1608    :CUSTOM_ID: get-parent-paragraph
1609    :END:
1610
1611    Return the first element containing provided object, if any.
1612    Return nil otherwise.
1613
1614    See also: [[#get-genealogy][~org-export-get-genealogy~]], [[#get-parent][~org-export-get-parent~]],
1615    [[#get-parent-headline][~org-export-get-parent-headline~]],
1616    [[#get-previous-element][~org-export-get-previous-element~]], [[#get-next-element][~org-export-get-next-element~]].
1617
1618 ** ~org-export-get-parent-headline~
1619    :PROPERTIES:
1620    :CUSTOM_ID: get-parent-headline
1621    :END:
1622
1623    Return the headline containing provided element or object, if any.
1624    Return nil otherwise.
1625
1626    See also: [[#get-genealogy][~org-export-get-genealogy~]],
1627    [[#get-next-element][~org-export-get-next-element~]], [[#get-parent][~org-export-get-parent~]],
1628    [[#get-parent-paragraph][~org-export-get-parent-paragraph~]],
1629    [[#get-previous-element][~org-export-get-previous-element~]].
1630
1631 ** ~org-export-get-parent~
1632    :PROPERTIES:
1633    :CUSTOM_ID: get-parent
1634    :END:
1635
1636    Return closest element containing current element or object, if
1637    any.  Return nil otherwise.
1638
1639    See also: [[#get-genealogy][~org-export-get-genealogy~]],
1640    [[#get-next-element][~org-export-get-next-element~]], [[#get-parent-paragraph][~org-export-get-parent-paragraph~]],
1641    [[#get-parent-headline][~org-export-get-parent-headline~]],
1642    [[#get-previous-element][~org-export-get-previous-element~]].
1643
1644 ** ~org-export-get-previous-element~
1645    :PROPERTIES:
1646    :CUSTOM_ID: get-previous-element
1647    :END:
1648
1649    Return element (resp. object or string) before an element
1650    (resp. object), or nil.
1651
1652    See also: [[#get-genealogy][~org-export-get-genealogy~]],
1653    [[#get-next-element][~org-export-get-next-element~]], [[#get-parent][~org-export-get-parent~]],
1654    [[#get-parent-headline][~org-export-get-parent-headline~]],
1655    [[#get-parent-paragraph][~org-export-get-parent-paragraph~]].
1656
1657 ** ~org-export-get-relative-level~
1658    :PROPERTIES:
1659    :CUSTOM_ID: get-relative-level
1660    :END:
1661
1662    Return headline level, relatively to the lower headline level in
1663    the parsed tree.  It is meant to be used over ~:level~ headline's
1664    property.
1665
1666    See also:[[#first-sibling-p][~org-export-first-sibling-p~]],
1667     [[#get-headline-number][~org-export-get-headline-number~]],[[#headline-numbered-p][~org-export-headline-numbered-p~]],
1668     [[#last-sibling-p][~org-export-last-sibling-p~]].
1669
1670 ** ~org-export-get-table-cell-at~
1671    :PROPERTIES:
1672    :CUSTOM_ID: get-table-cell-at
1673    :END:
1674
1675    Return exportable cell object at a given position, or nil.  Hence,
1676    position ~(0 . 0)~ will always point to the first exportable cell
1677    in the table.
1678
1679    See also: [[#table-cell-address][~org-export-table-cell-address~]],
1680    [[#table-dimensions][~org-export-table-dimensions~]].
1681
1682 ** ~org-export-get-tags~
1683    :PROPERTIES:
1684    :CUSTOM_ID: get-tags
1685    :END:
1686
1687    Return list of exportable tags attached to a given headline or
1688    inlinetask element.  With an optional argument, tags are inherited
1689    from parent headlines and ~FILETAGS~ keywords.
1690
1691    In particular, it removes select tags and exclude tags. The
1692    function also accepts an arbitrary list of tags for further
1693    cleaning.
1694
1695    For example, =e-latex= back-end uses the following snippet in the
1696    inlinetask transcode function.
1697
1698    #+BEGIN_SRC emacs-lisp
1699    (let ((title (org-export-data (org-element-property :title inlinetask) info))
1700       (todo (and (plist-get info :with-todo-keywords)
1701                  (let ((todo (org-element-property :todo-keyword inlinetask)))
1702                    (and todo (org-export-data todo info)))))
1703       (todo-type (org-element-property :todo-type inlinetask))
1704       (tags (and (plist-get info :with-tags)
1705                  (org-export-get-tags inlinetask info)))
1706       (priority (and (plist-get info :with-priority)
1707                      (org-element-property :priority inlinetask))))
1708   ...)
1709    #+END_SRC
1710
1711 ** ~org-export-headline-numbered-p~
1712    :PROPERTIES:
1713    :CUSTOM_ID: headline-numbered-p
1714    :END:
1715
1716    Non nil when a given headline should be numbered.
1717
1718    See also: [[#get-headline-number][~org-export-get-headline-number~]],
1719    [[#get-relative-level][~org-export-get-relative-level~]].
1720
1721 ** ~org-export-inline-image-p~
1722    :PROPERTIES:
1723    :CUSTOM_ID: inline-image-p
1724    :END:
1725
1726    Non-nil when the link provided should be considered as an inline
1727    image.  Note that it always return nil when the link has
1728    a description.
1729
1730    It accepts an optional set of rules in order to tweak the
1731    definition of an inline image, which is, by default, any link
1732    targetting a local file whose extension is either "png", "jpeg",
1733    "jpg", "gif", "tiff", "tif", "xbm", "xpm", "pbm", "pgm" or "ppm".
1734
1735    A set of rules consists in an alist whose key is a type of link, as
1736    a string, and whose value is a regexp matching link's path.  As an
1737    example, =e-html= back-end uses the following rules:
1738
1739    #+BEGIN_SRC emacs-lisp
1740    '(("file" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\'")
1741      ("http" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\'")
1742      ("https" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\'"))
1743    #+END_SRC
1744
1745    See also: [[#solidify-link-text][~org-export-solidify-link-text~]],
1746    [[#get-coderef-format][~org-export-get-coderef-format~]], [[#resolve-fuzzy-link][~org-export-resolve-fuzzy-link~]].
1747
1748 ** ~org-export-last-sibling-p~
1749    :PROPERTIES:
1750    :CUSTOM_ID: last-sibling-p
1751    :END:
1752
1753    Non-nil if an headline is the last of its siblings.
1754
1755    Used to know when to close a list if headline's relative level is
1756    below the one specified in [[#headline-levels][~:headline-levels~]] property.
1757
1758    See also: [[#get-relative-level][~org-export-get-relative-level~]],
1759    [[#number-to-roman][~org-export-number-to-roman~]], [[#first-sibling-p][~org-export-first-sibling-p~]].
1760
1761 ** ~org-export-number-to-roman~
1762    :PROPERTIES:
1763    :CUSTOM_ID: number-to-roman
1764    :END:
1765
1766    Convert numbers to roman numbers. It can be used to provide roman
1767    numbering for headlines and numbered lists.
1768
1769    See also: [[#get-headline-number][~org-export-get-headline-number~]].
1770
1771 ** ~org-export-read-attribute~
1772    :PROPERTIES:
1773    :CUSTOM_ID: read-attribute
1774    :END:
1775
1776    Read a property from a given element as a plist.  It can be used to
1777    normalize affiliated keywords' syntax.  For example, the following
1778    affiliated keywords:
1779
1780    #+BEGIN_SRC org
1781    ,#+ATTR_HTML: :width 10 :height 5
1782    ,#+ATTR_HTML: :file "filename.ext"
1783    #+END_SRC
1784
1785    would be returned as:
1786
1787    #+BEGIN_SRC emacs-lisp
1788    '(:width 10 :height 5 :file "filename.ext")
1789    #+END_SRC
1790
1791    See also: [[#get-caption][~org-export-get-caption~]].
1792
1793 ** ~org-export-resolve-coderef~
1794    :PROPERTIES:
1795    :CUSTOM_ID: resolve-coderef
1796    :END:
1797
1798    Search for a code reference within ~src-block~ and ~example-block~
1799    elements.  Return corresponding --possibly accumulated-- line
1800    number, or reference itself, depending on container's switches.
1801
1802    See also : [[#get-coderef-format][~org-export-get-coderef-format~]],
1803    [[#resolve-fuzzy-link][~org-export-resolve-fuzzy-link~]], [[#resolve-id-link][~org-export-resolve-id-link~]],
1804    [[#resolve-radio-link][~org-export-resolve-radio-link~]].
1805
1806 ** ~org-export-resolve-fuzzy-link~
1807    :PROPERTIES:
1808    :CUSTOM_ID: resolve-fuzzy-link
1809    :END:
1810
1811    Search destination of a fuzzy link — i.e. it has a ~fuzzy~ ~:type~
1812    attribute – within the parsed tree, and return that element,
1813    object, or nil.
1814
1815    See also: [[#get-ordinal][~org-export-get-ordinal~]], [[#resolve-coderef][~org-export-resolve-coderef~]],
1816    [[#resolve-id-link][~org-export-resolve-id-link~]], [[#resolve-radio-link][~org-export-resolve-radio-link~]],
1817    [[#solidify-link-text][~org-export-solidify-link-text~]].
1818
1819 ** ~org-export-resolve-id-link~
1820    :PROPERTIES:
1821    :CUSTOM_ID: resolve-id-link
1822    :END:
1823
1824    Search headline targetted by an id link --- i.e. it has a ~id~ or
1825    ~custom-id~ ~:type~ attribute --- within the parse tree.  Return
1826    the matching headline in the tree, the name of the external file,
1827    as a string, or nil.
1828
1829    See also : [[#resolve-coderef][~org-export-resolve-coderef~]],
1830    [[#resolve-fuzzy-link][~org-export-resolve-fuzzy-link~]], [[#resolve-radio-link][~org-export-resolve-radio-link~]],
1831    [[#solidify-link-text][~org-export-solidify-link-text~]].
1832
1833 ** ~org-export-resolve-radio-link~
1834    :PROPERTIES:
1835    :CUSTOM_ID: resolve-radio-link
1836    :END:
1837
1838    Return first radio target object matching a radio link --- that is
1839    with a ~radio~ ~:type~ attribute --- in the parse tree, or nil.
1840
1841    Typically, target's contents are exported through ~org-export-data~
1842    and used as link description, as in the following excerpt from
1843    =org-e-latex.el=:
1844
1845    #+BEGIN_SRC emacs-lisp
1846    (defun org-e-latex-link (link desc info)
1847      (let* ((type (org-element-property :type link))
1848             ...)
1849        (cond
1850         ...
1851         ((string= type "radio")
1852          (let ((destination (org-export-resolve-radio-link link info)))
1853            (when destination
1854              (format "\\hyperref[%s]{%s}"
1855                      (org-export-solidify-link-text path)
1856                      (org-export-data (org-element-contents destination) info)))))
1857         ...)))
1858    #+END_SRC
1859
1860    See also : [[#resolve-coderef][~org-export-resolve-coderef~]],
1861    [[#resolve-fuzzy-link][~org-export-resolve-fuzzy-link~]], [[#resolve-id-link][~org-export-resolve-id-link~]],
1862    [[#solidify-link-text][~org-export-solidify-link-text~]].
1863
1864 ** ~org-export-solidify-link-text~
1865    :PROPERTIES:
1866    :CUSTOM_ID: solidify-link-text
1867    :END:
1868
1869    Normalize a string, replacing most non-standard characters with
1870    hyphens.
1871
1872    Used to turn targets names into safer versions for links.
1873
1874    See also: [[#inline-image-p][~org-export-inline-image-p~]],
1875    [[#resolve-id-link][~org-export-resolve-id-link~]], [[#resolve-fuzzy-link][~org-export-resolve-fuzzy-link~]],
1876    [[#resolve-radio-link][~org-export-resolve-radio-link~]].
1877
1878 ** ~org-export-table-cell-address~
1879    :PROPERTIES:
1880    :CUSTOM_ID: table-cell-address
1881    :END:
1882
1883    Return row and column of a given cell object.  Positions are
1884    0-indexed and only exportable rows and columns are considered.  The
1885    function returns nil if called on a non-exportable cell.
1886
1887    See also: [[#get-table-cell-at][~org-export-get-table-cell-at~]],
1888    [[#table-dimensions][~org-export-table-dimensions~]].
1889
1890 ** ~org-export-table-cell-alignment~
1891    :PROPERTIES:
1892    :CUSTOM_ID: table-cell-alignment
1893    :END:
1894
1895    Return expected alignment for the contents of a given cell object.
1896    It can be either ~left~, ~right~ or ~center~.
1897
1898    See also: [[#table-cell-borders][~org-export-table-cell-borders~]],
1899    [[#table-cell-width][~org-export-table-cell-width~]].
1900
1901 ** ~org-export-table-cell-borders~
1902    :PROPERTIES:
1903    :CUSTOM_ID: table-cell-borders
1904    :END:
1905
1906    Indicate expected borders for a given cell object.  When non-nil,
1907    return value is a list of symbols among ~top~, ~bottom~, ~above~,
1908    ~below~, ~left~ and ~right~.
1909
1910    Special values ~top~ and ~bottom~ only happen for cells in,
1911    respectively, the first and the last exportable rows.
1912
1913    See also: [[#table-cell-alignment][~org-export-table-cell-alignment~]],
1914    [[#table-cell-width][~org-export-table-cell-width~]].
1915
1916 ** ~org-export-table-cell-ends-colgroup-p~
1917    :PROPERTIES:
1918    :CUSTOM_ID: table-cell-ends-colgroup-p
1919    :END:
1920
1921    Non-nil when a table cell object ends a column group.
1922
1923    See also: [[#table-cell-starts-colgroup-p][~org-export-table-cell-starts-colgroup-p~]].
1924
1925 ** ~org-export-table-cell-starts-colgroup-p~
1926    :PROPERTIES:
1927    :CUSTOM_ID: table-cell-starts-colgroup-p
1928    :END:
1929
1930    Non-nil when a table cell object starts a column group.
1931
1932    See also: [[#table-cell-ends-colgroup-p][~org-export-table-cell-ends-colgroup-p~]].
1933
1934 ** ~org-export-table-cell-width~
1935    :PROPERTIES:
1936    :CUSTOM_ID: table-cell-width
1937    :END:
1938
1939    Return expected width for contents of a given cell object.
1940
1941    Only width specified explicitely through meta-data is considered.
1942    If no such information can be found, return nil instead.
1943
1944    Some back-end may still need to know the actual width of exported
1945    cell's contents in order to compute column's width.  In that case,
1946    every cell in the column must be transcoded in order to find the
1947    widest one.  The snippet below, extracted from =org-e-ascii.el=
1948    illustrates a possible implementation.
1949
1950    #+BEGIN_SRC emacs-lisp
1951    (or (org-export-table-cell-width table-cell info)
1952        (let* ((max-width 0)
1953               (table (org-export-get-parent-table table-cell info))
1954               (specialp (org-export-table-has-special-column-p table))
1955               (col (cdr (org-export-table-cell-address table-cell info))))
1956          (org-element-map
1957           table 'table-row
1958           (lambda (row)
1959             ;; For each exportable row, get the cell at column COL and
1960             ;; transcode its contents.  Then compare its length with
1961             ;; MAX-WIDTH and keep the greater of two.
1962             (setq max-width
1963                   (max (length
1964                         (org-export-data
1965                          (org-element-contents
1966                           (elt (if specialp (car (org-element-contents row))
1967                                  (org-element-contents row))
1968                                col))
1969                          info))
1970                        max-width)))
1971           info)
1972          max-width))
1973    #+END_SRC
1974
1975    See also: [[#table-cell-alignment][~org-export-table-cell-alignment~]],
1976    [[#table-cell-borders][~org-export-table-cell-borders~]].
1977
1978 ** ~org-export-table-dimensions~
1979    :PROPERTIES:
1980    :CUSTOM_ID: table-dimensions
1981    :END:
1982
1983    Return the number of exportable rows and columns in a given table.
1984
1985    See also: [[#get-table-cell-at][~org-export-get-table-cell-at~]],
1986    [[#table-cell-address][~org-export-table-cell-address~]].
1987
1988 ** ~org-export-table-has-header-p~
1989    :PROPERTIES:
1990    :CUSTOM_ID: table-has-header-p
1991    :END:
1992
1993    Non-nil when table has at least two row groups.
1994
1995    See also: [[#table-has-special-column-p][~org-export-table-has-special-column-p~]],
1996    [[#table-row-is-special-p][~org-export-table-row-is-special-p~]].
1997
1998 ** ~org-export-table-has-special-column-p~
1999    :PROPERTIES:
2000    :CUSTOM_ID: table-has-special-column-p
2001    :END:
2002
2003    Non-nil when first column in the table only contains meta-data.
2004
2005    See also: [[#table-has-header-p][~org-export-table-has-header-p~]],
2006    [[#table-row-is-special-p][~org-export-table-row-is-special-p~]].
2007
2008 ** ~org-export-table-row-ends-header-p~
2009    :PROPERTIES:
2010    :CUSTOM_ID: table-row-ends-header-p
2011    :END:
2012
2013    Non-nil when a table row element ends table's header.
2014
2015    See also: [[#table-row-ends-rowgroup-p][~org-export-table-row-ends-rowgroup-p~]],
2016    [[#table-row-group][~org-export-table-row-group~]],
2017    [[#table-row-starts-header-p][~org-export-table-row-starts-header-p~]],
2018    [[#table-row-starts-rowgroup-p][~org-export-table-row-starts-rowgroup-p~]].
2019
2020 ** ~org-export-table-row-ends-rowgroup-p~
2021    :PROPERTIES:
2022    :CUSTOM_ID: table-row-ends-rowgroup-p
2023    :END:
2024
2025    Non-nil when a a table row element ends a rowgroup, header
2026    included.
2027
2028    See also: [[#table-cell-starts-ends-header-p][~org-export-table-row-ends-header-p~]],
2029    [[#table-row-group][~org-export-table-row-group~]],
2030    [[#table-row-starts-header-p][~org-export-table-row-starts-header-p~]],
2031    [[#table-row-starts-rowgroup-p][~org-export-table-row-starts-rowgroup-p~]].
2032
2033 ** ~org-export-table-row-group~
2034    :PROPERTIES:
2035    :CUSTOM_ID: table-row-group
2036    :END:
2037
2038    Return row group number for a given table row element.
2039
2040    See also: [[#table-cell-starts-ends-header-p][~org-export-table-row-ends-header-p~]],
2041    [[#table-row-ends-rowgroup-p][~org-export-table-row-ends-rowgroup-p~]],
2042    [[#table-row-starts-header-p][~org-export-table-row-starts-header-p~]],
2043    [[#table-row-starts-rowgroup-p][~org-export-table-row-starts-rowgroup-p~]].
2044
2045 ** ~org-export-table-row-is-special-p~
2046    :PROPERTIES:
2047    :CUSTOM_ID: table-row-is-special-p
2048    :END:
2049
2050    Non-nil a given table row element only contains meta-data.
2051
2052    See also: [[#table-has-header-p][~org-export-table-has-header-p~]],
2053    [[#table-has-special-column-p][~org-export-table-has-special-column-p~]].
2054
2055 ** ~org-export-table-row-starts-header-p~
2056    :PROPERTIES:
2057    :CUSTOM_ID: table-row-starts-header-p
2058    :END:
2059
2060    Non-nil when a table row element starts table's header.
2061
2062    See also: [[#table-cell-starts-ends-header-p][~org-export-table-row-ends-header-p~]],
2063    [[#table-row-ends-rowgroup-p][~org-export-table-row-ends-rowgroup-p~]],
2064    [[#table-row-group][~org-export-table-row-group~]],
2065    [[#table-row-starts-rowgroup-p][~org-export-table-row-starts-rowgroup-p~]].
2066
2067 ** ~org-export-table-row-starts-rowgroup-p~
2068    :PROPERTIES:
2069    :CUSTOM_ID: table-row-starts-rowgroup-p
2070    :END:
2071
2072    Non-nil when a table row element starts a rowgroup, header
2073    included.
2074
2075    See also: [[#table-cell-starts-ends-header-p][~org-export-table-row-ends-header-p~]],
2076    [[#table-row-ends-rowgroup-p][~org-export-table-row-ends-rowgroup-p~]],
2077    [[#table-row-group][~org-export-table-row-group~]],
2078    [[#table-row-starts-header-p][~org-export-table-row-starts-header-p~]].
2079
2080 ** ~org-export-timestamp-has-time-p~
2081    :PROPERTIES:
2082    :CUSTOM_ID: timestamp-has-time-p
2083    :END:
2084
2085    Non-nil when a timestamp has hours and minutes.
2086
2087    It is useful to know which format strings to use for a timestampn.
2088
2089    See also: [[#format-timestamp][~org-export-format-timestamp~]].
2090
2091 ** ~org-export-translate~
2092
2093    Translate a string, i.e. "Table of Contents", according to language
2094    specification.
2095
2096    Refer to ~org-export-dictionary~ variable for the list of all
2097    supported strings.
2098
2099 ** ~org-export-split-timestamp-range~
2100    :PROPERTIES:
2101    :CUSTOM_ID: split-timestamp-range
2102    :END:
2103
2104    Extract the date start or end from a timestamp range.
2105
2106    See also: [[#format-timestamp][~org-export-format-timestamp~]],
2107    [[#translate-timestamp][~org-export-translate-timestamp~]].
2108
2109 ** ~org-export-translate-timestamp~
2110    :PROPERTIES:
2111    :CUSTOM_ID: translate-timestamp
2112    :END:
2113
2114    Apply ~org-translate-time~ on a timestamp object.
2115
2116    According to ~org-time-stamp-custom-formats~ documentation:
2117
2118    #+BEGIN_QUOTE
2119    The custom formats are also honored by export commands, if custom
2120    time display is turned on at the time of export.
2121    #+END_QUOTE
2122
2123    Therefore, this function is applied by default on timestamps in
2124    many back-ends. For example, in =e-latex=:
2125
2126    #+BEGIN_SRC emacs-lisp
2127    (defun org-e-latex-timestamp (timestamp contents info)
2128      "Transcode a TIMESTAMP object from Org to LaTeX.
2129    CONTENTS is nil.  INFO is a plist holding contextual
2130    information."
2131      (let ((value (org-e-latex-plain-text
2132                    (org-export-translate-timestamp timestamp) info)))
2133        (case (org-element-property :type timestamp)
2134          ((active active-range) (format org-e-latex-active-timestamp-format value))
2135          ((inactive inactive-range)
2136           (format org-e-latex-inactive-timestamp-format value))
2137          (otherwise (format org-e-latex-diary-timestamp-format value)))))
2138    #+END_SRC
2139
2140    See also: [[#format-timestamp][~org-export-format-timestamp~]],
2141    [[#split-timestamp-range][~org-export-split-timestamp-range~]].
2142
2143 ** ~org-export-unravel-code~
2144    :PROPERTIES:
2145    :CUSTOM_ID: unravel-code
2146    :END:
2147
2148    Clean source code from an =example-block= or a =src-block= element
2149    and extract code references out of it.
2150
2151    Its purpose is to allow to transform raw source code first and then
2152    integrate line numbers or references back into the final output.
2153    That final task can be achieved with the help of
2154    ~org-export-format-code~ function.
2155
2156    See also: [[#format-code][~org-export-format-code~]],
2157    [[#format-code-default][~org-export-format-code-default~]], [[#get-loc][~org-export-get-loc~]].
2158
2159 ** ~org-export-with-backend~
2160    :PROPERTIES:
2161    :CUSTOM_ID: with-backend
2162    :END:
2163
2164    Export an element or object using locally another back-end.
2165
2166    In a derived back-end, it may be used as a fall-back function once
2167    all specific cases have been handled.  Thus, =e-beamer= back-end,
2168    derived from =e-latex=, takes care of every internal link type and
2169    delagates everything else to its parent back-end:
2170
2171    #+BEGIN_SRC emacs-lisp
2172    (let ((type (org-element-property :type link))
2173          (path (org-element-property :path link)))
2174      (cond
2175       ;; Handle every internal link type, but be careful to ignore "id"
2176       ;; type links pointing to external files.
2177       ((equal type "radio") ...)
2178       ((and (member type '("custom-id" "fuzzy" "id"))
2179             (let ((destination (if (string= type "fuzzy")
2180                                    (org-export-resolve-fuzzy-link link info)
2181                                  (org-export-resolve-id-link link info))))
2182               (case (org-element-type destination)
2183                 (headline ...)
2184                 (target ...)))))
2185       ;; Otherwise, use `e-latex' back-end.
2186       (t (org-export-with-backend 'e-latex link contents info))))
2187    #+END_SRC
2188
2189
2190 # Local Variables:
2191 # sentence-end-double-space: t
2192 # End: