This document covers a number of advanced topics pertaining to using Stardoc. ## Docstring Formatting You may want to inline various kinds of formatting in the docstrings adjacent to your Starlark code. Use standard markdown formatting constructs instead of HTML tags. For example: ```python def my_function(foo, bar): """Does some cool stuff. Oh, by the way, have you heard about [Stardoc](https://github.com/bazelbuild/stardoc)? Args: foo: You don't know what a **foo** is? bar: Two variables, `x` and `y`, walk in to a bar... """ ... ``` Markdown formatting constructs are handled appropriately by Stardoc's default output format ("markdown_tables"), even as part of a table. ## Custom Output Stardoc's output format is customizable; while Stardoc's output is markdown by default, you may define a different output format for your documentation. Customization is done at the level of "output templates". To customize the doc output for a particular type of Starlark definition (such as a "rule" or a "function"), you will need to: 1. Create a new custom output template to describe how this type of object should be rendered. 2. In your `stardoc()` target, set the matching `_template` attribute to point to your new output template. For example, you might want to change the way rule documentation is generated. You might create a new output template file `package/rule.vm` and then define your `stardoc` target as follows: ```python stardoc( name = "my_docs", input = "my_rule.bzl", out = "my_rule_doc.md", rule_template = "//package:rule.vm", ) ``` The default values for the available templates may be found under [templates/markdown_tables](../stardoc/templates/markdown_tables). See the [Stardoc rule documentation](stardoc_rule.md) for a comprehensive list of which '_template' attributes are available. ### Writing a custom output template Stardoc's output templates are defined using [Velocity Template Language (VTL)](https://velocity.apache.org/engine/1.7/user-guide.html) with utilities and model objects available in the evaluation context. The full comprehensive list of available utilities top-level objects is available in [the source for MarkdownRenderer](https://github.com/bazelbuild/bazel/blob/3fcfbe14ddec34889c5e3fe33415af2cf9124e7c/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownRenderer.java#L100). Information available for raw model objects (such rule information) is defined by Stardoc's underlying [proto schema](https://github.com/bazelbuild/bazel/blob/5eeccd8a647df10d154d3b86e9732e7f263c96db/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto). This is a particularly advanced feature of Stardoc, so we would recommend using one of the existing canonical [templates](../stardoc/templates/markdown_tables) as a springboard to get started.