// Copyright (c) 2009-2022 The MathJax Consortium // SPDX-License-Identifier: Apache-2.0 // Based on BaseMethods.RaiseLower/MoveLeftRight and BaseItems.PositionItem.
package tex import type positionItem struct { name, height, depth string left, right *mml.Node } func ( *positionItem) ( *mml.Node) []*mml.Node { if .left != nil { // PositionItem returns three separate final items. An enclosing // position consumes only the first spacer, not this entire sequence. return []*mml.Node{.left, , .right} } := node("mpadded", ) .Attributes.Set("height", .height) .Attributes.Set("depth", .depth) .Attributes.Set("voffset", .height) return []*mml.Node{} } func ( *positionItem) () error { return texError("MissingBoxFor", "Missing box for \\%s", .name) } type rowPositionFrame struct { item *positionItem prefix []*mml.Node styleDepth int } // CrLaTeX reads its optional dimension before delivering the close item that // can make PositionItem report a missing box. Preserve that error precedence. func ( *parser) ( string) error { if != "\\" { return nil } if .pos < len(.source) && .source[.pos] == '*' { .pos++ } if .pos >= len(.source) || .source[.pos] != '[' { return nil } , , := .readBrackets(nil) if != nil { return } if != "" && !dimensionFull.MatchString() { return texError("BracketMustBeDimension", "Bracket argument to \\%s must be a dimension", ) } return nil }