Skip to content

Commit

Permalink
Fix Mac version crashes on TextColor. Need at least v12.
Browse files Browse the repository at this point in the history
  • Loading branch information
mgriebling committed Oct 5, 2024
1 parent 428537b commit 9fecdcf
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 73 deletions.
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import PackageDescription
let package = Package(
name: "SwiftMath",
defaultLocalization: "en",
platforms: [.iOS(.v11), .macOS(.v11)],
platforms: [.iOS("11.0"), .macOS("12.0")],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
Expand Down
5 changes: 0 additions & 5 deletions Sources/SwiftMath/MathRender/MTMathAtomFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -528,11 +528,6 @@ public class MTMathAtomFactory {
case "\u{0410}"..."\u{044F}":
return MTMathAtom(type: .ordinary, value: chStr)
case _ where ch.utf32Char < 0x0021 || ch.utf32Char > 0x007E:
// // allow Chinese characters for testing
// if ((ch.utf32Char >= 0x4E00) && (ch.utf32Char <= 0x9FFF)) {
// // CJK support. But xits-math-cn font only has Chinese characters support.
// return MTMathAtom(type:.ordinary, value:chStr)
// }
return nil
case "$", "%", "#", "&", "~", "\'", "^", "_", "{", "}", "\\":
return nil
Expand Down
59 changes: 29 additions & 30 deletions Sources/SwiftMath/MathRender/MTMathList.swift
Original file line number Diff line number Diff line change
Expand Up @@ -235,10 +235,10 @@ public class MTMathAtom: NSObject {
return MTAccent(self as? MTAccent)
case .space:
return MTMathSpace(self as? MTMathSpace)
case .color, .textcolor:
case .color:
return MTMathColor(self as? MTMathColor)
// case .textcolor:
// return MTMathTextColor(self as? MTMathTextColor)
case .textcolor:
return MTMathTextColor(self as? MTMathTextColor)
case .colorBox:
return MTMathColorbox(self as? MTMathColorbox)
case .table:
Expand Down Expand Up @@ -684,33 +684,32 @@ public class MTMathColor: MTMathAtom {
Note: None of the usual fields of the `MTMathAtom` apply even though this
class inherits from `MTMathAtom`. i.e. it is meaningless to have a value
in the nucleus, subscript or superscript fields. */
// FIXME: Removed due to crash
//public class MTMathTextColor: MTMathAtom {
// public var colorString:String=""
// public var innerList:MTMathList?
//
// init(_ color: MTMathTextColor?) {
// super.init(color)
// self.type = .textcolor
// self.colorString = color?.colorString ?? ""
// self.innerList = MTMathList(color?.innerList)
// }
//
// override init() {
// super.init()
// self.type = .textcolor
// }
//
// public override var string: String {
// "\\textcolor{\(self.colorString)}{\(self.innerList!.string)}"
// }
//
// override public var finalized: MTMathAtom {
// let newColor = super.finalized as! MTMathTextColor
// newColor.innerList = newColor.innerList?.finalized
// return newColor
// }
//}
public class MTMathTextColor: MTMathAtom {
public var colorString:String=""
public var innerList:MTMathList?

init(_ color: MTMathTextColor?) {
super.init(color)
self.type = .textcolor
self.colorString = color?.colorString ?? ""
self.innerList = MTMathList(color?.innerList)
}

override init() {
super.init()
self.type = .textcolor
}

public override var string: String {
"\\textcolor{\(self.colorString)}{\(self.innerList!.string)}"
}

override public var finalized: MTMathAtom {
let newColor = super.finalized as! MTMathTextColor
newColor.innerList = newColor.innerList?.finalized
return newColor
}
}

// MARK: - MTMathColorbox
/** An atom representing an colorbox element.
Expand Down
14 changes: 7 additions & 7 deletions Sources/SwiftMath/MathRender/MTMathListBuilder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -587,18 +587,18 @@ public struct MTMathListBuilder {
}
let table = self.buildTable(env: env, firstList:nil, isRow:false)
return table
} else if command == "color" || command == "textcolor" {
} else if command == "color" {
// A color command has 2 arguments
let mathColor = MTMathColor()
mathColor.colorString = self.readColor()!
mathColor.innerList = self.buildInternal(true)
return mathColor
// } else if command == "textcolor" {
// // A textcolor command has 2 arguments
// let mathColor = MTMathTextColor()
// mathColor.colorString = self.readColor()!
// mathColor.innerList = self.buildInternal(true)
// return mathColor
} else if command == "textcolor" {
// A textcolor command has 2 arguments
let mathColor = MTMathTextColor()
mathColor.colorString = self.readColor()!
mathColor.innerList = self.buildInternal(true)
return mathColor
} else if command == "colorbox" {
// A color command has 2 arguments
let mathColorbox = MTMathColorbox()
Expand Down
60 changes: 30 additions & 30 deletions Sources/SwiftMath/MathRender/MTTypesetter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -500,7 +500,7 @@ class MTTypesetter {
// so we skip to the next node.
continue

case .color, .textcolor:
case .color:
// stash the existing layout
if currentLine.length > 0 {
self.addDisplayLine()
Expand All @@ -512,35 +512,35 @@ class MTTypesetter {
currentPosition.x += display!.width
displayAtoms.append(display!)

// case .textcolor:
// // stash the existing layout
// if currentLine.length > 0 {
// self.addDisplayLine()
// }
// let colorAtom = atom as! MTMathTextColor
// let display = MTTypesetter.createLineForMathList(colorAtom.innerList, font: font, style: style)
// display!.localTextColor = MTColor(fromHexString: colorAtom.colorString)
//
// if prevNode != nil {
// let subDisplay: MTDisplay = display!.subDisplays[0]
// let subDisplayAtom = (subDisplay as? MTCTLineDisplay)!.atoms[0]
// let interElementSpace = self.getInterElementSpace(prevNode!.type, right:subDisplayAtom.type)
// if currentLine.length > 0 {
// if interElementSpace > 0 {
// // add a kerning of that space to the previous character
// currentLine.addAttribute(kCTKernAttributeName as NSAttributedString.Key,
// value:NSNumber(floatLiteral: interElementSpace),
// range:currentLine.mutableString.rangeOfComposedCharacterSequence(at: currentLine.length-1))
// }
// } else {
// // increase the space
// currentPosition.x += interElementSpace
// }
// }
//
// display!.position = currentPosition
// currentPosition.x += display!.width
// displayAtoms.append(display!)
case .textcolor:
// stash the existing layout
if currentLine.length > 0 {
self.addDisplayLine()
}
let colorAtom = atom as! MTMathTextColor
let display = MTTypesetter.createLineForMathList(colorAtom.innerList, font: font, style: style)
display!.localTextColor = MTColor(fromHexString: colorAtom.colorString)

if prevNode != nil {
let subDisplay: MTDisplay = display!.subDisplays[0]
let subDisplayAtom = (subDisplay as? MTCTLineDisplay)!.atoms[0]
let interElementSpace = self.getInterElementSpace(prevNode!.type, right:subDisplayAtom.type)
if currentLine.length > 0 {
if interElementSpace > 0 {
// add a kerning of that space to the previous character
currentLine.addAttribute(kCTKernAttributeName as NSAttributedString.Key,
value:NSNumber(floatLiteral: interElementSpace),
range:currentLine.mutableString.rangeOfComposedCharacterSequence(at: currentLine.length-1))
}
} else {
// increase the space
currentPosition.x += interElementSpace
}
}

display!.position = currentPosition
currentPosition.x += display!.width
displayAtoms.append(display!)

case .colorBox:
// stash the existing layout
Expand Down

0 comments on commit 9fecdcf

Please sign in to comment.