You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

123 lines
3.1 KiB

//
// TextDocument.swift
// lottie-swift
//
// Created by Brandon Withrow on 1/9/19.
//
import Foundation
// MARK: - TextJustification
enum TextJustification: Int, Codable {
case left
case right
case center
}
// MARK: - TextDocument
final class TextDocument: Codable, DictionaryInitializable, AnyInitializable {
// MARK: Lifecycle
init(dictionary: [String: Any]) throws {
text = try dictionary.value(for: CodingKeys.text)
fontSize = try dictionary.value(for: CodingKeys.fontSize)
fontFamily = try dictionary.value(for: CodingKeys.fontFamily)
let justificationValue: Int = try dictionary.value(for: CodingKeys.justification)
guard let justification = TextJustification(rawValue: justificationValue) else {
throw InitializableError.invalidInput
}
self.justification = justification
tracking = try dictionary.value(for: CodingKeys.tracking)
lineHeight = try dictionary.value(for: CodingKeys.lineHeight)
baseline = try dictionary.value(for: CodingKeys.baseline)
if let fillColorRawValue = dictionary[CodingKeys.fillColorData.rawValue] {
fillColorData = try? Color(value: fillColorRawValue)
} else {
fillColorData = nil
}
if let strokeColorRawValue = dictionary[CodingKeys.strokeColorData.rawValue] {
strokeColorData = try? Color(value: strokeColorRawValue)
} else {
strokeColorData = nil
}
strokeWidth = try? dictionary.value(for: CodingKeys.strokeWidth)
strokeOverFill = try? dictionary.value(for: CodingKeys.strokeOverFill)
if let textFramePositionRawValue = dictionary[CodingKeys.textFramePosition.rawValue] {
textFramePosition = try? Vector3D(value: textFramePositionRawValue)
} else {
textFramePosition = nil
}
if let textFrameSizeRawValue = dictionary[CodingKeys.textFrameSize.rawValue] {
textFrameSize = try? Vector3D(value: textFrameSizeRawValue)
} else {
textFrameSize = nil
}
}
convenience init(value: Any) throws {
guard let dictionary = value as? [String: Any] else {
throw InitializableError.invalidInput
}
try self.init(dictionary: dictionary)
}
// MARK: Internal
/// The Text
let text: String
/// The Font size
let fontSize: Double
/// The Font Family
let fontFamily: String
/// Justification
let justification: TextJustification
/// Tracking
let tracking: Int
/// Line Height
let lineHeight: Double
/// Baseline
let baseline: Double?
/// Fill Color data
let fillColorData: Color?
/// Scroke Color data
let strokeColorData: Color?
/// Stroke Width
let strokeWidth: Double?
/// Stroke Over Fill
let strokeOverFill: Bool?
let textFramePosition: Vector3D?
let textFrameSize: Vector3D?
// MARK: Private
private enum CodingKeys: String, CodingKey {
case text = "t"
case fontSize = "s"
case fontFamily = "f"
case justification = "j"
case tracking = "tr"
case lineHeight = "lh"
case baseline = "ls"
case fillColorData = "fc"
case strokeColorData = "sc"
case strokeWidth = "sw"
case strokeOverFill = "of"
case textFramePosition = "ps"
case textFrameSize = "sz"
}
}