measure method
NodeLayout
measure({
- required LatexNode node,
- required RenderContext context,
- required NodeLayout measureNode(),
- required NodeLayout measureGroup(),
override
Measures a node and returns its layout.
Implementation
@override
NodeLayout measure({
required LatexNode node,
required RenderContext context,
required NodeLayout Function(LatexNode, RenderContext) measureNode,
required NodeLayout Function(List<LatexNode>, RenderContext) measureGroup,
}) {
final isSuper = node is SuperscriptNode;
final LatexNode baseNode;
final LatexNode scriptNode;
if (isSuper) {
final superNode = node;
baseNode = superNode.base;
scriptNode = superNode.exponent;
} else {
final subNode = node as SubscriptNode;
baseNode = subNode.base;
scriptNode = subNode.index;
}
// Special handling: \underbrace{...}_{text} and \overbrace{...}^{text}.
// Text annotations should be placed below/above the brace, center-aligned.
final braceAnnotation = _detectBraceAnnotation(isSuper, baseNode);
if (braceAnnotation != null) {
return _measureBraceAnnotation(
braceAnnotation,
scriptNode,
context,
measureNode,
);
}
final hasBothScripts =
(isSuper && baseNode is SubscriptNode) ||
(!isSuper && baseNode is SuperscriptNode);
if (hasBothScripts) {
return _measureBothScripts(
isSuper,
baseNode,
scriptNode,
context,
measureNode,
);
} else {
return _measureSingleScript(
isSuper,
baseNode,
scriptNode,
context,
measureNode,
);
}
}