summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Leech-Pepin <jonathan.leechpepin@gmail.com>2012-08-23 09:20:02 -0400
committerJonathan Leech-Pepin <jonathan.leechpepin@gmail.com>2012-08-23 09:20:02 -0400
commit8441782b11321469c944267775cc631242c2e45d (patch)
tree4fa18952bde440731974b1d7cf34cc0814b4f337
parent44d68803d31fa2ea577030fdf86d274a38bbaf71 (diff)
downloadorg-mode-8441782b11321469c944267775cc631242c2e45d.tar.gz
contrib/lisp/org-e-texinfo: Remove markup from headlines when
exporting to ensure info can process them properly * contrib/lisp/org-e-texinfo.el (org-e-texinfo--generate-menu-items): Use org-e-texinfo--sanitize-headline to ensure markup is stripped before being used for sectioning and menu information. Nodes and menus can fail because of formatting and section titles do not show any formatting when viewed in an info-viewer. (org-e-texinfo--sanitize-headline): Wrapper function for org-e-texinfo--sanitize-healine-contents (org-e-texinfo--sanitize-headline-contents): Strips markup from headlines. It treats content recursively to ensure nested formatting is removed as well.
-rw-r--r--contrib/lisp/org-e-texinfo.el45
1 files changed, 37 insertions, 8 deletions
diff --git a/contrib/lisp/org-e-texinfo.el b/contrib/lisp/org-e-texinfo.el
index 8256d44..0bd6c6c 100644
--- a/contrib/lisp/org-e-texinfo.el
+++ b/contrib/lisp/org-e-texinfo.el
@@ -498,6 +498,34 @@ See `org-e-texinfo-text-markup-alist' for details."
;; Else use format string.
(t (format fmt text)))))
+;;; Headline sanitizing
+
+(defun org-e-texinfo--sanitize-headline (headline info)
+ "Remove all formatting from the text of a headline for use in
+ node and menu listing."
+ (mapconcat 'identity
+ (org-e-texinfo--sanitize-headline-contents headline info) " "))
+
+(defun org-e-texinfo--sanitize-headline-contents (headline info)
+ "Retrieve the content of the headline.
+
+Any content that can contain further formatting is checked
+recursively, to ensure that nested content is also properly
+retrieved."
+ (loop for contents in headline append
+ (cond
+ ;; already a string
+ ((stringp contents)
+ (list (replace-regexp-in-string " $" "" contents)))
+ ;; Is exported as-is (value)
+ ((org-element-map contents '(verbatim code)
+ (lambda (value)
+ (org-element-property :value value))))
+ ;; Has content and recurse into the content
+ ((org-element-contents contents)
+ (org-e-texinfo--sanitize-headline-contents
+ (org-element-contents contents) info)))))
+
;;; Menu creation
(defun org-e-texinfo--build-menu (tree level info &optional detailed)
@@ -579,7 +607,7 @@ Returns a list containing the following information from each
headline: length, title, description. This is used to format the
menu using `org-e-texinfo--format-menu'."
(loop for headline in items collect
- (let* ((title (org-export-data
+ (let* ((title (org-e-texinfo--sanitize-headline
(org-element-property :title headline) info))
(descr (org-export-data
(org-element-property :description headline) info))
@@ -906,16 +934,17 @@ holding contextual information."
(class-sectionning (assoc class org-e-texinfo-classes))
;; Find the index type, if any
(index (org-element-property :index headline))
+ ;; Retrieve headline text
+ (text (org-e-texinfo--sanitize-headline
+ (org-element-property :title headline) info))
;; Create node info, to insert it before section formatting.
(node (format "@node %s\n"
- (replace-regexp-in-string
- "%" "%%"
- (org-export-data (org-element-property :title headline) info))))
+ (replace-regexp-in-string "%" "%%" text)))
;; Menus must be generated with first child, otherwise they
;; will not nest properly
(menu (let* ((first (org-export-first-sibling-p headline info))
(parent (org-export-get-parent-headline headline))
- (title (org-export-data
+ (title (org-e-texinfo--sanitize-headline
(org-element-property :title parent) info))
heading listing
(tree (plist-get info :parse-tree)))
@@ -929,7 +958,9 @@ holding contextual information."
(setq listing (org-e-texinfo--build-menu
(car heading) level info))
(if listing
- (setq listing (format
+ (setq listing (replace-regexp-in-string
+ "%" "%%" listing)
+ listing (format
"\n@menu\n%s\n@end menu\n\n" listing))
'nil)))
;; Section formatting will set two placeholders: one for the
@@ -953,8 +984,6 @@ holding contextual information."
(concat menu node
(funcall
(if numberedp #'car #'cdr) sec) "\n%s"))))))
- (text (org-export-data
- (org-element-property :title headline) info))
(todo
(and (plist-get info :with-todo-keywords)
(let ((todo (org-element-property :todo-keyword headline)))