summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJambunathan K <kjambunathan@gmail.com>2011-11-07 00:21:58 +0530
committerJambunathan K <kjambunathan@gmail.com>2011-11-07 00:32:27 +0530
commitf8168144a95136ab93650a3c80ac28bb0b69fd90 (patch)
treeb9ccdb9b49e9f77ac04492715eadf00e11420cdf
parentd6898e589a889ecc603bfc040bf0f219d00564cd (diff)
downloadorg-mode-f8168144a95136ab93650a3c80ac28bb0b69fd90.tar.gz
Annotate Dvipng images/Math formula and strengthen error handling
* contrib/lisp/org-odt.el (org-odt-encode-plain-text): New. (org-odt-format-line) (org-odt-format-source-code-or-example-plain): Use it. (org-odt-format-object-description): New. Format svg:title and svg:desc elements out of plain text. (org-export-odt-format-formula, org-export-odt-format-image): Check whether the incoming formula or image is generated out of a latex fragment. If yes, pass the latex fragment for downstream processing. (org-odt-format-frame): Check if the object that is enclosed in the frame has metadata associated with it. If yes, dump it as part of svg:title and svg:desc elements. (org-odt-protect-latex-fragment): New after advice for `org-format-latex-as-mathml'. Fixes the following bug http://lists.gnu.org/archive/html/emacs-orgmode/2011-11/msg00176.html
-rw-r--r--contrib/lisp/org-odt.el54
1 files changed, 42 insertions, 12 deletions
diff --git a/contrib/lisp/org-odt.el b/contrib/lisp/org-odt.el
index 45dacfd..4adcfd9 100644
--- a/contrib/lisp/org-odt.el
+++ b/contrib/lisp/org-odt.el
@@ -1005,12 +1005,16 @@ styles congruent with the ODF-1.2 specification."
(defun org-odt-format-horizontal-line ()
(org-odt-format-stylized-paragraph 'horizontal-line ""))
+(defun org-odt-encode-plain-text (line &optional no-whitespace-filling)
+ (setq line (org-xml-encode-plain-text line))
+ (if no-whitespace-filling line
+ (org-odt-fill-tabs-and-spaces line)))
+
(defun org-odt-format-line (line)
(case org-lparse-dyn-current-environment
(fixedwidth (concat
(org-odt-format-stylized-paragraph
- 'fixedwidth (org-odt-fill-tabs-and-spaces
- (org-xml-encode-plain-text line))) "\n"))
+ 'fixedwidth (org-odt-encode-plain-text line)) "\n"))
(t (concat line "\n"))))
(defun org-odt-format-comment (fmt &rest args)
@@ -1060,10 +1064,9 @@ off."
(lambda (line)
(incf i)
(org-odt-format-source-line-with-line-number-and-label
- line rpllbl num (lambda (line)
- (org-odt-fill-tabs-and-spaces
- (org-xml-encode-plain-text line)))
- (if (= i line-count) "OrgFixedWidthBlockLastLine" "OrgFixedWidthBlock")))
+ line rpllbl num 'org-odt-encode-plain-text
+ (if (= i line-count) "OrgFixedWidthBlockLastLine"
+ "OrgFixedWidthBlock")))
lines "\n")))
(defvar org-src-block-paragraph-format
@@ -1263,13 +1266,16 @@ value of `org-export-odt-fontify-srcblocks."
(let* ((caption (org-find-text-property-in-string 'org-caption src))
(caption (and caption (org-xml-format-desc caption)))
(label (org-find-text-property-in-string 'org-label src))
+ (latex-frag (org-find-text-property-in-string 'org-latex-src src))
(embed-as (or embed-as
- (and (org-find-text-property-in-string
- 'org-latex-src src)
+ (and latex-frag
(org-find-text-property-in-string
'org-latex-src-embed-type src))
'paragraph))
width height)
+ (when latex-frag
+ (setq href (org-propertize href :title "LaTeX Fragment"
+ :description latex-frag)))
(cond
((eq embed-as 'character)
(org-odt-format-entity "InlineFormula" href width height))
@@ -1477,11 +1483,11 @@ MAY-INLINE-P allows inlining it as an image."
(caption (and caption (org-xml-format-desc caption)))
(attr (org-find-text-property-in-string 'org-attributes src))
(label (org-find-text-property-in-string 'org-label src))
- (latex-fragment-p (org-find-text-property-in-string
+ (latex-frag (org-find-text-property-in-string
'org-latex-src src))
- (category (and latex-fragment-p "__DvipngImage__"))
+ (category (and latex-frag "__DvipngImage__"))
(embed-as (or embed-as
- (if latex-fragment-p
+ (if latex-frag
(or (org-find-text-property-in-string
'org-latex-src-embed-type src) 'character)
'paragraph)))
@@ -1491,6 +1497,9 @@ MAY-INLINE-P allows inlining it as an image."
(plist-get attr-plist :height)
(plist-get attr-plist :scale) nil embed-as))
(width (car size)) (height (cdr size)))
+ (when latex-frag
+ (setq href (org-propertize href :title "LaTeX Fragment"
+ :description latex-frag)))
(cond
((not (or caption label))
(case embed-as
@@ -1501,6 +1510,14 @@ MAY-INLINE-P allows inlining it as an image."
(org-odt-format-entity
"CaptionedDisplayImage" href width height caption label category))))))
+(defun org-odt-format-object-description (title description)
+ (concat (and title (org-odt-format-tags
+ '("<svg:title>" . "</svg:title>")
+ (org-odt-encode-plain-text title t)))
+ (and description (org-odt-format-tags
+ '("<svg:desc>" . "</svg:desc>")
+ (org-odt-encode-plain-text description t)))))
+
(defun org-odt-format-frame (text width height style &optional
extra anchor-type)
(let ((frame-attrs
@@ -1511,7 +1528,10 @@ MAY-INLINE-P allows inlining it as an image."
(format " text:anchor-type=\"%s\"" (or anchor-type "paragraph")))))
(org-odt-format-tags
'("<draw:frame draw:style-name=\"%s\"%s>" . "</draw:frame>")
- text style frame-attrs)))
+ (concat text (org-odt-format-object-description
+ (get-text-property 0 :title text)
+ (get-text-property 0 :description text)))
+ style frame-attrs)))
(defun org-odt-format-textbox (text width height style &optional
extra anchor-type)
@@ -2189,6 +2209,16 @@ using `org-open-file'."
org-current-export-dir nil display-msg
nil nil latex-frag-opt))))
+(defadvice org-format-latex-as-mathml
+ (after org-odt-protect-latex-fragment activate)
+ "Encode LaTeX fragment as XML.
+Do this when translation to MathML fails."
+ (when (or (not (> (length ad-return-value) 0))
+ (get-text-property 0 'org-protected ad-return-value))
+ (setq ad-return-value
+ (org-propertize (org-odt-encode-plain-text (ad-get-arg 0))
+ 'org-protected t))))
+
(defun org-export-odt-preprocess-latex-fragments ()
(when (equal org-export-current-backend 'odt)
(org-export-odt-do-preprocess-latex-fragments)))