combining markdown
This commit is contained in:
commit
c5a5272ffa
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
events
|
||||||
|
mo
|
18
README.md
Normal file
18
README.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Klank docs
|
||||||
|
|
||||||
|
## installation
|
||||||
|
Run the install.sh to install [Mustache](https://github.com/tests-always-included/mo)
|
||||||
|
|
||||||
|
|
||||||
|
Also, pandoc is needed. Additionally researching this thing https://github.com/pandoc-ext/include-files/tree/main
|
||||||
|
|
||||||
|
|
||||||
|
More info to come ;)
|
||||||
|
|
||||||
|
## Scripts & folders
|
||||||
|
|
||||||
|
- `newsletters` write your new newsletter here
|
||||||
|
- `templates` contains a markdown template for events, that are being grabbed via
|
||||||
|
- `get_events.sh` run as `sh get_events.sh` to grab all events from the klankschool calendar and store them as markdwon files
|
||||||
|
- `install.sh` the installation script for Mustache
|
||||||
|
- `make_newsletter.sh` run as `sh make_newsletter` to translate all created newsletters in the `newsletters` directory into HTML. Created newsletters are stored in the `dist` directory
|
6
dist/newsletters/december.md.html
vendored
Normal file
6
dist/newsletters/december.md.html
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<h1 id="december">December</h1>
|
||||||
|
<p>What a great month it was</p>
|
||||||
|
<h2 id="event">Event</h2>
|
||||||
|
<h1 id="lets-unrepair-things-together">Let’s (un)repair things
|
||||||
|
together!</h1>
|
||||||
|
<p>This event starts at 1731603600</p>
|
30
get_events.sh
Normal file
30
get_events.sh
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
DIRECTORY=events
|
||||||
|
|
||||||
|
if [ ! -d "$DIRECTORY" ]; then
|
||||||
|
mkdir $DIRECTORY
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
echo $(curl -s "https://calendar.klank.school/api/events") | jq -c '.[]' | while read -r item; do
|
||||||
|
slug=$(echo "$item" | jq -r '.slug')
|
||||||
|
|
||||||
|
echo $item
|
||||||
|
|
||||||
|
export TITLE=$(echo "$item" | jq -r '.title')
|
||||||
|
export START_DATETIME=$(echo "$item" | jq -r '.start_datetime')
|
||||||
|
export END_DATETIME=$(echo "$item" | jq -r '.end_datetime')
|
||||||
|
|
||||||
|
filename="events/${slug}.md"
|
||||||
|
|
||||||
|
if test -f "$filename"; then
|
||||||
|
rm -f -- $filename
|
||||||
|
fi
|
||||||
|
|
||||||
|
mo templates/event.md >> $filename
|
||||||
|
echo "Created a new event markdown file for " $filename
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
|
127
include-files.lua
Normal file
127
include-files.lua
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
--- include-files.lua – filter to include Markdown files
|
||||||
|
---
|
||||||
|
--- Copyright: © 2019–2021 Albert Krewinkel
|
||||||
|
--- License: MIT – see LICENSE file for details
|
||||||
|
|
||||||
|
-- Module pandoc.path is required and was added in version 2.12
|
||||||
|
PANDOC_VERSION:must_be_at_least '2.12'
|
||||||
|
|
||||||
|
local List = require 'pandoc.List'
|
||||||
|
local path = require 'pandoc.path'
|
||||||
|
local system = require 'pandoc.system'
|
||||||
|
|
||||||
|
--- Get include auto mode
|
||||||
|
local include_auto = false
|
||||||
|
function get_vars (meta)
|
||||||
|
if meta['include-auto'] then
|
||||||
|
include_auto = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Keep last heading level found
|
||||||
|
local last_heading_level = 0
|
||||||
|
function update_last_level(header)
|
||||||
|
last_heading_level = header.level
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Update contents of included file
|
||||||
|
local function update_contents(blocks, shift_by, include_path)
|
||||||
|
local update_contents_filter = {
|
||||||
|
-- Shift headings in block list by given number
|
||||||
|
Header = function (header)
|
||||||
|
if shift_by then
|
||||||
|
header.level = header.level + shift_by
|
||||||
|
end
|
||||||
|
return header
|
||||||
|
end,
|
||||||
|
-- If link paths are relative then prepend include file path
|
||||||
|
Link = function (link)
|
||||||
|
if path.is_relative(link.target) then
|
||||||
|
link.target = path.normalize(path.join({include_path, link.target}))
|
||||||
|
end
|
||||||
|
return link
|
||||||
|
end,
|
||||||
|
-- If image paths are relative then prepend include file path
|
||||||
|
Image = function (image)
|
||||||
|
if path.is_relative(image.src) then
|
||||||
|
image.src = path.normalize(path.join({include_path, image.src}))
|
||||||
|
end
|
||||||
|
return image
|
||||||
|
end,
|
||||||
|
-- Update path for include-code-files.lua filter style CodeBlocks
|
||||||
|
CodeBlock = function (cb)
|
||||||
|
if cb.attributes.include and path.is_relative(cb.attributes.include) then
|
||||||
|
cb.attributes.include =
|
||||||
|
path.normalize(path.join({include_path, cb.attributes.include}))
|
||||||
|
end
|
||||||
|
return cb
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
return pandoc.walk_block(pandoc.Div(blocks), update_contents_filter).content
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Filter function for code blocks
|
||||||
|
local transclude
|
||||||
|
function transclude (cb)
|
||||||
|
-- ignore code blocks which are not of class "include".
|
||||||
|
if not cb.classes:includes 'include' then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Markdown is used if this is nil.
|
||||||
|
local format = cb.attributes['format']
|
||||||
|
|
||||||
|
-- Attributes shift headings
|
||||||
|
local shift_heading_level_by = 0
|
||||||
|
local shift_input = cb.attributes['shift-heading-level-by']
|
||||||
|
if shift_input then
|
||||||
|
shift_heading_level_by = tonumber(shift_input)
|
||||||
|
else
|
||||||
|
if include_auto then
|
||||||
|
-- Auto shift headings
|
||||||
|
shift_heading_level_by = last_heading_level
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- keep track of level before recusion
|
||||||
|
local buffer_last_heading_level = last_heading_level
|
||||||
|
|
||||||
|
local blocks = List:new()
|
||||||
|
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
|
||||||
|
-- read file as the given format with global reader options
|
||||||
|
local contents = pandoc.read(
|
||||||
|
fh:read '*a',
|
||||||
|
format,
|
||||||
|
PANDOC_READER_OPTIONS
|
||||||
|
).blocks
|
||||||
|
last_heading_level = 0
|
||||||
|
-- recursive transclusion
|
||||||
|
contents = system.with_working_directory(
|
||||||
|
path.directory(line),
|
||||||
|
function ()
|
||||||
|
return pandoc.walk_block(
|
||||||
|
pandoc.Div(contents),
|
||||||
|
{ Header = update_last_level, CodeBlock = transclude }
|
||||||
|
)
|
||||||
|
end).content
|
||||||
|
--- reset to level before recursion
|
||||||
|
last_heading_level = buffer_last_heading_level
|
||||||
|
blocks:extend(update_contents(contents, shift_heading_level_by,
|
||||||
|
path.directory(line)))
|
||||||
|
fh:close()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return blocks
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
{ Meta = get_vars },
|
||||||
|
{ Header = update_last_level, CodeBlock = transclude }
|
||||||
|
}
|
11
install.sh
Normal file
11
install.sh
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Download
|
||||||
|
curl -sSL https://raw.githubusercontent.com/tests-always-included/mo/master/mo -o mo
|
||||||
|
|
||||||
|
# Make executable
|
||||||
|
chmod +x mo
|
||||||
|
|
||||||
|
# Move to the right folder
|
||||||
|
sudo mv mo /usr/local/bin/
|
||||||
|
|
||||||
|
# Test
|
||||||
|
echo "works" | mo
|
10
make_newsletter.sh
Normal file
10
make_newsletter.sh
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
mkdir dist
|
||||||
|
mkdir dist/newsletters
|
||||||
|
|
||||||
|
cd newsletters
|
||||||
|
|
||||||
|
for file in *.md; do
|
||||||
|
echo $file
|
||||||
|
pandoc --lua-filter=../include-files.lua $file --output ../dist/newsletters/$file.html
|
||||||
|
done
|
9
newsletters/december.md
Normal file
9
newsletters/december.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# December
|
||||||
|
|
||||||
|
What a great month it was
|
||||||
|
|
||||||
|
## Event
|
||||||
|
|
||||||
|
``` {.include}
|
||||||
|
../events/lets-unrepair-things-together-2.md
|
||||||
|
```
|
2
templates/event.md
Normal file
2
templates/event.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# {{TITLE}}
|
||||||
|
This event starts at {{START_DATETIME}}
|
Loading…
Reference in New Issue
Block a user