Fixed some finalization issues.

This commit is contained in:
Michael Griebling
2023-01-18 11:19:49 -05:00
parent 7b1e44331c
commit 4ac8718c78

View File

@@ -195,13 +195,9 @@ public class MTMathAtom: NSObject {
} }
public var finalized: MTMathAtom { public var finalized: MTMathAtom {
let finalized = self let finalized : MTMathAtom = self.copy()
if finalized.superScript != nil { finalized.superScript = finalized.superScript?.finalized
finalized.superScript = finalized.superScript!.finalized finalized.subScript = finalized.subScript?.finalized
}
if finalized.subScript != nil {
finalized.subScript = finalized.subScript!.finalized
}
return finalized return finalized
} }
@@ -306,10 +302,10 @@ public class MTFraction: MTMathAtom {
} }
override public var finalized: MTMathAtom { override public var finalized: MTMathAtom {
let finalized: MTFraction = super.finalized as! MTFraction let newFrac = super.finalized as! MTFraction
finalized.numerator = finalized.numerator?.finalized newFrac.numerator = newFrac.numerator?.finalized
finalized.denominator = finalized.denominator?.finalized newFrac.denominator = newFrac.denominator?.finalized
return finalized return newFrac
} }
} }
@@ -359,12 +355,10 @@ public class MTRadical: MTMathAtom {
} }
override public var finalized: MTMathAtom { override public var finalized: MTMathAtom {
let finalized: MTRadical = super.finalized as! MTRadical let newRad = super.finalized as! MTRadical
newRad.radicand = newRad.radicand?.finalized
finalized.radicand = finalized.radicand?.finalized newRad.degree = newRad.degree?.finalized
finalized.degree = finalized.degree?.finalized return newRad
return finalized
} }
} }
@@ -442,9 +436,9 @@ public class MTInner: MTMathAtom {
} }
override public var finalized: MTMathAtom { override public var finalized: MTMathAtom {
let finalized: MTInner = super.finalized as! MTInner let newInner = super.finalized as! MTInner
finalized.innerList = finalized.innerList?.finalized newInner.innerList = newInner.innerList?.finalized
return finalized return newInner
} }
} }
@@ -454,15 +448,15 @@ public class MTOverLine: MTMathAtom {
public var innerList: MTMathList? public var innerList: MTMathList?
override public var finalized: MTMathAtom { override public var finalized: MTMathAtom {
let finalized: MTOverLine = super.finalized as! MTOverLine let newOverline = MTOverLine(self)
finalized.innerList = finalized.innerList?.finalized newOverline.innerList = newOverline.innerList?.finalized
return finalized return newOverline
} }
init(_ over: MTOverLine?) { init(_ over: MTOverLine?) {
super.init(over) super.init(over)
self.type = .overline self.type = .overline
self.innerList = MTMathList(self.innerList) self.innerList = MTMathList(over!.innerList)
} }
override init() { override init() {
@@ -477,9 +471,9 @@ public class MTUnderLine: MTMathAtom {
public var innerList: MTMathList? public var innerList: MTMathList?
override public var finalized: MTMathAtom { override public var finalized: MTMathAtom {
let finalized: MTUnderLine = super.finalized as! MTUnderLine let newUnderline = super.finalized as! MTUnderLine
finalized.innerList = finalized.innerList?.finalized newUnderline.innerList = newUnderline.innerList?.finalized
return finalized return newUnderline
} }
init(_ under: MTUnderLine?) { init(_ under: MTUnderLine?) {
@@ -500,9 +494,9 @@ public class MTAccent: MTMathAtom {
public var innerList: MTMathList? public var innerList: MTMathList?
override public var finalized: MTMathAtom { override public var finalized: MTMathAtom {
let finalized: MTAccent = super.finalized as! MTAccent let newAccent = super.finalized as! MTAccent
finalized.innerList = finalized.innerList?.finalized newAccent.innerList = newAccent.innerList?.finalized
return finalized return newAccent
} }
init(_ accent: MTAccent?) { init(_ accent: MTAccent?) {
@@ -592,6 +586,12 @@ public class MTMathColor: MTMathAtom {
public override var string: String { public override var string: String {
"\\color{\(self.colorString)}{\(self.innerList!.string)}" "\\color{\(self.colorString)}{\(self.innerList!.string)}"
} }
override public var finalized: MTMathAtom {
let newColor = super.finalized as! MTMathColor
newColor.innerList = newColor.innerList?.finalized
return newColor
}
} }
// MARK: - MTMathColorbox // MARK: - MTMathColorbox
@@ -615,6 +615,12 @@ public class MTMathColorbox: MTMathAtom {
public override var string: String { public override var string: String {
"\\colorbox{\(self.colorString)}{\(self.innerList!.string)}" "\\colorbox{\(self.colorString)}{\(self.innerList!.string)}"
} }
override public var finalized: MTMathAtom {
let newColor = super.finalized as! MTMathColorbox
newColor.innerList = newColor.innerList?.finalized
return newColor
}
} }
public enum MTColumnAlignment { public enum MTColumnAlignment {
@@ -634,15 +640,13 @@ public class MTMathTable: MTMathAtom {
public var interRowAdditionalSpacing: CGFloat = 0 public var interRowAdditionalSpacing: CGFloat = 0
override public var finalized: MTMathAtom { override public var finalized: MTMathAtom {
let finalized: MTMathTable = super.finalized as! MTMathTable let table = super.finalized as! MTMathTable
for var row in table.cells {
for var row in finalized.cells {
for i in 0..<row.count { for i in 0..<row.count {
row[i] = row[i].finalized row[i] = row[i].finalized
} }
} }
return table
return finalized
} }
init(environment: String?) { init(environment: String?) {
@@ -752,7 +756,7 @@ public class MTMathList : NSObject {
switch newNode.type { switch newNode.type {
case .binaryOperator: case .binaryOperator:
if prevNode == nil || prevNode!.isNotBinaryOperator() { if isNotBinaryOperator(prevNode) {
newNode.type = .unaryOperator newNode.type = .unaryOperator
} }
case .relation, .punctuation, .close: case .relation, .punctuation, .close:
@@ -762,21 +766,16 @@ public class MTMathList : NSObject {
case .number: case .number:
if prevNode != nil && prevNode!.type == .number && prevNode!.subScript == nil && prevNode!.superScript == nil { if prevNode != nil && prevNode!.type == .number && prevNode!.subScript == nil && prevNode!.superScript == nil {
prevNode!.fuse(with: newNode) prevNode!.fuse(with: newNode)
continue continue // skip the current node, we are done here.
} }
default: break default: break
} }
finalizedList.add(newNode) finalizedList.add(newNode)
prevNode = newNode prevNode = newNode
} }
if prevNode != nil && prevNode!.type == .binaryOperator { if prevNode != nil && prevNode!.type == .binaryOperator {
prevNode!.type = .unaryOperator prevNode!.type = .unaryOperator
finalizedList.removeLastAtom()
finalizedList.add(prevNode)
} }
return finalizedList return finalizedList
} }