Marka Template Language
The marka template languages uses curly braces ({
/}
) to seperate data
content from matching
content.
The data content is extracted from the markdown file during parsing and replaced by actual data during rendering.
The data
parts aka data-blocks
support two different syntaxes which with they are defined.
Short Syntax
The first is the "short" syntax which may look like one of the following:
{ articleTitle }
{ articleId | number }
{ articleTags | hashtags,optional }
Before the |
character is the path of the data block inside the data. After the (optional) |
come comma seperated flags on how to parse/render this specific block.
Long Syntax
The long syntax uses yaml
to define the data-blocks
:
{
path: recipeIngredient
codec: list
listTemplate: "- { . }"
}
Codecs
Codecs are the predefined ways on how to parse/render data-blocks
. The current list of codecs looks like this:
- text
- number
- yaml
- list
- const
- hashtags
While text
or number
may be self explanatory the other codecs may require some more explanation.
Const Codec
The const codec is used to specify fields which should always be the same during rendering. For example if for a specified template the title should always be the same when rendering/parsing:
# {
path: articleTitle
codec: const
value: TestArticle
}
Note: You need to supply a "value" with the "const" codec otherwise the application will throw an error
List Codec
The list codec is used to parse/render list blocks like the following:
# Ingredients
- Flour
- Water
- Yeast
- Salt
Or even numbered lists like:
# Steps
1. Mix all the ingredients except salt
2. Let the dough sit for 1/2 hour (autolyse)
3. Add the salt
4. Knead again
To parse the steps list you could use a template like this:
# Steps
{
path: recipeInstructions
codec: list
listTemplate: "{ @index }. { . }"
}
The listTemplate
is a required field on the list
block. It uses the same syntax as the template itself, with the special edition of a @index
variable to handle the index in numbered lists.
Yaml Codec
The yaml
codec parses parses/renders its content as yaml. Every field inside the yaml needs to be specified:
{
path: .
codec: yaml
fields:
- path: "@context"
codec: const
value: https://schema.org
hidden: true
- path: "@schema"
codec: const
value: Article
hidden: true
- path: "@type"
codec: const
value: Article
}