Files
marka/template/README.md
2025-10-01 16:45:18 +02:00

2.5 KiB

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
}