Merge remote-tracking branch 'origin/hotfix-7.8.06'
This commit is contained in:
commit
135a74e4cb
134
lisp/org-odt.el
134
lisp/org-odt.el
|
@ -2063,93 +2063,105 @@ specifiers - %e and %n. %e is replaced with the CATEGORY-NAME.
|
||||||
%n is replaced with SEQNO. See
|
%n is replaced with SEQNO. See
|
||||||
`org-odt-format-label-reference'.")
|
`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
|
(defvar org-odt-category-map-alist
|
||||||
'(("__Table__" "Table" "value")
|
'(("__Table__" "Table" "value")
|
||||||
("__Figure__" "Figure" "value")
|
("__Figure__" "Illustration" "value")
|
||||||
("__MathFormula__" "Equation" "text")
|
("__MathFormula__" "Text" "text")
|
||||||
("__DvipngImage__" "Equation" "value")
|
("__DvipngImage__" "Equation" "value")
|
||||||
;; ("__Table__" "Table" "category-and-value")
|
;; ("__Table__" "Table" "category-and-value")
|
||||||
;; ("__Figure__" "Figure" "category-and-value")
|
;; ("__Figure__" "Figure" "category-and-value")
|
||||||
;; ("__DvipngImage__" "Equation" "category-and-value")
|
;; ("__DvipngImage__" "Equation" "category-and-value")
|
||||||
)
|
)
|
||||||
"Map a CATEGORY-HANDLE to CATEGORY-NAME and LABEL-STYLE.
|
"Map a CATEGORY-HANDLE to OD-VARIABLE and LABEL-STYLE.
|
||||||
This is an alist where each element is of the form
|
This is a list where each entry is of the form \\(CATEGORY-HANDLE
|
||||||
\\(CATEGORY-HANDLE CATEGORY-NAME LABEL-STYLE\\). CATEGORY_HANDLE
|
OD-VARIABLE LABEL-STYLE\\). CATEGORY_HANDLE identifies the
|
||||||
could either be one of the internal handles (as seen above) or be
|
captionable entity in question. OD-VARIABLE is the OpenDocument
|
||||||
derived from the \"#+LABEL:<label-name>\" specification. See
|
sequence counter associated with the entity. These counters are
|
||||||
`org-export-odt-get-category-from-label'. CATEGORY-NAME and
|
declared within
|
||||||
LABEL-STYLE are used for generating ODT labels. See
|
\"<text:sequence-decls>...</text:sequence-decls>\" block of
|
||||||
`org-odt-label-styles'.")
|
`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.
|
||||||
|
|
||||||
(defvar org-export-odt-user-categories
|
The position of a CATEGORY-HANDLE in this list is used as an
|
||||||
'("Illustration" "Table" "Text" "Drawing" "Equation" "Figure"))
|
index in to per-language entry for
|
||||||
|
`org-export-odt-category-strings' to retrieve a CATEGORY-NAME.
|
||||||
(defvar org-export-odt-get-category-from-label nil
|
This CATEGORY-NAME is then used for qualifying the user-specified
|
||||||
"Should category of label be inferred from label itself.
|
captions on export.")
|
||||||
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)
|
(defun org-odt-add-label-definition (label default-category)
|
||||||
"Create an entry in `org-odt-entity-labels-alist' and return it."
|
"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))
|
||||||
(let* ((label-props (org-odt-get-label-category-and-style
|
;; identify the sequence number
|
||||||
label default-category))
|
(counter (nth 1 label-props))
|
||||||
(category (nth 1 label-props))
|
(sequence-var (intern counter))
|
||||||
(counter category)
|
|
||||||
(label-style (nth 2 label-props))
|
|
||||||
(sequence-var (intern (mapconcat
|
|
||||||
'downcase
|
|
||||||
(org-split-string counter) "-")))
|
|
||||||
(seqno (1+ (or (plist-get org-odt-entity-counts-plist sequence-var)
|
(seqno (1+ (or (plist-get org-odt-entity-counts-plist sequence-var)
|
||||||
0)))
|
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
|
(setq org-odt-entity-counts-plist
|
||||||
(plist-put org-odt-entity-counts-plist sequence-var seqno))
|
(plist-put org-odt-entity-counts-plist sequence-var seqno))
|
||||||
|
;; stash label properties for later retrieval
|
||||||
(push label-props org-odt-entity-labels-alist)
|
(push label-props org-odt-entity-labels-alist)
|
||||||
label-props))
|
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)
|
(assert label)
|
||||||
(format-spec
|
(format-spec
|
||||||
(cadr (assoc-string label-style org-odt-label-styles t))
|
(cadr (assoc-string label-style org-odt-label-styles t))
|
||||||
`((?e . ,category)
|
`((?e . ,category)
|
||||||
(?n . ,(org-odt-format-tags
|
(?n . ,(org-odt-format-tags
|
||||||
'("<text:sequence text:ref-name=\"%s\" text:name=\"%s\" text:formula=\"ooow:%s+1\" style:num-format=\"1\">" . "</text:sequence>")
|
'("<text:sequence text:ref-name=\"%s\" text:name=\"%s\" text:formula=\"ooow:%s+1\" style:num-format=\"1\">" . "</text:sequence>")
|
||||||
(format "%d" seqno) label category category))
|
(format "%d" seqno) label counter counter))
|
||||||
(?c . ,(or (and caption (concat ": " caption)) "")))))
|
(?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)
|
(assert label)
|
||||||
(save-match-data
|
(save-match-data
|
||||||
(let* ((fmt (cddr (assoc-string label-style org-odt-label-styles t)))
|
(let* ((fmt (cddr (assoc-string label-style org-odt-label-styles t)))
|
||||||
|
|
Loading…
Reference in New Issue