Jigsaw is a wrapper for the Jinja2 templating system. When provided with data files D, and a template t[x], Jigsaw computes t[D].
Jigsaw depends on the Python libraries jinja2 and yaml. These can be installed through pip or brew.
After installing the dependencies, simply add the jigsaw folder to your $PYTHONPATH. You can then run Jigsaw by python3 jigsaw ....
Jigsaw takes at most three parameters, two of which are required:
-t, or--template: the template files Jigsaw will use. Can be either a single file or a directory.-d, or--data: the data files Jigsaw will use. Can be either a single file or a directory.-o, or--output: the output target. If the argument to--templateis a file, this output will be a file whose name is the--outputargument. If the template file is a directory, then the output will be a directory with the provided name.
Consider the files below:
template
|-- images
| |-- ...
|-- src
| |-- index.html
| |-- projects.html
| |-- ...
|-- ...
and
data
|-- main.yaml
|-- notes.yaml
|-- projects
| |-- jigsaw.yaml
| |-- ...
|-- ...
Running the command
python3 jigsaw -t template -d data -o out
will first load the data directory into a dictionary to pass to jinja2 templates. If @ denotes dictionary union and <file> denotes the dictionary representation of file.yaml, the dictionary representation of the data file is:
<data> := <main> @ <notes> @ {projects: [<jigsaw> @ ...]} @ ...
That is, the top-level directory is ignored, while sub-directories form dictionary entries whose keys are the name of the directory and whose values are a list of the sub-dictionaries.
Now, if file.html <- <d> denotes evaluating the template file.html with provided data dictionary <d>, the output of our entire script will be the directory
out
|-- images
| |-- ...
|-- src
| |-- index.html <- <data>
| |-- projects.html <- <data>
| |-- ...
|-- ...
For data files, Jigsaw supports:
- yaml
For template files, Jigsaw supports:
- html
- LaTex
- markdown
- ...