# 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: ```markdown # Ingredients - Flour - Water - Yeast - Salt ``` Or even numbered lists like: ```markdown # 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: ```markdown # 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 } ```