From d3cd3720d5a0a2993d37a43046c36535cdaf8bce Mon Sep 17 00:00:00 2001 From: Jambunathan K Date: Tue, 20 Mar 2012 19:53:28 +0530 Subject: [PATCH 1/6] org-odt.el: Resolve headline links as sec nos only if num:t * lisp/org-odt.el (org-odt-format-org-link): Resolve links to headlines as section numbers only if section numbering is on. --- lisp/org-odt.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/org-odt.el b/lisp/org-odt.el index 114988f8e..6e3a24c85 100644 --- a/lisp/org-odt.el +++ b/lisp/org-odt.el @@ -1669,6 +1669,7 @@ ATTR is a string of other attributes of the a element." ;; links to headlines ((and (string= type "") (or (not thefile) (string= thefile "")) + (plist-get org-lparse-opt-plist :section-numbers) (setq sec-frag fragment) (org-find-text-property-in-string 'org-no-description fragment) (or (string-match "\\`sec\\(\\(-[0-9]+\\)+\\)" sec-frag) From f2fc168a73a87de4a5e2182f52947ead9fd6fb62 Mon Sep 17 00:00:00 2001 From: Jambunathan K Date: Tue, 20 Mar 2012 20:23:47 +0530 Subject: [PATCH 2/6] org.texi (Literal examples in ODT export): Update * doc/org.texi (Literal examples in ODT export): htmlfontify.el in Emacs-24.1 now supports fontification. So ODT source blocks will be fontified by default. (Evaluating code blocks, Evaluating code blocks): Whitespace-only change. --- doc/org.texi | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/doc/org.texi b/doc/org.texi index fae2c7e2d..3324888a3 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -11214,30 +11214,21 @@ or @subsection Literal examples in ODT export Export of literal examples (@pxref{Literal examples}) with full fontification -is supported. This feature is enabled by default and is activated -automatically if an enhanced version of @file{htmlfontify.el} is available in -the @code{load-path}.@footnote{The @file{htmlfontify.el} that ships with -standard Emacs <= 24.1 has no support for ODT fontification. A -copy of the proposed version is available as an attachment to -@url{http://debbugs.gnu.org/cgi/bugreport.cgi?msg=5;filename=htmlfontify.el;att=9;bug=9914, -Emacs Bug #9914}.} +is supported. Internally, the exporter relies on @file{htmlfontify.el} to +generate all style definitions needed for a fancy listing.@footnote{Your +@file{htmlfontify.el} library must atleast be at Emacs 24.1 levels for +fontification to be turned on.} The auto-generated styles have @samp{OrgSrc} +as prefix and inherit their color from the faces used by Emacs +@code{font-lock} library for the source language. @vindex org-export-odt-fontify-srcblocks - -The character styles used for fontification of the literal blocks are -auto-generated by the exporter in conjunction with @file{htmlfontify.el} -library and need not be included in the default @file{styles.xml} file. -These auto-generated styles have the @samp{OrgSrc} prefix and inherit their color -based on the face used by Emacs @code{font-lock} library. - -@vindex org-export-odt-create-custom-styles-for-srcblocks -If you prefer to use your own custom styles for fontification and disable -their auto-generation altogether, you can do so by customizing the variable +If you prefer to use your own custom styles for fontification, you can do so +by customizing the variable @code{org-export-odt-create-custom-styles-for-srcblocks}. -You can turn off fontification support for literal examples by customizing -the variable @code{org-export-odt-fontify-srcblocks}. - +@vindex org-export-odt-create-custom-styles-for-srcblocks +You can turn off fontification of literal examples by customizing the +variable @code{org-export-odt-fontify-srcblocks}. @node Advanced topics in ODT export, , Literal examples in ODT export, OpenDocument Text export @subsection Advanced topics in ODT export @@ -12663,7 +12654,7 @@ Org mode buffer. The results of evaluation are placed following a line that begins by default with @code{#+RESULTS} and optionally a cache identifier and/or the name of the evaluated code block. The default value of @code{#+RESULTS} can be changed with the customizable variable -@code{org-babel-results-keyword}. +@code{org-babel-results-keyword}. By default, the evaluation facility is only enabled for Lisp code blocks specified as @code{emacs-lisp}. However, source code blocks in many languages From aa05c14fe9f41782d253f9807429a0756be7f059 Mon Sep 17 00:00:00 2001 From: Jambunathan K Date: Tue, 20 Mar 2012 21:11:21 +0530 Subject: [PATCH 3/6] org-odt.el: Remove stale code * lisp/org-odt.el (org-odt-category-map-alist): Update docstring. (org-export-odt-user-categories) (org-export-odt-get-category-from-label) (org-odt-get-label-category-and-style): Remove. (org-odt-add-label-definition): Propagate above changes. --- lisp/org-odt.el | 48 +++--------------------------------------------- 1 file changed, 3 insertions(+), 45 deletions(-) diff --git a/lisp/org-odt.el b/lisp/org-odt.el index 6e3a24c85..f7d17e484 100644 --- a/lisp/org-odt.el +++ b/lisp/org-odt.el @@ -2073,58 +2073,16 @@ specifiers - %e and %n. %e is replaced with the CATEGORY-NAME. ;; ("__DvipngImage__" "Equation" "category-and-value") ) "Map a CATEGORY-HANDLE to CATEGORY-NAME and LABEL-STYLE. -This is an alist where each element is of the form +This is an list where each element is of the form \\(CATEGORY-HANDLE CATEGORY-NAME LABEL-STYLE\\). CATEGORY_HANDLE -could either be one of the internal handles (as seen above) or be -derived from the \"#+LABEL:\" specification. See -`org-export-odt-get-category-from-label'. CATEGORY-NAME and +is one of the internal handles, as seen above. CATEGORY-NAME and LABEL-STYLE are used for generating ODT labels. See `org-odt-label-styles'.") -(defvar org-export-odt-user-categories - '("Illustration" "Table" "Text" "Drawing" "Equation" "Figure")) - -(defvar org-export-odt-get-category-from-label nil - "Should category of label be inferred from label itself. -When this option is non-nil, a label is parsed in to two -component parts delimited by a \":\" (colon) as shown here - -#+LABEL:[CATEGORY-HANDLE:]EXTRA. The CATEGORY-HANDLE is mapped -to a CATEGORY-NAME and LABEL-STYLE using -`org-odt-category-map-alist'. (If no such map is provided and -CATEGORY-NAME is set to CATEGORY-HANDLE and LABEL-STYLE is set to -\"category-and-value\"). If CATEGORY-NAME so obtained is listed -under `org-export-odt-user-categories' then the user specified -styles are used. Otherwise styles as determined by the internal -CATEGORY-HANDLE is used. See -`org-odt-get-label-category-and-style' for details.") - -(defun org-odt-get-label-category-and-style (label default-category) - "See `org-export-odt-get-category-from-label'." - (let ((default-category-map - (assoc default-category org-odt-category-map-alist)) - user-category user-category-map category) - (cond - ((not org-export-odt-get-category-from-label) - default-category-map) - ((not (setq user-category - (save-match-data - (and (string-match "\\`\\(.*\\):.+" label) - (match-string 1 label))))) - default-category-map) - (t - (setq user-category-map - (or (assoc user-category org-odt-category-map-alist) - (list nil user-category "category-and-value")) - category (nth 1 user-category-map)) - (if (member category org-export-odt-user-categories) - user-category-map - default-category-map))))) - (defun org-odt-add-label-definition (label default-category) "Create an entry in `org-odt-entity-labels-alist' and return it." (setq label (substring-no-properties label)) - (let* ((label-props (org-odt-get-label-category-and-style - label default-category)) + (let* ((label-props (assoc default-category org-odt-category-map-alist)) (category (nth 1 label-props)) (counter category) (label-style (nth 2 label-props)) From fee7de7c5697b8612a7e16e35af993917b9ba8c3 Mon Sep 17 00:00:00 2001 From: Jambunathan K Date: Tue, 20 Mar 2012 23:26:12 +0530 Subject: [PATCH 4/6] org-odt.el: Make category component of captions configurable * lisp/org-odt.el (org-export-odt-category-strings): New custom variable. (org-odt-category-map-alist): Modify interpretation. Don't use the same field to double up as both a OpenDocument variable and a category string. Entries in this list now specify only the OpenDocument variable. Category strings are obtained through an indirect lookup of `org-export-odt-category-strings'. Use same OpenDocument variables as what LibreOffice uses for various entities. Fix docstring. (org-odt-add-label-definition) (org-odt-format-label-definition) (org-odt-format-label-reference): Propagate above changes. Fix for the following bug: http://lists.gnu.org/archive/html/emacs-orgmode/2012-03/msg00628.html --- lisp/org-odt.el | 92 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 19 deletions(-) diff --git a/lisp/org-odt.el b/lisp/org-odt.el index f7d17e484..756517295 100644 --- a/lisp/org-odt.el +++ b/lisp/org-odt.el @@ -2063,51 +2063,105 @@ specifiers - %e and %n. %e is replaced with the CATEGORY-NAME. %n is replaced with SEQNO. See `org-odt-format-label-reference'.") +(defcustom org-export-odt-category-strings + '(("en" "Table" "Figure" "Equation" "Equation")) + "Specify category strings for various captionable entities. +Captionable entity can be one of a Table, an Embedded Image, a +LaTeX fragment (generated with dvipng) or a Math Formula. + +For example, when `org-export-default-language' is \"en\", an +embedded image will be captioned as \"Figure 1: Orgmode Logo\". +If you want the images to be captioned instead as \"Illustration +1: Orgmode Logo\", then modify the entry for \"en\" as shown +below. + + \(setq org-export-odt-category-strings + '\(\(\"en\" \"Table\" \"Illustration\" + \"Equation\" \"Equation\"\)\)\)" + :group 'org-export-odt + :version "24.1" + :type '(repeat (list (string :tag "Language tag") + (choice :tag "Table" + (const :tag "Use Default" nil) + (string :tag "Category string")) + (choice :tag "Figure" + (const :tag "Use Default" nil) + (string :tag "Category string")) + (choice :tag "Math Formula" + (const :tag "Use Default" nil) + (string :tag "Category string")) + (choice :tag "Dvipng Image" + (const :tag "Use Default" nil) + (string :tag "Category string"))))) + (defvar org-odt-category-map-alist '(("__Table__" "Table" "value") - ("__Figure__" "Figure" "value") - ("__MathFormula__" "Equation" "text") + ("__Figure__" "Illustration" "value") + ("__MathFormula__" "Text" "text") ("__DvipngImage__" "Equation" "value") ;; ("__Table__" "Table" "category-and-value") ;; ("__Figure__" "Figure" "category-and-value") ;; ("__DvipngImage__" "Equation" "category-and-value") ) - "Map a CATEGORY-HANDLE to CATEGORY-NAME and LABEL-STYLE. -This is an list where each element is of the form -\\(CATEGORY-HANDLE CATEGORY-NAME LABEL-STYLE\\). CATEGORY_HANDLE -is one of the internal handles, as seen above. CATEGORY-NAME and -LABEL-STYLE are used for generating ODT labels. See -`org-odt-label-styles'.") + "Map a CATEGORY-HANDLE to OD-VARIABLE and LABEL-STYLE. +This is a list where each entry is of the form \\(CATEGORY-HANDLE +OD-VARIABLE LABEL-STYLE\\). CATEGORY_HANDLE identifies the +captionable entity in question. OD-VARIABLE is the OpenDocument +sequence counter associated with the entity. These counters are +declared within +\"...\" block of +`org-export-odt-content-template-file'. LABEL-STYLE is a key +into `org-odt-label-styles' and specifies how a given entity +should be captioned and referenced. + +The position of a CATEGORY-HANDLE in this list is used as an +index in to per-language entry for +`org-export-odt-category-strings' to retrieve a CATEGORY-NAME. +This CATEGORY-NAME is then used for qualifying the user-specified +captions on export.") (defun org-odt-add-label-definition (label default-category) "Create an entry in `org-odt-entity-labels-alist' and return it." - (setq label (substring-no-properties label)) (let* ((label-props (assoc default-category org-odt-category-map-alist)) - (category (nth 1 label-props)) - (counter category) - (label-style (nth 2 label-props)) - (sequence-var (intern (mapconcat - 'downcase - (org-split-string counter) "-"))) + ;; identify the sequence number + (counter (nth 1 label-props)) + (sequence-var (intern counter)) (seqno (1+ (or (plist-get org-odt-entity-counts-plist sequence-var) 0))) - (label-props (list label category seqno label-style))) + ;; assign an internal label, if user has not provided one + (label (if label (substring-no-properties label) + (format "%s-%s" default-category seqno))) + ;; identify label style + (label-style (nth 2 label-props)) + ;; grok language setting + (en-strings (assoc-default "en" org-export-odt-category-strings)) + (lang (plist-get org-lparse-opt-plist :language)) + (lang-strings (assoc-default lang org-export-odt-category-strings)) + ;; retrieve localized category sting + (pos (- (length org-odt-category-map-alist) + (length (memq label-props org-odt-category-map-alist)))) + (category (or (nth pos lang-strings) (nth pos en-strings))) + (label-props (list label category counter seqno label-style))) + ;; synchronize internal counters (setq org-odt-entity-counts-plist (plist-put org-odt-entity-counts-plist sequence-var seqno)) + ;; stash label properties for later retrieval (push label-props org-odt-entity-labels-alist) label-props)) -(defun org-odt-format-label-definition (caption label category seqno label-style) +(defun org-odt-format-label-definition (caption label category counter + seqno label-style) (assert label) (format-spec (cadr (assoc-string label-style org-odt-label-styles t)) `((?e . ,category) (?n . ,(org-odt-format-tags '("" . "") - (format "%d" seqno) label category category)) + (format "%d" seqno) label counter counter)) (?c . ,(or (and caption (concat ": " caption)) ""))))) -(defun org-odt-format-label-reference (label category seqno label-style) +(defun org-odt-format-label-reference (label category counter + seqno label-style) (assert label) (save-match-data (let* ((fmt (cddr (assoc-string label-style org-odt-label-styles t))) From 1cc2af2f2534efc95d76bfefbb47a833a4a3b8cd Mon Sep 17 00:00:00 2001 From: Jambunathan K Date: Wed, 21 Mar 2012 02:13:55 +0530 Subject: [PATCH 5/6] org.texi: Udpate ODT section * doc/org.texi (Links in ODT export): Update. (Labels and captions in ODT export): New node. --- doc/org.texi | 81 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 14 deletions(-) diff --git a/doc/org.texi b/doc/org.texi index 3324888a3..6c137274d 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -613,13 +613,14 @@ DocBook export OpenDocument Text export * Pre-requisites for ODT export:: What packages ODT exporter relies on -* ODT export commands:: How to invoke ODT export -* Extending ODT export:: How to produce @samp{doc}, @samp{pdf} files +* ODT export commands:: How to invoke ODT export +* Extending ODT export:: How to produce @samp{doc}, @samp{pdf} files * Applying custom styles:: How to apply custom styles to the output -* Links in ODT export:: How links will be interpreted and formatted -* Tables in ODT export:: How Tables are exported -* Images in ODT export:: How to insert images +* Links in ODT export:: How links will be interpreted and formatted +* Tables in ODT export:: How Tables are exported +* Images in ODT export:: How to insert images * Math formatting in ODT export:: How @LaTeX{} fragments are formatted +* Labels and captions in ODT export:: How captions are rendered * Literal examples in ODT export:: How source and example blocks are formatted * Advanced topics in ODT export:: Read this if you are a power user @@ -10799,13 +10800,14 @@ are compatible with LibreOffice 3.4. @menu * Pre-requisites for ODT export:: What packages ODT exporter relies on -* ODT export commands:: How to invoke ODT export -* Extending ODT export:: How to produce @samp{doc}, @samp{pdf} files +* ODT export commands:: How to invoke ODT export +* Extending ODT export:: How to produce @samp{doc}, @samp{pdf} files * Applying custom styles:: How to apply custom styles to the output -* Links in ODT export:: How links will be interpreted and formatted -* Tables in ODT export:: How Tables are exported -* Images in ODT export:: How to insert images +* Links in ODT export:: How links will be interpreted and formatted +* Tables in ODT export:: How Tables are exported +* Images in ODT export:: How to insert images * Math formatting in ODT export:: How @LaTeX{} fragments are formatted +* Labels and captions in ODT export:: How captions are rendered * Literal examples in ODT export:: How source and example blocks are formatted * Advanced topics in ODT export:: Read this if you are a power user @end menu @@ -10966,8 +10968,15 @@ the factory settings. @subsection Links in ODT export @cindex tables, in DocBook export -The ODT exporter creates cross-references (aka bookmarks) for -internal links. It creates Internet-style links for all other links. +ODT exporter creates native cross-references for internal links. It creates +Internet-style links for all other links. + +A link with no description and destined to a regular (un-itemized) outline +heading is replaced with a cross-reference and section number of the heading. + +A @samp{\ref@{label@}}-style reference to an image, table etc. is replaced +with a cross-reference and sequence number of the labelled entity. +@xref{Labels and captions in ODT export}. @node Tables in ODT export, Images in ODT export, Links in ODT export, OpenDocument Text export @subsection Tables in ODT export @@ -11116,7 +11125,7 @@ To create an image that is anchored to a page, do the following: [[./img.png]] @end example -@node Math formatting in ODT export, Literal examples in ODT export, Images in ODT export, OpenDocument Text export +@node Math formatting in ODT export, Labels and captions in ODT export, Images in ODT export, OpenDocument Text export @subsection Math formatting in ODT export The ODT exporter has special support for handling math. @@ -11210,7 +11219,51 @@ or [[./equation.odf]] @end example -@node Literal examples in ODT export, Advanced topics in ODT export, Math formatting in ODT export, OpenDocument Text export +@node Labels and captions in ODT export, Literal examples in ODT export, Math formatting in ODT export, OpenDocument Text export +@subsection Labels and captions in ODT export + +You can label and caption various category of objects - an inline image, a +table, a @LaTeX{} fragment or a Math formula - using @code{#+LABEL} and +@code{#+CAPTION} lines. @xref{Images and tables}. ODT exporter enumerates +each labelled or captioned object of a given category separately. As a +result, each such object is assigned a sequence number based on order of it's +appearance in the Org file. + +In the exported document, a user-provided caption is augmented with the +category and sequence number. Consider the following inline image in an Org +file. + +@example +#+CAPTION: Bell curve +#+LABEL: fig:SED-HR4049 +[[./img/a.png]] +@end example + +It could be rendered as shown below in the exported document. + +@example +Figure 2: Bell curve +@end example + +@vindex org-export-odt-category-strings +You can modify the category component of the caption by customizing the +variable @code{org-export-odt-category-strings}. For example, to tag all +embedded images with the string @samp{Illustration} (instead of the default +@samp{Figure}) use the following setting. + +@lisp +(setq org-export-odt-category-strings + '(("en" "Table" "Illustration" "Equation" "Equation"))) +@end lisp + +With this, previous image will be captioned as below in the exported +document. + +@example +Illustration 2: Bell curve +@end example + +@node Literal examples in ODT export, Advanced topics in ODT export, Labels and captions in ODT export, OpenDocument Text export @subsection Literal examples in ODT export Export of literal examples (@pxref{Literal examples}) with full fontification From aa20053803333df7295a81e641683a0977dcaff5 Mon Sep 17 00:00:00 2001 From: Jambunathan K Date: Wed, 21 Mar 2012 02:47:55 +0530 Subject: [PATCH 6/6] org.texi (Customizing tables in ODT export): Fix errors * doc/org.texi (Customizing tables in ODT export): Correct few errors. --- doc/org.texi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/org.texi b/doc/org.texi index 6c137274d..193c4b977 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -11540,7 +11540,7 @@ the table that follows. @end lisp @example -#+ATTR_ODT: TableWithHeaderRowAndColumn +#+ATTR_ODT: :style "TableWithHeaderRowAndColumn" | Name | Phone | Age | | Peter | 1234 | 17 | | Anna | 4321 | 25 | @@ -11645,9 +11645,9 @@ To define a table style, create an entry for the style in the variable @end itemize For example, the entry below defines two different table styles -@samp{TableWithHeaderRowsAndColumns} and @samp{TableWithHeaderColumns} based -on the same template @samp{Custom}. The styles achieve their intended effect -by selectively activating the individual cell styles in that template. +@samp{TableWithHeaderRowAndColumn} and @samp{TableWithFirstRowandLastRow} +based on the same template @samp{Custom}. The styles achieve their intended +effect by selectively activating the individual cell styles in that template. @lisp (setq org-export-odt-table-styles @@ -11667,7 +11667,7 @@ To do this, specify the table style created in step (2) as part of the @code{ATTR_ODT} line as shown below. @example -#+ATTR_ODT: TableWithHeaderRowAndColumn +#+ATTR_ODT: :style "TableWithHeaderRowAndColumn" | Name | Phone | Age | | Peter | 1234 | 17 | | Anna | 4321 | 25 |