Metamacros
Docile provides a user-extensible text substitution macro system, called "metamacros", that can be used to perform arbitrary textual manipulation and replacement in docstrings prior to parsing and displaying them. A metamacro also provides access to the object and module associated with the docstring in which it is written.
Metamacro Syntax
Metamacros use the syntax !!<NAME>(<TEXT>).
- A
!!double exclamation mark prefix begins a metamacro. <NAME>must be a valid Julia identifier.(opening bracket<TEXT>is optional and can contain arbitrary text.)closing bracket
Example:
"""
!!hypothetical()
!!set(author:Author's Name)
!!get(author)
!!var(author:Author's Name)
!!summary(Set the value for a field in an object's metadata.)
!!longform(
...
)
!!include(includes/file.md)
Nested: !!var(license:[MIT](!!var(license_url:https://github.com/LICENSE.md)))
"""
Escape for the metamacro syntax
To escape the metamacro syntax a double backslash is used immidiately before the !! double
exclamation mark. This does not escape any nested metamacros.
Example:
"""
\\!!hypothetical()
\\!!set(author:Author's Name)
\\!!var(license:[MIT](\\!!var(license_url:https://github.com/LICENSE.md)))
"""
Metamacro definitions
Docile comes with a couple of metamacro definitions in src/Extensions folder.
Package authors can add their own to customise how their documentation is presented to users.
For example such definitions can be added to a docile package configuration file: .docile.
Return Values
Metamacro methods must return a string which is spliced back into the docstring in place of the
metamacro syntax.
The returned string, which can also be an empty string, replaces everything starting with
the !! up to and including the closing parentheses.