From c9ca0b6df86de13a5302b5a3c955fb2fb1023d36 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 29 Jul 2014 14:42:15 +0200 Subject: [PATCH] ox-html: Use options instead of hard-coded variables * contrib/lisp/ox-s5.el (org-s5--format-toc-headline): Apply signature change. * lisp/ox-md.el (org-md-headline): Apply signature change. * lisp/ox-html.el (org-html-format-drawer-function, org-html-publish-to-html): Small reformatting. (org-html-infojs-install-script, org-html--build-meta-info, org-html--build-mathjax-config, org-html-format-spec, org-html--build-pre/postamble, org-html-template, org-html-toc, org-html--format-toc-headline, org-html-list-of-listings, org-html-list-of-tables, org-html-bold, org-html-drawer, org-html-headline, org-html-inlinetask, org-html-italic, org-html-checkbox, org-html-inline-image-p, org-html-link, org-html-section, org-html-strike-through, org-html-table-cell, org-html-table-row, org-html-underline, org-html-verbatim, org-html-final-function, org-html-export-to-html): Do not use hard-coded variable names. (org-html-format-headline-function, org-html-format-inlinetask-function): Change default value. Require an additional argument. (org-html-format-footnote-reference, org-html-format-footnotes-section, org-html-format-footnote-definition, org-html-format-headline, org-html-format-headline--wrap, org-html-format-section): Remove functions. (org-html-footnote-section, org-html-footnote-reference): Apply function removal. Do not use hard-coded variable names. (org-html--anchor, org-html--todo, org-html--tags): Change signature. Do not use hard-coded variable names. (org-html-radio-target, org-html-target): Apply signature change. (org-html-format-headline-default-function, org-html-format-inlinetask-default-function): New functions. --- contrib/lisp/ox-s5.el | 2 +- lisp/ox-html.el | 501 +++++++++++++++++++++++--------------------------- lisp/ox-md.el | 3 +- 3 files changed, 233 insertions(+), 273 deletions(-) diff --git a/contrib/lisp/ox-s5.el b/contrib/lisp/ox-s5.el index 26e83a38c..b94c38cc7 100644 --- a/contrib/lisp/ox-s5.el +++ b/contrib/lisp/ox-s5.el @@ -201,7 +201,7 @@ INFO is a plist used as a communication channel." (concat section-number (org-export-data (org-export-get-alt-title headline info) info) - (and tags "   ") (org-html--tags tags)))) + (and tags "   ") (org-html--tags tags info)))) (defun org-s5-toc (depth info) (let* ((headlines (org-export-collect-headlines info depth)) diff --git a/lisp/ox-html.el b/lisp/ox-html.el index dfa5bc629..1b00c3811 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -491,18 +491,19 @@ Option settings will replace the %MANAGER-OPTIONS cookie." EXP-PLIST is a plist containing export options. BACKEND is the export back-end currently used." (unless (or (memq 'body-only (plist-get exp-plist :export-options)) - (not org-html-use-infojs) - (and (eq org-html-use-infojs 'when-configured) - (or (not (plist-get exp-plist :infojs-opt)) - (string= "" (plist-get exp-plist :infojs-opt)) - (string-match "\\" - (plist-get exp-plist :infojs-opt))))) - (let* ((template org-html-infojs-template) + (not (plist-get exp-plist :html-use-infojs)) + (and (eq (plist-get exp-plist :html-use-infojs) 'when-configured) + (let ((opt (plist-get exp-plist :infojs-opt))) + (or (not opt) + (string= "" opt) + (string-match "\\" opt))))) + (let* ((template (plist-get exp-plist :html-infojs-template)) (ptoc (plist-get exp-plist :with-toc)) (hlevels (plist-get exp-plist :headline-levels)) (sdepth hlevels) (tdepth (if (integerp ptoc) (min ptoc hlevels) hlevels)) (options (plist-get exp-plist :infojs-opt)) + (infojs-opt (plist-get exp-plist :html-infojs-options)) (table org-html-infojs-opts-table) style) (dolist (entry table) @@ -511,7 +512,7 @@ export back-end currently used." ;; Compute default values for script option OPT from ;; `org-html-infojs-options' variable. (default - (let ((default (cdr (assq opt org-html-infojs-options)))) + (let ((default (cdr (assq opt infojs-opt)))) (if (and (symbolp default) (not (memq default '(t nil)))) (plist-get exp-plist default) default))) @@ -548,9 +549,9 @@ export back-end currently used." (push (cons "TOC_DEPTH" tdepth) style) ;; Build style string. (setq style (mapconcat - (lambda (x) (format "org_html_manager.set(\"%s\", \"%s\");" - (car x) - (cdr x))) + (lambda (x) + (format "org_html_manager.set(\"%s\", \"%s\");" + (car x) (cdr x))) style "\n")) (when (and style (> (length style) 0)) (and (string-match "%MANAGER_OPTIONS" template) @@ -609,8 +610,7 @@ Warning: non-nil may break indentation of source code blocks." ;;;; Drawers -(defcustom org-html-format-drawer-function - (lambda (name contents) contents) +(defcustom org-html-format-drawer-function (lambda (name contents) contents) "Function called to format a drawer in HTML code. The function must accept two parameters: @@ -667,20 +667,22 @@ document title." :group 'org-export-html :type 'integer) -(defcustom org-html-format-headline-function 'ignore +(defcustom org-html-format-headline-function + 'org-html-format-headline-default-function "Function to format headline text. -This function will be called with 5 arguments: +This function will be called with six arguments: TODO the todo keyword (string or nil). TODO-TYPE the type of todo (symbol: `todo', `done', nil) PRIORITY the priority of the headline (integer or nil) TEXT the main headline text (string). TAGS the tags (string or nil). +INFO the export options (plist). The function result will be used in the section format string." :group 'org-export-html - :version "24.4" - :package-version '(Org . "8.0") + :version "24.5" + :package-version '(Org . "8.3") :type 'function) ;;;; HTML-specific @@ -696,21 +698,23 @@ but without \"name\" attribute." ;;;; Inlinetasks -(defcustom org-html-format-inlinetask-function 'ignore +(defcustom org-html-format-inlinetask-function + 'org-html-format-inlinetask-default-function "Function called to format an inlinetask in HTML code. -The function must accept six parameters: +The function must accept seven parameters: TODO the todo keyword, as a string TODO-TYPE the todo type, a symbol among `todo', `done' and nil. PRIORITY the inlinetask priority, as a string NAME the inlinetask name, as a string. TAGS the inlinetask tags, as a list of strings. CONTENTS the contents of the inlinetask, as a string. + INFO the export options, as a plist The function should return the string to be exported." :group 'org-export-html - :version "24.4" - :package-version '(Org . "8.0") + :version "24.5" + :package-version '(Org . "8.3") :type 'function) ;;;; LaTeX @@ -1551,32 +1555,6 @@ Replaces invalid characters with \"_\"." (setq kwd (replace-match "_" t t kwd)))) kwd) -(defun org-html-format-footnote-reference (n def refcnt) - "Format footnote reference N with definition DEF into HTML." - (let ((extra (if (= refcnt 1) "" (format ".%d" refcnt)))) - (format org-html-footnote-format - (let* ((id (format "fnr.%s%s" n extra)) - (href (format " href=\"#fn.%s\"" n)) - (attributes (concat " class=\"footref\"" href))) - (org-html--anchor id n attributes))))) - -(defun org-html-format-footnotes-section (section-name definitions) - "Format footnotes section SECTION-NAME." - (if (not definitions) "" - (format org-html-footnotes-section section-name definitions))) - -(defun org-html-format-footnote-definition (fn) - "Format the footnote definition FN." - (let ((n (car fn)) (def (cdr fn))) - (format - "
%s %s
\n" - (format org-html-footnote-format - (let* ((id (format "fn.%s" n)) - (href (format " href=\"#fnr.%s\"" n)) - (attributes (concat " class=\"footnum\"" href))) - (org-html--anchor id n attributes))) - def))) - (defun org-html-footnote-section (info) "Format the footnote section. INFO is a plist used as a communication channel." @@ -1589,11 +1567,26 @@ INFO is a plist used as a communication channel." (format "

%s

" (org-trim (org-export-data raw info)))))))) (when fn-alist - (org-html-format-footnotes-section + (format + (plist-get info :html-footnotes-section) (org-html--translate "Footnotes" info) (format "\n%s\n" - (mapconcat 'org-html-format-footnote-definition fn-alist "\n")))))) + (mapconcat + (lambda (fn) + (let ((n (car fn)) (def (cdr fn))) + (format + "
%s %s
\n" + (format + (plist-get info :html-footnote-format) + (org-html--anchor + (format "fn.%d" n) + n + (format " class=\"footnum\" href=\"#fnr.%d\"" n) + info)) + def))) + fn-alist + "\n")))))) ;;; Template @@ -1626,7 +1619,9 @@ INFO is a plist used as a communication channel." (format "%s\n" title) (when (plist-get info :time-stamp-file) (format-time-string - (concat "\n"))) + (concat "\n"))) (format (if (org-html-html5-p info) (org-html-close-tag "meta" " charset=\"%s\"" info) @@ -1681,8 +1676,8 @@ INFO is a plist used as a communication channel." (when (and (memq (plist-get info :with-latex) '(mathjax t)) (org-element-map (plist-get info :parse-tree) '(latex-fragment latex-environment) 'identity info t)) - (let ((template org-html-mathjax-template) - (options org-html-mathjax-options) + (let ((template (plist-get info :html-mathjax-template)) + (options (plist-get info :html-mathjax-options)) (in-buffer (or (plist-get info :html-mathjax) "")) name val (yes " ") (no "// ") x) (mapc @@ -1714,7 +1709,8 @@ INFO is a plist used as a communication channel." used in the preamble or postamble." `((?t . ,(org-export-data (plist-get info :title) info)) (?d . ,(org-export-data (org-export-get-date info) info)) - (?T . ,(format-time-string org-html-metadata-timestamp-format)) + (?T . ,(format-time-string + (plist-get info :html-metadata-timestamp-format))) (?a . ,(org-export-data (plist-get info :author) info)) (?e . ,(mapconcat (lambda (e) @@ -1723,10 +1719,10 @@ used in the preamble or postamble." ", ")) (?c . ,(plist-get info :creator)) (?C . ,(let ((file (plist-get info :input-file))) - (format-time-string org-html-metadata-timestamp-format - (if file (nth 5 (file-attributes file)) - (current-time))))) - (?v . ,(or org-html-validation-link "")))) + (format-time-string + (plist-get info :html-metadata-timestamp-format) + (if file (nth 5 (file-attributes file)) (current-time))))) + (?v . ,(or (plist-get info :html-validation-link) "")))) (defun org-html--build-pre/postamble (type info) "Return document preamble or postamble as a string, or nil. @@ -1766,7 +1762,8 @@ communication channel." (format "

%s: %s

\n" (org-html--translate "Created" info) - (format-time-string org-html-metadata-timestamp-format))) + (format-time-string + (plist-get info :html-metadata-timestamp-format)))) (when (plist-get info :with-creator) (format "

%s

\n" creator)) (format "

%s

\n" @@ -1782,14 +1779,15 @@ communication channel." (eval (intern (format "org-html-%s-format" type)))))) spec)))))) - (when (org-string-nw-p section-contents) - (concat - (format "<%s id=\"%s\" class=\"%s\">\n" - (nth 1 (assq type org-html-divs)) - (nth 2 (assq type org-html-divs)) - org-html--pre/postamble-class) - (org-element-normalize-string section-contents) - (format "\n" (nth 1 (assq type org-html-divs))))))))) + (let ((div (assq type (plist-get info :html-divs)))) + (when (org-string-nw-p section-contents) + (concat + (format "<%s id=\"%s\" class=\"%s\">\n" + (nth 1 div) + (nth 2 div) + org-html--pre/postamble-class) + (org-element-normalize-string section-contents) + (format "\n" (nth 1 div))))))))) (defun org-html-inner-template (contents info) "Return body of document string after HTML conversion. @@ -1810,20 +1808,19 @@ CONTENTS is the transcoded contents string. INFO is a plist holding export options." (concat (when (and (not (org-html-html5-p info)) (org-html-xhtml-p info)) - (let ((decl (or (and (stringp org-html-xml-declaration) - org-html-xml-declaration) - (cdr (assoc (plist-get info :html-extension) - org-html-xml-declaration)) - (cdr (assoc "html" org-html-xml-declaration)) - - ""))) - (when (not (or (eq nil decl) (string= "" decl))) + (let* ((xml-declaration (plist-get info :html-xml-declaration)) + (decl (or (and (stringp xml-declaration) xml-declaration) + (cdr (assoc (plist-get info :html-extension) + xml-declaration)) + (cdr (assoc "html" xml-declaration)) + ""))) + (when (not (or (not decl) (string= "" decl))) (format "%s\n" (format decl - (or (and org-html-coding-system - (fboundp 'coding-system-get) - (coding-system-get org-html-coding-system 'mime-charset)) - "iso-8859-1")))))) + (or (and org-html-coding-system + (fboundp 'coding-system-get) + (coding-system-get org-html-coding-system 'mime-charset)) + "iso-8859-1")))))) (org-html-doctype info) "\n" (concat "\n" - (nth 1 (assq 'content org-html-divs)) - (nth 2 (assq 'content org-html-divs))) + (let ((div (assq 'content (plist-get info :html-divs)))) + (format "<%s id=\"%s\">\n" (nth 1 div) (nth 2 div))) ;; Document title. (let ((title (plist-get info :title))) - (format "

%s

\n" (org-export-data (or title "") info))) + (format "

%s

\n" + (org-export-data (or title "") info))) contents - (format "\n" - (nth 1 (assq 'content org-html-divs))) + (format "\n" (nth 1 (assq 'content (plist-get info :html-divs)))) ;; Postamble. (org-html--build-pre/postamble 'postamble info) ;; Closing document. @@ -1868,9 +1864,9 @@ INFO is a plist used as a communication channel." ;;;; Anchor -(defun org-html--anchor (&optional id desc attributes) +(defun org-html--anchor (id desc attributes info) "Format a HTML anchor." - (let* ((name (and org-html-allow-name-attribute-in-anchors id)) + (let* ((name (and (plist-get info :html-allow-name-attribute-in-anchors) id)) (attributes (concat (and id (format " id=\"%s\"" id)) (and name (format " name=\"%s\"" name)) attributes))) @@ -1878,43 +1874,30 @@ INFO is a plist used as a communication channel." ;;;; Todo -(defun org-html--todo (todo) +(defun org-html--todo (todo info) "Format TODO keywords into HTML." (when todo (format "%s" (if (member todo org-done-keywords) "done" "todo") - org-html-todo-kwd-class-prefix (org-html-fix-class-name todo) + (plist-get info :html-todo-kwd-class-prefix) + (org-html-fix-class-name todo) todo))) ;;;; Tags -(defun org-html--tags (tags) - "Format TAGS into HTML." +(defun org-html--tags (tags info) + "Format TAGS into HTML. +INFO is a plist containing export options." (when tags (format "%s" (mapconcat (lambda (tag) (format "%s" - (concat org-html-tag-class-prefix + (concat (plist-get info :html-tag-class-prefix) (org-html-fix-class-name tag)) tag)) tags " ")))) -;;;; Headline - -(defun* org-html-format-headline - (todo todo-type priority text tags - &key level section-number headline-label &allow-other-keys) - "Format a headline in HTML." - (let ((section-number - (when section-number - (format "%s " - level section-number))) - (todo (org-html--todo todo)) - (tags (org-html--tags tags))) - (concat section-number todo (and todo " ") text - (and tags "   ") tags))) - ;;;; Src Code (defun org-html-fontify-code (code lang) @@ -2048,10 +2031,11 @@ contents as a string, or nil if it is empty." "div"))) (when toc-entries (concat (format "<%s id=\"table-of-contents\">\n" outer-tag) - (format "%s\n" - org-html-toplevel-hlevel - (org-html--translate "Table of Contents" info) - org-html-toplevel-hlevel) + (let ((top-level (plist-get info :html-toplevel-hlevel))) + (format "%s\n" + top-level + (org-html--translate "Table of Contents" info) + top-level)) "
" (org-html--toc-text toc-entries) "
\n" @@ -2118,11 +2102,7 @@ INFO is a plist used as a communication channel." (org-export-numbered-headline-p headline info) (concat (mapconcat #'number-to-string headline-number ".") ". ")) - (apply (if (not (eq org-html-format-headline-function 'ignore)) - (lambda (todo todo-type priority text tags &rest ignore) - (funcall org-html-format-headline-function - todo todo-type priority text tags)) - #'org-html-format-headline) + (apply (plist-get info :html-format-headline-function) todo todo-type priority text tags :section-number nil))))) (defun org-html-list-of-listings (info) @@ -2132,10 +2112,11 @@ of listings as a string, or nil if it is empty." (let ((lol-entries (org-export-collect-listings info))) (when lol-entries (concat "
\n" - (format "%s\n" - org-html-toplevel-hlevel - (org-html--translate "List of Listings" info) - org-html-toplevel-hlevel) + (let ((top-level (plist-get info :html-toplevel-hlevel))) + (format "%s\n" + top-level + (org-html--translate "List of Listings" info) + top-level)) "
\n
    \n" (let ((count 0) (initial-fmt (format "%s" @@ -2167,10 +2148,11 @@ of tables as a string, or nil if it is empty." (let ((lol-entries (org-export-collect-tables info))) (when lol-entries (concat "
    \n" - (format "%s\n" - org-html-toplevel-hlevel - (org-html--translate "List of Tables" info) - org-html-toplevel-hlevel) + (let ((top-level (plist-get info :html-toplevel-hlevel))) + (format "%s\n" + top-level + (org-html--translate "List of Tables" info) + top-level)) "
    \n
      \n" (let ((count 0) (initial-fmt (format "%s" @@ -2204,7 +2186,7 @@ of tables as a string, or nil if it is empty." "Transcode BOLD from Org to HTML. CONTENTS is the text with bold markup. INFO is a plist holding contextual information." - (format (or (cdr (assq 'bold org-html-text-markup-alist)) "%s") + (format (or (cdr (assq 'bold (plist-get info :html-text-markup-alist))) "%s") contents)) ;;;; Center Block @@ -2239,7 +2221,7 @@ channel." "Transcode CODE from Org to HTML. CONTENTS is nil. INFO is a plist holding contextual information." - (format (or (cdr (assq 'code org-html-text-markup-alist)) "%s") + (format (or (cdr (assq 'code (plist-get info :html-text-markup-alist))) "%s") (org-html-encode-plain-text (org-element-property :value code)))) ;;;; Drawer @@ -2248,13 +2230,9 @@ information." "Transcode a DRAWER element from Org to HTML. CONTENTS holds the contents of the block. INFO is a plist holding contextual information." - (if (functionp org-html-format-drawer-function) - (funcall org-html-format-drawer-function - (org-element-property :drawer-name drawer) - contents) - ;; If there's no user defined function: simply - ;; display contents of the drawer. - contents)) + (funcall (plist-get info :html-format-drawer-function) + (org-element-property :drawer-name drawer) + contents)) ;;;; Dynamic Block @@ -2311,36 +2289,28 @@ CONTENTS is nil. INFO is a plist holding contextual information." ;; Insert separator between two footnotes in a row. (let ((prev (org-export-get-previous-element footnote-reference info))) (when (eq (org-element-type prev) 'footnote-reference) - org-html-footnote-separator)) - (cond - ((not (org-export-footnote-first-reference-p footnote-reference info)) - (org-html-format-footnote-reference - (org-export-get-footnote-number footnote-reference info) - "IGNORED" 100)) - ;; Inline definitions are secondary strings. - ((eq (org-element-property :type footnote-reference) 'inline) - (org-html-format-footnote-reference - (org-export-get-footnote-number footnote-reference info) - "IGNORED" 1)) - ;; Non-inline footnotes definitions are full Org data. - (t (org-html-format-footnote-reference - (org-export-get-footnote-number footnote-reference info) - "IGNORED" 1))))) + (plist-get info :html-footnote-separator))) + (let* ((n (org-export-get-footnote-number footnote-reference info)) + (id (format "fnr.%d%s" + n + (if (org-export-footnote-first-reference-p + footnote-reference info) + "" + ".100")))) + (format + (plist-get info :html-footnote-format) + (org-html--anchor + id n (format " class=\"footref\" href=\"#fn.%d\"" n) info))))) ;;;; Headline -(defun org-html-format-headline--wrap - (headline info &optional format-function &rest extra-keys) +(defun org-html-headline (headline contents info) "Transcode a HEADLINE element from Org to HTML. CONTENTS holds the contents of the headline. INFO is a plist holding contextual information." - (let* ((level (+ (org-export-get-relative-level headline info) - (1- org-html-toplevel-hlevel))) - (headline-number (org-export-get-headline-number headline info)) - (section-number (and (not (org-export-low-level-p headline info)) - (org-export-numbered-headline-p headline info) - (mapconcat 'number-to-string - headline-number "."))) + (let* ((numberedp (org-export-numbered-headline-p headline info)) + (level (+ (org-export-get-relative-level headline info) + (1- (plist-get info :html-toplevel-hlevel)))) (todo (and (plist-get info :with-todo-keywords) (let ((todo (org-element-property :todo-keyword headline))) (and todo (org-export-data todo info))))) @@ -2350,48 +2320,13 @@ holding contextual information." (text (org-export-data (org-element-property :title headline) info)) (tags (and (plist-get info :with-tags) (org-export-get-tags headline info))) - (headline-label (or (org-element-property :CUSTOM_ID headline) - (concat "sec-" (mapconcat 'number-to-string - headline-number "-")))) - (format-function - (cond ((functionp format-function) format-function) - ((not (eq org-html-format-headline-function 'ignore)) - (lambda (todo todo-type priority text tags &rest ignore) - (funcall org-html-format-headline-function - todo todo-type priority text tags))) - (t 'org-html-format-headline)))) - (apply format-function - todo todo-type priority text tags - :headline-label headline-label :level level - :section-number section-number extra-keys))) - -(defun org-html-headline (headline contents info) - "Transcode a HEADLINE element from Org to HTML. -CONTENTS holds the contents of the headline. INFO is a plist -holding contextual information." - ;; Empty contents? - (setq contents (or contents "")) - (let* ((numberedp (org-export-numbered-headline-p headline info)) - (level (org-export-get-relative-level headline info)) - (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))) - (and todo (org-export-data todo info))))) - (todo-type (and todo (org-element-property :todo-type headline))) - (tags (and (plist-get info :with-tags) - (org-export-get-tags headline info))) - (priority (and (plist-get info :with-priority) - (org-element-property :priority headline))) - (section-number (and (org-export-numbered-headline-p headline info) - (mapconcat 'number-to-string - (org-export-get-headline-number - headline info) "."))) - ;; Create the headline text. - (full-text (org-html-format-headline--wrap headline info))) + (full-text (funcall (plist-get info :html-format-headline-function) + todo todo-type priority text tags info)) + (contents (or contents ""))) (cond ;; Case 1: This is a footnote section: ignore it. ((org-element-property :footnote-section-p headline) nil) - ;; Case 2. This is a deep sub-tree: export it as a list item. + ;; Case 2: This is a deep sub-tree: export it as a list item. ;; Also export as items headlines for which no section ;; format has been found. ((org-export-low-level-p headline info) @@ -2399,54 +2334,62 @@ holding contextual information." (let* ((type (if numberedp 'ordered 'unordered)) (itemized-body (org-html-format-list-item contents type nil info nil full-text))) - (concat - (and (org-export-first-sibling-p headline info) - (org-html-begin-plain-list type)) - itemized-body - (and (org-export-last-sibling-p headline info) - (org-html-end-plain-list type))))) - ;; Case 3. Standard headline. Export it as a section. + (concat (and (org-export-first-sibling-p headline info) + (org-html-begin-plain-list type)) + itemized-body + (and (org-export-last-sibling-p headline info) + (org-html-end-plain-list type))))) + ;; Case 3: Standard headline. Export it as a section. (t - (let* ((section-number (mapconcat 'number-to-string - (org-export-get-headline-number - headline info) "-")) - (ids (remove 'nil - (list (org-element-property :CUSTOM_ID headline) - (concat "sec-" section-number) - (org-element-property :ID headline)))) + (let* ((headline-number + (and numberedp (org-export-get-headline-number headline info))) + (section-number (mapconcat #'number-to-string headline-number "-")) + (ids (remq nil + (list (org-element-property :CUSTOM_ID headline) + (concat "sec-" section-number) + (org-element-property :ID headline)))) (preferred-id (car ids)) (extra-ids (cdr ids)) (extra-class (org-element-property :HTML_CONTAINER_CLASS headline)) - (level1 (+ level (1- org-html-toplevel-hlevel))) (first-content (car (org-element-contents headline)))) (format "<%s id=\"%s\" class=\"%s\">%s%s\n" (org-html--container headline info) (format "outline-container-%s" (or (org-element-property :CUSTOM_ID headline) (concat "sec-" section-number))) - (concat (format "outline-%d" level1) (and extra-class " ") + (concat (format "outline-%d" level) + (and extra-class " ") extra-class) (format "\n%s%s\n" - level1 + level preferred-id (mapconcat (lambda (x) (let ((id (org-export-solidify-link-text (if (org-uuidgen-p x) (concat "ID-" x) x)))) - (org-html--anchor id))) + (org-html--anchor id nil nil info))) extra-ids "") - full-text - level1) + (concat + (mapconcat #'number-to-string headline-number ".") + (and headline-number " ") + full-text) + level) ;; When there is no section, pretend there is an empty ;; one to get the correct
      \n" class extra) text "
      \n"))) - (defun org-html-inlinetask (inlinetask contents info) "Transcode an INLINETASK element from Org to HTML. CONTENTS holds the contents of the block. INFO is a plist holding contextual information." - (cond - ;; If `org-html-format-inlinetask-function' is not 'ignore, call it - ;; with appropriate arguments. - ((not (eq org-html-format-inlinetask-function 'ignore)) - (let ((format-function - (function* - (lambda (todo todo-type priority text tags - &key contents &allow-other-keys) - (funcall org-html-format-inlinetask-function - todo todo-type priority text tags contents))))) - (org-html-format-headline--wrap - inlinetask info format-function :contents contents))) - ;; Otherwise, use a default template. - (t (format "
      \n%s%s\n%s
      " - (org-html-format-headline--wrap inlinetask info) - (org-html-close-tag "br" nil info) - contents)))) + (let* ((todo (and (plist-get info :with-todo-keywords) + (let ((todo (org-element-property :todo-keyword inlinetask))) + (and todo (org-export-data todo info))))) + (todo-type (and todo (org-element-property :todo-type inlinetask))) + (priority (and (plist-get info :with-priority) + (org-element-property :priority inlinetask))) + (text (org-export-data (org-element-property :title inlinetask) info)) + (tags (and (plist-get info :with-tags) + (org-export-get-tags inlinetask info)))) + (funcall (plist-get info :html-format-inlinetask-function) + todo todo-type priority text tags contents))) + +(defun org-html-format-inlinetask-default-function + (todo todo-type priority text tags contents info) + "Default format function for a inlinetasks. +See `org-html-format-inlinetask-function' for details." + (format "
      \n%s%s\n%s
      " + (org-html-format-headline-default-function + todo todo-type priority text tags info) + (org-html-close-tag "br" nil info) + contents)) ;;;; Italic @@ -2505,7 +2447,9 @@ holding contextual information." "Transcode ITALIC from Org to HTML. CONTENTS is the text with italic markup. INFO is a plist holding contextual information." - (format (or (cdr (assq 'italic org-html-text-markup-alist)) "%s") contents)) + (format + (or (cdr (assq 'italic (plist-get info :html-text-markup-alist))) "%s") + contents)) ;;;; Item @@ -2514,7 +2458,8 @@ contextual information." INFO is a plist holding contextual information. See `org-html-checkbox-type' for customization options." (cdr (assq checkbox - (cdr (assq org-html-checkbox-type org-html-checkbox-types))))) + (cdr (assq (plist-get info :html-checkbox-type) + org-html-checkbox-types))))) (defun org-html-format-list-item (contents type checkbox info &optional term-counter-id @@ -2677,7 +2622,8 @@ inline image when it has no description and targets an image file (see `org-html-inline-image-rules' for more information), or if its description is a single link targeting an image file." (if (not (org-element-contents link)) - (org-export-inline-image-p link org-html-inline-image-rules) + (org-export-inline-image-p + link (plist-get info :html-inline-image-rules)) (not (let ((link-count 0)) (org-element-map (org-element-contents link) @@ -2688,7 +2634,7 @@ if its description is a single link targeting an image file." (link (if (= link-count 1) t (incf link-count) (not (org-export-inline-image-p - obj org-html-inline-image-rules)))) + obj (plist-get info :html-inline-image-rules))))) (otherwise t))) info t))))) @@ -2746,7 +2692,7 @@ INFO is a plist holding contextual information. See "Treat links to `file.org' as links to `file.html', if needed. See `org-html-link-org-files-as-html'." (cond - ((and org-html-link-org-files-as-html + ((and (plist-get info :html-link-org-files-as-html) (string= ".org" (downcase (file-name-extension raw-path ".")))) (concat (file-name-sans-extension raw-path) "." @@ -2808,8 +2754,9 @@ INFO is a plist holding contextual information. See protocol) (cond ;; Image file. - ((and org-html-inline-images - (org-export-inline-image-p link org-html-inline-image-rules)) + ((and (plist-get info :html-inline-images) + (org-export-inline-image-p + link (plist-get info :html-inline-image-rules))) (org-html--format-image path attributes-plist info)) ;; Radio target: Transcode target's contents and use them as ;; link's description. @@ -3113,7 +3060,7 @@ holding contextual information." (if (not parent) contents ;; Get div's class and id references. (let* ((class-num (+ (org-export-get-relative-level parent info) - (1- org-html-toplevel-hlevel))) + (1- (plist-get info :html-toplevel-hlevel)))) (section-number (mapconcat 'number-to-string @@ -3132,7 +3079,7 @@ TEXT is the text of the target. INFO is a plist holding contextual information." (let ((id (org-export-solidify-link-text (org-element-property :value radio-target)))) - (org-html--anchor id text))) + (org-html--anchor id text nil info))) ;;;; Special Block @@ -3197,8 +3144,10 @@ CONTENTS is nil. INFO is a plist holding contextual information." "Transcode STRIKE-THROUGH from Org to HTML. CONTENTS is the text with strike-through markup. INFO is a plist holding contextual information." - (format (or (cdr (assq 'strike-through org-html-text-markup-alist)) "%s") - contents)) + (format + (or (cdr (assq 'strike-through (plist-get info :html-text-markup-alist))) + "%s") + contents)) ;;;; Subscript @@ -3225,7 +3174,7 @@ channel." (let* ((table-row (org-export-get-parent table-cell)) (table (org-export-get-parent-table table-cell)) (cell-attrs - (if (not org-html-table-align-individual-fields) "" + (if (not (plist-get info :html-table-align-individual-fields)) "" (format (if (and (boundp 'org-html-format-table-no-css) org-html-format-table-no-css) " align=\"%s\"" " class=\"%s\"") @@ -3235,14 +3184,20 @@ channel." (cond ((and (org-export-table-has-header-p table info) (= 1 (org-export-table-row-group table-row info))) - (concat "\n" (format (car org-html-table-header-tags) "col" cell-attrs) - contents (cdr org-html-table-header-tags))) - ((and org-html-table-use-header-tags-for-first-column + (let ((header-tags (plist-get info :html-table-header-tags))) + (concat "\n" (format (car header-tags) "col" cell-attrs) + contents + (cdr header-tags)))) + ((and (plist-get info :html-table-use-header-tags-for-first-column) (zerop (cdr (org-export-table-cell-address table-cell info)))) - (concat "\n" (format (car org-html-table-header-tags) "row" cell-attrs) - contents (cdr org-html-table-header-tags))) - (t (concat "\n" (format (car org-html-table-data-tags) cell-attrs) - contents (cdr org-html-table-data-tags)))))) + (let ((header-tags (plist-get info :html-table-header-tags))) + (concat "\n" (format (car header-tags) "row" cell-attrs) + contents + (cdr header-tags)))) + (t (let ((data-tags (plist-get info :html-table-data-tags))) + (concat "\n" (format (car data-tags) cell-attrs) + contents + (cdr data-tags))))))) ;;;; Table Row @@ -3281,10 +3236,10 @@ communication channel." ;; Begin a rowgroup? (when start-rowgroup-p (car rowgroup-tags)) ;; Actual table row - (concat "\n" (eval (car org-html-table-row-tags)) + (concat "\n" (eval (car (plist-get info :html-table-row-tags))) contents "\n" - (eval (cdr org-html-table-row-tags))) + (eval (cdr (plist-get info :html-table-row-tags)))) ;; End a rowgroup? (when end-rowgroup-p (cdr rowgroup-tags)))))) @@ -3367,7 +3322,7 @@ contextual information." (format "\n%s\n%s\n%s" (if (equal attributes "") "" (concat " " attributes)) (if (not caption) "" - (format (if org-html-table-caption-above + (format (if (plist-get info :html-table-caption-above) "%s" "%s") (concat @@ -3385,7 +3340,7 @@ CONTENTS is nil. INFO is a plist holding contextual information." (let ((id (org-export-solidify-link-text (org-element-property :value target)))) - (org-html--anchor id))) + (org-html--anchor id nil nil info))) ;;;; Timestamp @@ -3404,7 +3359,8 @@ information." "Transcode UNDERLINE from Org to HTML. CONTENTS is the text with underline markup. INFO is a plist holding contextual information." - (format (or (cdr (assq 'underline org-html-text-markup-alist)) "%s") + (format (or (cdr (assq 'underline (plist-get info :html-text-markup-alist))) + "%s") contents)) ;;;; Verbatim @@ -3413,7 +3369,7 @@ holding contextual information." "Transcode VERBATIM from Org to HTML. CONTENTS is nil. INFO is a plist holding contextual information." - (format (or (cdr (assq 'verbatim org-html-text-markup-alist)) "%s") + (format (or (cdr (assq 'verbatim (plist-get info :html-text-markup-alist))) "%s") (org-html-encode-plain-text (org-element-property :value verbatim)))) ;;;; Verse Block @@ -3446,9 +3402,9 @@ contextual information." (with-temp-buffer (insert contents) (set-auto-mode t) - (if org-html-indent + (if (plist-get info :html-indent) (indent-region (point-min) (point-max))) - (when org-html-use-unicode-chars + (when (plist-get info :html-use-unicode-chars) (require 'mm-url) (mm-url-decode-entities)) (buffer-substring-no-properties (point-min) (point-max)))) @@ -3531,7 +3487,9 @@ file-local settings. Return output file's name." (interactive) - (let* ((extension (concat "." org-html-extension)) + (let* ((extension (concat "." (or (plist-get ext-plist :html-extension) + org-html-extension + "html"))) (file (org-export-output-file-name extension subtreep)) (org-export-coding-system org-html-coding-system)) (org-export-to-file 'html file @@ -3548,7 +3506,8 @@ publishing directory. Return output file name." (org-publish-org-to 'html filename (concat "." (or (plist-get plist :html-extension) - org-html-extension "html")) + org-html-extension + "html")) plist pub-dir)) diff --git a/lisp/ox-md.el b/lisp/ox-md.el index 5bd8deff1..ed68eb035 100644 --- a/lisp/ox-md.el +++ b/lisp/ox-md.el @@ -191,7 +191,8 @@ a communication channel." (concat "sec-" (mapconcat 'number-to-string (org-export-get-headline-number - headline info) "-")))))) + headline info) "-"))) + nil nil info))) ;; Headline text without tags. (heading (concat todo priority title)) (style (plist-get info :md-headline-style))) -- 2.11.4.GIT