[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] [bug, patch, ox] INCLUDE and footnotes
From: |
Rasmus |
Subject: |
Re: [O] [bug, patch, ox] INCLUDE and footnotes |
Date: |
Mon, 22 Dec 2014 02:42:56 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) |
Nicolas Goaziou <address@hidden> writes:
> I suggest to do it differently, then. We first process every include
> keyword in the document, but simply add a text property (e.g.
> `org-include-level') over them specifying
> [...]
> Include lines are not modified and this variable only applies to Org
> documents. WDYT?
That's a nice solution. Implemented in attached patch.
Should this be added to ORG-NEWS? Is a "feature" or a "bug-fix"?
Thanks,
Rasmus
--
Vote for proprietary math!
>From 1fa88054255e66922ea9e2cd61310461901ac6ee Mon Sep 17 00:00:00 2001
From: Rasmus <address@hidden>
Date: Thu, 18 Dec 2014 16:48:49 +0100
Subject: [PATCH 2/2] ox.el: Guess the :minlevel for INCLUDE-keywords
* ox.el (org-export-expand-include-keyword): Guess :minlevel for
included Org documents if missing.
* test-ox.el (org-export-expand-include-keyword): Tests for automatic :minlevel.
---
lisp/ox.el | 14 ++++++++++----
testing/lisp/test-ox.el | 39 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/lisp/ox.el b/lisp/ox.el
index 11b9a29..11426fb 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -3063,10 +3063,17 @@ storing and resolving footnotes. It is created
automatically."
(let ((case-fold-search t)
(file-prefix (make-hash-table :test #'equal))
(current-prefix 0)
- (footnotes (or footnotes (make-hash-table :test #'equal))))
+ (footnotes (or footnotes (make-hash-table :test #'equal)))
+ (include-re "^[ \t]*#\\+INCLUDE:"))
+ ;; Add :minlevel to all include words that no explicitly have one.
(goto-char (point-min))
+ (while (re-search-forward include-re nil t)
+ (add-text-properties (line-beginning-position) (line-end-position)
+ `(org-include-induced-level
+ ,(1+ (org-reduced-level (or (org-current-level)
0))))))
;; Expand INCLUDE keywords.
- (while (re-search-forward "^[ \t]*#\\+INCLUDE:" nil t)
+ (goto-char (point-min))
+ (while (re-search-forward include-re nil t)
(let ((element (save-match-data (org-element-at-point))))
(when (eq (org-element-type element) 'keyword)
(beginning-of-line)
@@ -3111,8 +3118,7 @@ storing and resolving footnotes. It is created
automatically."
(if (string-match ":minlevel +\\([0-9]+\\)" value)
(prog1 (string-to-number (match-string 1 value))
(setq value (replace-match "" nil nil value)))
- (let ((cur (org-current-level)))
- (if cur (1+ (org-reduced-level cur)) 1)))))
+ (get-text-property (point)
'org-include-induced-level))))
(src-args (and (eq env 'literal)
(match-string 1 value)))
(block (and (string-match "\\<\\(\\S-+\\)\\>" value)
diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el
index 37e2e23..91f9eab 100644
--- a/testing/lisp/test-ox.el
+++ b/testing/lisp/test-ox.el
@@ -1003,7 +1003,44 @@ Footnotes[fn:2], foot[fn:test], digit only[3], and
[fn:inline:anonymous footnote
(org-test-with-temp-text
(format "#+INCLUDE: \"%s/examples/include.org::#dh\" :only-contents t"
org-test-dir)
(org-export-expand-include-keyword)
- (buffer-string)))))
+ (buffer-string))))
+ ;; Adjacent INCLUDE-keywords should have the same :minlevel if unspecified.
+ (should
+ (org-every (lambda (level) (zerop (1- level)))
+ (org-test-with-temp-text
+ (concat
+ (format "#+INCLUDE: \"%s/examples/include.org::#ah\"\n"
org-test-dir)
+ (format "#+INCLUDE: \"%s/examples/include.org::*Heading\""
org-test-dir))
+ (org-export-expand-include-keyword)
+ (org-element-map (org-element-parse-buffer) 'headline
+ (lambda (head) (org-element-property :level head))))))
+ ;; INCLUDE does not insert induced :minlevel for src-blocks.
+ (should-not
+ (equal
+ (org-test-with-temp-text
+ (format "#+INCLUDE: \"%s/examples/include2.org\" src emacs-lisp"
org-test-dir)
+ (org-export-expand-include-keyword)
+ (buffer-string))
+ (org-test-with-temp-text
+ (format "#+INCLUDE: \"%s/examples/include2.org\" src emacs-lisp
:minlevel 1" org-test-dir)
+ (org-export-expand-include-keyword)
+ (buffer-string))))
+ ;; INCLUDE assigns the relative :minlevel conditional on narrowing.
+ (should
+ (org-test-with-temp-text
+ (format "* h1\n<point>#+INCLUDE: \"%s/examples/include.org::#ah\""
org-test-dir)
+ (org-narrow-to-element)
+ (org-export-expand-include-keyword)
+ (goto-char (point-min))
+ (eq 1 (org-element-property :level (org-element-at-point)))))
+ ;; If :minlevel is present do not alter it.
+ (should
+ (org-test-with-temp-text
+ (format "* h1\n<point>#+INCLUDE: \"%s/examples/include.org::#ah\"
:minlevel 3" org-test-dir)
+ (org-narrow-to-element)
+ (org-export-expand-include-keyword)
+ (goto-char (point-min))
+ (eq 3 (org-element-property :level (org-element-at-point))))))
(ert-deftest test-org-export/expand-macro ()
"Test macro expansion in an Org buffer."
--
2.2.1
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, (continued)
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/10
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/10
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/10
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/13
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/17
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/18
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/19
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/21
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/21
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/21
- Re: [O] [bug, patch, ox] INCLUDE and footnotes,
Rasmus <=
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/22
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/24
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/24
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/24
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/24
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/21
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/21
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/22
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Rasmus, 2014/12/22
- Re: [O] [bug, patch, ox] INCLUDE and footnotes, Nicolas Goaziou, 2014/12/22