From mboxrd@z Thu Jan 1 00:00:00 1970 From: Achim Gratz Subject: Re: #+INCLUDE: myfile.html html does not include /literally/; Org processes Date: Sat, 07 Jun 2014 12:11:28 +0200 Message-ID: <87bnu5t4fj.fsf@Rainer.invalid> References: <538AA6B8.40604@gmail.com> <8761kl12w9.fsf@Rainer.invalid> <87bnudf2u4.fsf@gmail.com> <87wqd1yo84.fsf@Rainer.invalid> <8738fpeyov.fsf@gmail.com> <87sinpylly.fsf@Rainer.invalid> <87r438eujq.fsf@gmail.com> <87iookzsto.fsf@Rainer.invalid> <87fvjoenlt.fsf@gmail.com> <87egz8zowa.fsf@Rainer.invalid> <87egz5pw4g.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:41892) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WtDbI-0008UT-03 for emacs-orgmode@gnu.org; Sat, 07 Jun 2014 06:11:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WtDbC-000690-2O for emacs-orgmode@gnu.org; Sat, 07 Jun 2014 06:11:47 -0400 Received: from plane.gmane.org ([80.91.229.3]:34300) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WtDbB-00068V-N3 for emacs-orgmode@gnu.org; Sat, 07 Jun 2014 06:11:41 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1WtDbA-0006kY-PL for emacs-orgmode@gnu.org; Sat, 07 Jun 2014 12:11:40 +0200 Received: from pd9eb086d.dip0.t-ipconnect.de ([217.235.8.109]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 07 Jun 2014 12:11:40 +0200 Received: from Stromeko by pd9eb086d.dip0.t-ipconnect.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 07 Jun 2014 12:11:40 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain 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: --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-ox-implement-additional-INCLUDE-markup.patch >From 3fe089c11b1ca149bbd0f80ee9389a1d7c14e5ed Mon Sep 17 00:00:00 2001 From: Achim Gratz 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 block@footnote{While you can request paragraphs (@samp{verse}, +@samp{quote}, @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 "\\" value) 'example) + (env (cond ((string-match "\\" value) + 'literal) ((string-match "\\" 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 @@ +

HTML!

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

HTML!

\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 --=-=-= Content-Type: text/plain 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 --=-=-=--