LatexParser constructor
LatexParser(
- String input, {
- ParseOptions options = const ParseOptions(),
- MacroTable? macros,
Creates a parser for input. Pass a shared macros table to keep
\gdef / \newcommand definitions across formulas.
Implementation
LatexParser(
String input, {
this.options = const ParseOptions(),
MacroTable? macros,
}) : source = SourceText(input),
_sharedMacros = macros,
_macros = macros ?? MacroTable(builtinMacros) {
_macros.extensions = extensionMacros(
options.extensions,
physics: options.physics,
);
_macros.fallbacks = _fallbacks;
final label = options.captionLabel;
if (label != null) {
// Numbered captions: each \caption takes the next number.
var number = 0;
_macros.set(
r'\caption',
FunctionMacro((e, call) {
e.readOptionalArgument();
final text = e.readArgument();
number++;
return [
...Lexer('\\\\\\text{$label $number: ').tokenize()
..removeWhere((t) => t.isEof),
...text.tokens,
...Lexer('}\\\\').tokenize()..removeWhere((t) => t.isEof),
];
}),
);
}
options.macros.forEach((name, body) {
_macros.set(name, TokenMacro.parse(body));
});
_doubled = _looksDoubled(source.text);
_x = MacroExpander(
Lexer(
source.text,
paragraphs: true,
undoubleBackslashes: _doubled != null,
),
_macros,
maxExpand: options.maxExpand,
maxTokens: options.maxTokens,
report: _report,
isDefined: _isDefined,
overBudget: options.timeBudget == null
? null
: () => _clock.elapsed > options.timeBudget!,
);
}