summaryrefslogtreecommitdiff
path: root/paper/lua-filters/plantuml/plantuml.lua
diff options
context:
space:
mode:
Diffstat (limited to 'paper/lua-filters/plantuml/plantuml.lua')
-rw-r--r--paper/lua-filters/plantuml/plantuml.lua56
1 files changed, 56 insertions, 0 deletions
diff --git a/paper/lua-filters/plantuml/plantuml.lua b/paper/lua-filters/plantuml/plantuml.lua
new file mode 100644
index 0000000..7903e6a
--- /dev/null
+++ b/paper/lua-filters/plantuml/plantuml.lua
@@ -0,0 +1,56 @@
+--[[
+# PlantUML Pandoc filter
+PlantUML Pandoc filter to process code blocks with class "plantuml" containing PlantUML notation into images.
+
+* For textual output formats, use --extract-media=DIR
+* For HTML formats, you may alternatively use --self-contained
+
+## Example in markdown-file
+```plantuml
+@startuml
+Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response
+Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response @enduml
+```
+## Run pandoc
+```
+pandoc --self-contained --lua-filter=plantuml.lua readme.md -o output.htm
+```
+
+## Prerequisites
+* download PlantUML from http://plantuml.com (needs JAVA)
+* 3 ways to set the environment
+ 1. plantuml.lua and plantuml.jar in the same folder and start pandoc always from this folder
+ 2. set a Environment Variable PLANTUML with the path to plantuml.jar
+ * Windows - with powershell: Set-Item env:PLANTUML "c:\bin\plantuml.jar"
+ 3. change path to plantuml.jar in plantuml.lua
+
+This script based on the example "Converting ABC code to music notation" from https://pandoc.org/lua-filters.html
+**This script was only tested with markdown to html on a windows environment!**
+]]
+
+-- Path to PlantUML.jar
+-- if you use opinion 3 change the path to plantuml.jar like this:
+-- local plantumlPath = os.getenv("PLANTUML") or "c:\\bin\\plantuml.jar"
+local plantumlPath = os.getenv("PLANTUML") or "plantuml.jar"
+
+-- SVG has a much better quality
+-- local filetype = "png"
+-- local mimetype = "image/png"
+local filetype = "svg"
+local mimetype = "image/svg+xml"
+
+-- call plantuml.jar wit some parameters (see plantuml help)
+local function plantuml(puml, filetype, plantumlPath)
+ local final = pandoc.pipe("java", {"-jar", plantumlPath, "-t" .. filetype, "-pipe", "-charset", "UTF8"}, puml)
+ return final
+end
+
+-- search for class "plantuml" and replace with image
+function CodeBlock(block)
+ if block.classes[1] == "plantuml" then
+ local img = plantuml(block.text, filetype, plantumlPath)
+ local fname = pandoc.sha1(img) .. "." .. filetype
+ pandoc.mediabag.insert(fname, mimetype, img)
+ return pandoc.Para{ pandoc.Image({pandoc.Str("PlantUML Diagramm")}, fname) }
+ end
+end