[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org pr
From: |
Achim Gratz |
Subject: |
Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes |
Date: |
Sat, 07 Jun 2014 12:11:28 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.91 (gnu/linux) |
Nicolas Goaziou writes:
> On second thought, we shouldn't bother too much about it, let the user
> provide any keyword, and turn it into a block of the same name.
>
> So, for example, both
>
> #+include: "file.html" html
>
> and
>
> #+include: "file.html" center
>
> are valid, even though the second one makes little sense.
>
> It is close to your initial approach, minus the "wrap" keyword, which
> seems unnecessary. If you agree with this suggestion, do you volunteer
> to finalize it, along with the required documentation?
Here's the patch for this:
>From 3fe089c11b1ca149bbd0f80ee9389a1d7c14e5ed Mon Sep 17 00:00:00 2001
From: Achim Gratz <address@hidden>
Date: Sat, 7 Jun 2014 11:54:02 +0200
Subject: [PATCH] ox: implement additional #+INCLUDE markup
* lisp/ox.el (org-export-expand-include-keyword): Change parsing so
that arbitrary blocks around the included content can be used.
Content is not code-escaped unless it is a literal block, this
applies to "src" and "example".
* doc/org.texi (Include files): Document the additional markup.
* testing/lisp/test-ox.el (test-org-export/expand-include): Add test
for an #+INCLUDE with "html" and "center" markup.
* testing/examples/include.html: New file, used for testing
"#+INCLUDE html".
---
doc/org.texi | 25 +++++++++++++++----------
lisp/ox.el | 29 ++++++++++++++++++-----------
testing/examples/include.html | 1 +
testing/lisp/test-ox.el | 16 ++++++++++++++++
4 files changed, 50 insertions(+), 21 deletions(-)
create mode 100644 testing/examples/include.html
diff --git a/doc/org.texi b/doc/org.texi
index 4548eda..0484ef1 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -9963,13 +9963,18 @@ @section Include files
@end example
@noindent
-The optional second and third parameter are the markup (i.e., @samp{example}
-or @samp{src}), and, if the markup is @samp{src}, the language for formatting
-the contents.
-
-If no markup is given, the text will be assumed to be in Org mode format and
-will be processed normally. However, footnote labels (@pxref{Footnotes}) in
-the file will be made local to that file.
+The first parameter names the the file to include. The optional second and
+third parameter specify the markup (i.e., @samp{example} or @samp{src}), and,
+if the markup is @samp{src}, the language for formatting the contents.
+
+If markup is requested, the included content will be placed within an
+appropriate address@hidden you can request paragraphs (@samp{verse},
address@hidden, @samp{center}), there are no checks ensure the result is valid
+Org syntax.}. For markup @samp{example} and @samp{src}, which is requesting
+a literal example, the content will be code-escaped before inclusion. In all
+other cases, the text will be assumed to be in Org mode format and will be
+processed normally. However, footnote labels (@pxref{Footnotes}) in the file
+will be made local to that file.
Contents of the included file will belong to the same structure (headline,
item) containing the @code{INCLUDE} keyword. In particular, headlines within
@@ -9984,9 +9989,9 @@ @section Include files
@end example
You can also include a portion of a file by specifying a lines range using
-the @code{:lines} parameter. The line at the upper end of the range will not
-be included. The start and/or the end of the range may be omitted to use the
-obvious defaults.
+the @code{:lines} keyword parameter. The line at the upper end of the range
+will not be included. The start and/or the end of the range may be omitted
+to use the obvious defaults.
@example
#+INCLUDE: "~/.emacs" :lines "5-10" @r{Include lines 5 to 10, 10 excluded}
diff --git a/lisp/ox.el b/lisp/ox.el
index 584037b..fab4960 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -3313,9 +3313,10 @@ (defun org-export-expand-include-keyword (&optional
included dir)
value)
(prog1 (match-string 1 value)
(setq value (replace-match "" nil nil value)))))
- (env (cond ((string-match "\\<example\\>" value) 'example)
+ (env (cond ((string-match "\\<example\\>" value)
+ 'literal)
((string-match "\\<src\\(?: +\\(.*\\)\\)?" value)
- (match-string 1 value))))
+ 'literal)))
;; Minimal level of included file defaults to the child
;; level of the current headline, if any, or one. It
;; only applies is the file is meant to be included as
@@ -3326,7 +3327,11 @@ (defun org-export-expand-include-keyword (&optional
included dir)
(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))))))
+ (if cur (1+ (org-reduced-level cur)) 1)))))
+ (src-args (when (eq env 'literal)
+ (match-string 1 value)))
+ (block (when (string-match "\\<\\([a-zA-Z]+\\)\\>" value)
+ (upcase (match-string 1 value)))))
;; Remove keyword.
(delete-region (point) (progn (forward-line) (point)))
(cond
@@ -3340,22 +3345,24 @@ (defun org-export-expand-include-keyword (&optional
included dir)
(error "Recursive file inclusion: %s" file))
(t
(cond
- ((eq env 'example)
+ ((eq env 'literal)
(insert
(let ((ind-str (make-string ind ? ))
+ (arg-str (if (stringp src-args)
+ (format " %s" src-args)
+ ""))
(contents
(org-escape-code-in-string
(org-export--prepare-file-contents file lines))))
- (format "%s#+BEGIN_EXAMPLE\n%s%s#+END_EXAMPLE\n"
- ind-str contents ind-str))))
- ((stringp env)
+ (format "%s#+BEGIN_%s%s\n%s%s#+END_%s\n"
+ ind-str block arg-str contents ind-str block))))
+ ((stringp block)
(insert
(let ((ind-str (make-string ind ? ))
(contents
- (org-escape-code-in-string
- (org-export--prepare-file-contents file lines))))
- (format "%s#+BEGIN_SRC %s\n%s%s#+END_SRC\n"
- ind-str env contents ind-str))))
+ (org-export--prepare-file-contents file lines)))
+ (format "%s#+BEGIN_%s\n%s%s#+END_%s\n"
+ ind-str block contents ind-str block))))
(t
(insert
(with-temp-buffer
diff --git a/testing/examples/include.html b/testing/examples/include.html
new file mode 100644
index 0000000..c9986d3
--- /dev/null
+++ b/testing/examples/include.html
@@ -0,0 +1 @@
+<p>HTML!</p>
diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el
index 858d38c..e2af5a3 100644
--- a/testing/lisp/test-ox.el
+++ b/testing/lisp/test-ox.el
@@ -851,6 +851,22 @@ (defmacro org-test-with-parsed-data (data &rest body)
(org-export-expand-include-keyword)
(should (equal (buffer-string)
"#+BEGIN_SRC emacs-lisp\n(+ 2 1)\n#+END_SRC\n")))
+ ;; Inclusion within an html export-block.
+ (org-test-with-temp-text
+ (format
+ "#+INCLUDE: \"%s/examples/include.html\" html"
+ org-test-dir)
+ (org-export-expand-include-keyword)
+ (should (equal (buffer-string)
+ "#+BEGIN_HTML\n<p>HTML!</p>\n#+END_HTML\n")))
+ ;; Inclusion within an center paragraph
+ (org-test-with-temp-text
+ (format
+ "#+INCLUDE: \"%s/examples/include2.org\" center"
+ org-test-dir)
+ (org-export-expand-include-keyword)
+ (should (equal (buffer-string)
+ "#+BEGIN_CENTER\nSuccess!\n#+END_CENTER\n")))
;; Footnotes labels are local to each included file.
(should
(= 6
--
1.9.3
Regards,
Achim.
--
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+
Factory and User Sound Singles for Waldorf Q+, Q and microQ:
http://Synth.Stromeko.net/Downloads.html#WaldorfSounds
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, (continued)
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Achim Gratz, 2014/06/01
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Nicolas Goaziou, 2014/06/01
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Achim Gratz, 2014/06/01
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Nicolas Goaziou, 2014/06/01
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Achim Gratz, 2014/06/01
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Nicolas Goaziou, 2014/06/01
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Achim Gratz, 2014/06/01
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Nicolas Goaziou, 2014/06/03
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Achim Gratz, 2014/06/04
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Nicolas Goaziou, 2014/06/05
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes,
Achim Gratz <=
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Nicolas Goaziou, 2014/06/07
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Omid, 2014/06/01
- Re: [O] #+INCLUDE: myfile.html html does not include /literally/; Org processes, Nicolas Goaziou, 2014/06/01