Files
swiftui-math/Sources/SwiftUIMath/Internal/Model/Atoms/Fraction.swift
Guille Gonzalez e66eeb4564 Refactor model
2026-01-02 15:24:11 +01:00

72 lines
2.0 KiB
Swift

import Foundation
extension Math {
final class Fraction: Atom {
var hasRule: Bool
var leftDelimiter: String
var rightDelimiter: String
var numerator: AtomList?
var denominator: AtomList?
var isContinuedFraction: Bool = false
var alignment: String // "l", "r", "c" for left, right, center
override var description: String {
[
hasRule ? "\\frac" : "\\atop",
leftDelimiter.isEmpty ? nil : "[\(leftDelimiter)]",
rightDelimiter.isEmpty ? nil : "[\(rightDelimiter)]",
"{\(numerator?.description ?? "placeholder")}",
"{\(denominator?.description ?? "placeholder")}",
superscript.map { "^{\($0)}" },
`subscript`.map { "_{\($0)}" },
]
.compactMap(\.self)
.joined()
}
override var finalized: Math.Atom {
let finalized = super.finalized
if let fraction = finalized as? Fraction {
fraction.numerator = fraction.numerator?.finalized
fraction.denominator = fraction.denominator?.finalized
}
return finalized
}
init(_ fraction: Fraction) {
self.hasRule = fraction.hasRule
self.leftDelimiter = fraction.leftDelimiter
self.rightDelimiter = fraction.rightDelimiter
self.numerator = fraction.numerator.map { AtomList($0) }
self.denominator = fraction.denominator.map { AtomList($0) }
self.isContinuedFraction = fraction.isContinuedFraction
self.alignment = fraction.alignment
super.init(fraction)
}
init(
hasRule: Bool = true,
leftDelimiter: String = "",
rightDelimiter: String = "",
numerator: AtomList? = nil,
denominator: AtomList? = nil,
isContinuedFraction: Bool = false,
alignment: String = "c"
) {
self.hasRule = hasRule
self.leftDelimiter = leftDelimiter
self.rightDelimiter = rightDelimiter
self.numerator = numerator
self.denominator = denominator
self.isContinuedFraction = isContinuedFraction
self.alignment = alignment
super.init(type: .fraction)
}
}
}