# bUwUma `bUwUma` is a build system that uses **GNU make** and a **preprocessor** written in python to build **static**, **multilingual** websites. This readme only documents the preprocessor. For more information and a quickstart guide on how to use `bUwUma`, please refer to the article [on my website](https://quintern.xyz/en/software/buwuma.html). # HTML Preprocessor Documentation ## Syntax ### Commands - All commands must be located within a html comment what starts with ``. - Commands start with a `#` character, the command must follow the `#` immediately. - Everything after the command until the end of the comment or a newline character are considered the argument of the command. ```html ``` - All commands return a string, which can be empty. - If a comment contains a command, the entire comment will replaced with the return value of the command. - If there are multiple commands in a command, it will be replaced by all the return values added together. ### Variables - Variable names must only consist of these characters: `a-zA-Z0-9_` - A variable with name `varname` can be used like this: `#$(varname)` - A variable usage will be replaced by the value of the variable - Any variable that has is not defined has empty string as value ### General - Whitespaces around a token are ignored, so `` is the same as `` - If a command-comment takes up a whole line, the whole line including the newline character is replaced. ## Commands ### include Include the content of a file at the position of the command. **Synopsis**: `` **Argument**: A absolute or relative path to a text file **Return Value**: The content of the file or `` empty string if the file can not be opened. --- ### set Set the value of a variable **Synopsis**: Set the value of `varname` to `this is the value`: `` Set the value of `varname` depending on the value of `othervar`: `` **Argument**: Any string **Return Value**: The argument in comment tags This can be useful in multiline comments that contain other commands: In that case, the comment tags will be removed and each command replaced with its return value, so if you want to just have commented text in there you can use `#comment` ### uncomment Uncomment the comment. **Synopsis**: `` **Argument**: Any string **Return Value**: The argument This can be useful when you want to look at the unprocessed html without variables or when your syntax highlighting gets confused by a variable. --- ### sidenav Manage the generation of a content menu which contains links to all headings in your html that have an id. The menu is called sidenav here. An entry is a html heading with a id: `