The formatter turns a Syntax
tree into a Format
object, inserting both mandatory whitespace (to separate adjacent
tokens) as well as "pretty" optional whitespace.
The basic approach works much like the parenthesizer: A right-to-left traversal over the syntax tree, driven by parser-specific handlers registered via attributes. The traversal is right-to-left so that when emitting a token, we already know the text following it and can decide whether or not whitespace between the two is necessary.
- options : Options
- table : Parser.TokenTable
Instances For
- stxTrav : Syntax.Traverser
- leadWord : String
- leadWordIdent : Bool
When the
leadWord
is nonempty, whether it is an identifier. Identifiers get space inserted between them. - isUngrouped : Bool
Whether the generated format begins with the result of an ungrouped category formatter.
- mustBeGrouped : Bool
Whether the resulting format must be grouped when used in a category formatter. If the flag is set to false, then categoryParser omits the fill+nest operation.
Stack of generated Format objects, analogous to the Syntax stack in the parser. Note, however, that the stack is reversed because of the right-to-left traversal.
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
Execute x
at the right-most child of the current node, if any, then advance to the left.
Runs x
even if there are no children, in which case the current syntax node will be .missing
.
Equations
Instances For
Execute x
, pass array of generated Format objects to fn
, and push result.
Equations
Instances For
Execute x
and concatenate generated Format objects.
Equations
Instances For
If pos?
has a position, run x
and tag its results with that position,
if they are not already tagged. Otherwise just run x
.