From 79fd181e1a3a9bf396176466add23eb892c43789 Mon Sep 17 00:00:00 2001 From: Bruno BEAUFILS Date: Fri, 23 Oct 2020 02:02:56 +0200 Subject: [PATCH 1/3] include-files: support for source code blocks from included files --- include-files/Makefile | 4 ++-- include-files/README.md | 13 +++++++++++++ include-files/expected-auto.native | 2 ++ include-files/expected.native | 2 ++ include-files/include-files.lua | 16 ++++++++++++++++ include-files/sample.md | 8 ++++++++ include-files/shell1 | 4 ++++ include-files/shell2 | 6 ++++++ 8 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 include-files/shell1 create mode 100644 include-files/shell2 diff --git a/include-files/Makefile b/include-files/Makefile index c5f5279e..9fbb8ebb 100644 --- a/include-files/Makefile +++ b/include-files/Makefile @@ -1,12 +1,12 @@ DIFF ?= diff --strip-trailing-cr -u -test: sample.md file-a.md file-b.md file-c.md include-files.lua +test: sample.md file-a.md file-b.md file-c.md shell1 shell2 include-files.lua @pandoc --lua-filter=include-files.lua --to=native $< \ | $(DIFF) expected.native - @pandoc --lua-filter=include-files.lua -M include-auto --to=native $< \ | $(DIFF) expected-auto.native - -expected.native: sample.md file-a.md file-b.md file-c.md include-files.lua +expected.native: sample.md file-a.md file-b.md file-c.md shell1 shell2 include-files.lua pandoc --lua-filter=include-files.lua --output $@ $< expected-auto.native: sample.md file-a.md file-b.md file-c.md include-files.lua diff --git a/include-files/README.md b/include-files/README.md index a99402a2..f1596016 100644 --- a/include-files/README.md +++ b/include-files/README.md @@ -11,6 +11,9 @@ document. Metadata from included files is discarded. +Add class `source` to include files as normal code blocks taken from +files instead of text in same format as the input. + ### Shifting Headings The default is to include the subdocuments unchanged, but it can @@ -59,6 +62,9 @@ will want to include files written in a different format. An alternative format can be specified via the `format` attribute. Only plain-text formats are accepted. +In order to include source code block from files use additional class +`source` instead of trying the language as `format`. + ### Recursive transclusion Included files can in turn include other files. Note that all @@ -101,6 +107,13 @@ some additional information in the main file `main.md`: appendix/questionaire.md ``` + ## Source code + + ``` {.include .source .lua} + // code of this nice filter + include-files.lua + ``` + An HTML can be produced with this command: pandoc --lua-filter=include-files.lua main.md --output result.html diff --git a/include-files/expected-auto.native b/include-files/expected-auto.native index 22be9279..dd398cb0 100644 --- a/include-files/expected-auto.native +++ b/include-files/expected-auto.native @@ -16,6 +16,8 @@ ,Para [Str "This",Space,Str "is",Space,Code ("",[],[]) "file-a.md",Str "."] ,Header 3 ("title-of-file-a",[],[]) [Str "Title",Space,Str "of",Space,Str "file-a"] ,Para [Str "This",Space,Str "is",Space,Code ("",[],[]) "file-a.md",Str "."] +,Header 1 ("source-code",[],[]) [Str "Source",Space,Str "code"] +,CodeBlock ("",["include","source","bash"],[]) "#!/bin/bash\n\necho \"Hello World !\"\n\n#!/bin/bash\nfor i in \"Hello \" \"World \" \"!\\n\" \ndo\n\tprintf \"$i\"\ndone\n\n" ,Header 1 ("appendix",[],[]) [Str "Appendix"] ,Para [Str "More",Space,Str "info",Space,Str "goes",Space,Str "here."] ,Header 2 ("questionaire",[],[]) [Str "Questionaire"] diff --git a/include-files/expected.native b/include-files/expected.native index d50caa48..f8c3fcd5 100644 --- a/include-files/expected.native +++ b/include-files/expected.native @@ -16,6 +16,8 @@ ,Para [Str "This",Space,Str "is",Space,Code ("",[],[]) "file-a.md",Str "."] ,Header 2 ("title-of-file-a",[],[]) [Str "Title",Space,Str "of",Space,Str "file-a"] ,Para [Str "This",Space,Str "is",Space,Code ("",[],[]) "file-a.md",Str "."] +,Header 1 ("source-code",[],[]) [Str "Source",Space,Str "code"] +,CodeBlock ("",["include","source","bash"],[]) "#!/bin/bash\n\necho \"Hello World !\"\n\n#!/bin/bash\nfor i in \"Hello \" \"World \" \"!\\n\" \ndo\n\tprintf \"$i\"\ndone\n\n" ,Header 1 ("appendix",[],[]) [Str "Appendix"] ,Para [Str "More",Space,Str "info",Space,Str "goes",Space,Str "here."] ,Header 2 ("questionaire",[],[]) [Str "Questionaire"] diff --git a/include-files/include-files.lua b/include-files/include-files.lua index f685ec00..bc329114 100644 --- a/include-files/include-files.lua +++ b/include-files/include-files.lua @@ -43,6 +43,22 @@ function transclude (cb) if not cb.classes:includes 'include' then return end + -- process files as source code blocks + if cb.classes:includes 'source' then + local contents = "" + for line in cb.text:gmatch('[^\n]+') do + if line:sub(1,2) ~= '//' then + local fh = io.open(line) + if not fh then + io.stderr:write("Cannot open file " .. line .. " | Skipping includes\n") + else + contents = contents .. fh:read('*a') + end + fh:close() + end + end + return pandoc.CodeBlock(contents, cb.attr) + end -- Markdown is used if this is nil. local format = cb.attributes['format'] diff --git a/include-files/sample.md b/include-files/sample.md index b0352fb8..191d1936 100644 --- a/include-files/sample.md +++ b/include-files/sample.md @@ -28,6 +28,14 @@ file-d.org file-f.md ``` +# Source code + +``` {.include .source .bash} +// this will include simple bash files +shell1 +shell2 +``` + # Appendix More info goes here. diff --git a/include-files/shell1 b/include-files/shell1 new file mode 100644 index 00000000..4d0a6dc1 --- /dev/null +++ b/include-files/shell1 @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "Hello World !" + diff --git a/include-files/shell2 b/include-files/shell2 new file mode 100644 index 00000000..a635b20f --- /dev/null +++ b/include-files/shell2 @@ -0,0 +1,6 @@ +#!/bin/bash +for i in "Hello " "World " "!\n" +do + printf "$i" +done + From 76d0db5167d2721687ce16fdcca8c8b8793b83e5 Mon Sep 17 00:00:00 2001 From: Bruno BEAUFILS Date: Fri, 23 Oct 2020 02:27:34 +0200 Subject: [PATCH 2/3] include-files: comment fix --- include-files/include-files.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include-files/include-files.lua b/include-files/include-files.lua index bc329114..0bf12666 100644 --- a/include-files/include-files.lua +++ b/include-files/include-files.lua @@ -1,4 +1,4 @@ ---- include-files.lua – filter to include Markdown files +--- include-files.lua – filter to include files --- --- Copyright: © 2019–2020 Albert Krewinkel --- License: MIT – see LICENSE file for details From c32b5d5feeff70a10da603796598bf4c67d70456 Mon Sep 17 00:00:00 2001 From: Bruno BEAUFILS Date: Fri, 23 Oct 2020 02:44:27 +0200 Subject: [PATCH 3/3] include-files: bugfix. --- include-files/include-files.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include-files/include-files.lua b/include-files/include-files.lua index 0bf12666..e060843d 100644 --- a/include-files/include-files.lua +++ b/include-files/include-files.lua @@ -53,8 +53,8 @@ function transclude (cb) io.stderr:write("Cannot open file " .. line .. " | Skipping includes\n") else contents = contents .. fh:read('*a') + fh:close() end - fh:close() end end return pandoc.CodeBlock(contents, cb.attr)