Leo’s Markup Language

Leo’s markup tells Leo how to create external files from @file trees. Markup may appear in any body text, and must appear in the body of the @file node itself.

There are two kinds of markup: section references (<< this is my section >>) and the @others directive. Section references refer to named nodes, nodes whose headlines look like a section reference. @others refers to all other (unnamed) nodes. Here is the body text of a typical @file node for a python file:

"""A docstring"""
<< imports >>
@others
if __name__ == '__main__':
    main()
@language python
@tabwidth -4

A child node must define the << imports >> node. Other children will typically define classes, methods, functions and data.

When writing this file, Leo writes:

  • The docstring.

  • The body text of the << imports>> node.

  • The body text of all other nodes, in outline order.

  • The lines after the @others directive.

Leo’s markup applies to scripts as well as external files. Leo’s execute-script command composes the script from the selected node, using Leo’s markup. For example: this body text defines the top-level part of a script:

"""My script"""
<< imports >>
class Controller:
    # Child nodes define the methods of this class.
    @others
Controller(c).run # c *is* defined.

Important: Leo recognizes section references everywhere, even inside strings or comments.