emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] [PATCH] Allow mixed export of numbered and unnumbered sections in HT


From: Lawrence Mitchell
Subject: [O] [PATCH] Allow mixed export of numbered and unnumbered sections in HTML
Date: Wed, 23 Mar 2011 09:38:18 +0000
User-agent: Gnus/5.110014 (No Gnus v0.14) Emacs/24.0.50 (gnu/linux)

* lisp/org-html.el (org-export-as-html): Get local value of
org-export-with-section-numbers from the buffer's plist.  Deal
specially with the case the resulting value is an integer.
(org-html-level-start): New optional argument of the option plist used
instead of `org-export-with-section-numbers'.  Also deal specially
with the case that the value is an integer.

When `org-export-with-section-numbers' (or the buffer-local
:section-numbers option) is an integer, we now export the first NUM
levels of headings with numbers and lower-level headings without.
---
 lisp/org-html.el |   24 ++++++++++++++++++------
 1 files changed, 18 insertions(+), 6 deletions(-)

Nick Dokos wrote:
> Suvayu Ali <address@hidden> wrote:

>> This works too, but Lawrence's patch makes it much easier and
>> probably works for other export formats too. Thanks a lot. :)

As Nick points out, each exporter backend needs a similar change.

> No doubt Lawrence's patch can be extended to work for other exports, but
> it's not there yet: each exporter would need a change similar to the one
> that he made to the LaTeX exporter.

Here's the matching change to the HTML exporter, which is the
only other one I'm familiar with.  Maintainers, if you don't want
the special-casing on integerp, the change to move from
`org-export-with-section-numbers' to (plist-get opt-plist
:section-numbers) is the correct one anyway.  I can split the
patches if required.

diff --git a/lisp/org-html.el b/lisp/org-html.el
index b13fb93..06305f6 100644
--- a/lisp/org-html.el
+++ b/lisp/org-html.el
@@ -1150,6 +1150,7 @@ PUB-DIR is set, use this as the publishing directory."
         (language    (plist-get opt-plist :language))
         (keywords    (plist-get opt-plist :keywords))
         (description (plist-get opt-plist :description))
+        (num         (plist-get opt-plist :section-numbers))
         (lang-words  nil)
         (head-count  0) cnt
         (start       0)
@@ -1355,7 +1356,7 @@ lang=\"%s\" xml:lang=\"%s\">
                                   (if (string-match quote-re0 txt)
                                       (setq txt (replace-match "" t t txt)))
                                   (setq snumber (org-section-number level))
-                                  (if org-export-with-section-numbers
+                                  (if (and num (integerp num) (>= num level))
                                       (setq txt (concat snumber " " txt)))
                                   (if (<= level (max umax umax-toc))
                                       (setq head-count (+ head-count 1)))
@@ -1591,7 +1592,7 @@ lang=\"%s\" xml:lang=\"%s\">
            (setq first-heading-pos (or first-heading-pos (point)))
            (org-html-level-start level txt umax
                                  (and org-export-with-toc (<= level umax))
-                                 head-count)
+                                 head-count opt-plist)
 
            ;; QUOTES
            (when (string-match quote-re line)
@@ -1684,7 +1685,7 @@ lang=\"%s\" xml:lang=\"%s\">
 
       (org-html-level-start 1 nil umax
                            (and org-export-with-toc (<= level umax))
-                           head-count)
+                           head-count opt-plist)
       ;; the </div> to close the last text-... div.
       (when (and (> umax 0) first-heading-pos) (insert "</div>\n"))
 
@@ -2330,7 +2331,7 @@ If there are links in the string, don't modify these."
   (insert (if (equal type "d") "</dd>\n" "</li>\n")))
 
 (defvar body-only) ; dynamically scoped into this.
-(defun org-html-level-start (level title umax with-toc head-count)
+(defun org-html-level-start (level title umax with-toc head-count &optional 
opt-plist)
   "Insert a new level in HTML export.
 When TITLE is nil, just close all open levels."
   (org-close-par-maybe)
@@ -2341,6 +2342,7 @@ When TITLE is nil, just close all open levels."
         (preferred (and target
                         (cdr (assoc target 
org-export-preferred-target-alist))))
         (l org-level-max)
+        (num (plist-get opt-plist :section-numbers))
         snumber snu href suffix)
     (setq extra-targets (remove (or preferred target) extra-targets))
     (setq extra-targets
@@ -2395,10 +2397,20 @@ When TITLE is nil, just close all open levels."
        (setq snumber (org-section-number level)
              snu (replace-regexp-in-string "\\." "_" snumber))
        (setq level (+ level org-export-html-toplevel-hlevel -1))
-       (if (and org-export-with-section-numbers (not body-only))
+       (if (and num (not body-only))
            (setq title (concat
                         (format "<span class=\"section-number-%d\">%s</span>"
-                                level snumber)
+                                level
+                                (if (and (integerp num)
+                                         ;; fix up num to take into
+                                         ;; account the top-level
+                                         ;; heading value
+                                         (>= (+ num
+                                                org-export-html-toplevel-hlevel
+                                                -1)
+                                             level))
+                                          snumber
+                                        ""))
                         " " title)))
        (unless (= head-count 1) (insert "\n</div>\n"))
        (setq href (cdr (assoc (concat "sec-" snu) 
org-export-preferred-target-alist)))
-- 
1.7.4.rc2.18.gb20e9




reply via email to

[Prev in Thread] Current Thread [Next in Thread]