Fix boundary handling in Parser and update tests for empty cases

This commit is contained in:
2026-04-07 10:04:11 +08:00
parent 3d7db623dc
commit 2a6cb0cb4c
2 changed files with 26 additions and 6 deletions

View File

@@ -764,6 +764,12 @@ extension Math {
// reinstate the old inner atom.
let newInner = currentInnerAtom
currentInnerAtom = oldInner
if newInner?.leftBoundary?.nucleus.isEmpty == true {
newInner?.leftBoundary = nil
}
if newInner?.rightBoundary?.nucleus.isEmpty == true {
newInner?.rightBoundary = nil
}
return newInner
} else if command == "overline" {
// The overline command has 1 arguments
@@ -1162,6 +1168,12 @@ extension Math {
}
let newInner = self.currentInnerAtom
currentInnerAtom = oldInner
if newInner?.leftBoundary?.nucleus.isEmpty == true {
newInner?.leftBoundary = nil
}
if newInner?.rightBoundary?.nucleus.isEmpty == true {
newInner?.rightBoundary = nil
}
return newInner
} else if command == "overline" {
let over = Overline()

View File

@@ -594,13 +594,21 @@ struct ParserTests {
let innerList = try #require(inner.innerList)
checkAtomTypes(innerList, types: testCase.type2)
let leftBoundary = try #require(inner.leftBoundary)
#expect(leftBoundary.type == .boundary)
#expect(leftBoundary.nucleus == testCase.left)
if testCase.left.isEmpty {
#expect(inner.leftBoundary == nil)
} else {
let leftBoundary = try #require(inner.leftBoundary)
#expect(leftBoundary.type == .boundary)
#expect(leftBoundary.nucleus == testCase.left)
}
let rightBoundary = try #require(inner.rightBoundary)
#expect(rightBoundary.type == .boundary)
#expect(rightBoundary.nucleus == testCase.right)
if testCase.right.isEmpty {
#expect(inner.rightBoundary == nil)
} else {
let rightBoundary = try #require(inner.rightBoundary)
#expect(rightBoundary.type == .boundary)
#expect(rightBoundary.nucleus == testCase.right)
}
// convert it back to latex
let latex = Math.Parser.atomListToString(list)