import Cocoa
protocol ConfTextColorTheme {
- var defaultColor: NSColor { get }
- var colorMap: [UInt32: NSColor] { get }
+ static var defaultColor: NSColor { get }
+ static var colorMap: [UInt32: NSColor] { get }
}
struct ConfTextAquaColorTheme: ConfTextColorTheme {
- var defaultColor = NSColor(hex: "#000000")
- var colorMap: [UInt32: NSColor] = [
+ static let defaultColor = NSColor(hex: "#000000")
+ static let colorMap: [UInt32: NSColor] = [
HighlightSection.rawValue: NSColor(hex: "#326D74"), // Class name in Xcode
HighlightField.rawValue: NSColor(hex: "#9B2393"), // Keywords in Xcode
HighlightPublicKey.rawValue: NSColor(hex: "#643820"), // Preprocessor directives in Xcode
}
struct ConfTextDarkAquaColorTheme: ConfTextColorTheme {
- var defaultColor = NSColor(hex: "#FFFFFF") // Plain text in Xcode
- var colorMap: [UInt32: NSColor] = [
+ static let defaultColor = NSColor(hex: "#FFFFFF") // Plain text in Xcode
+ static let colorMap: [UInt32: NSColor] = [
HighlightSection.rawValue: NSColor(hex: "#91D462"), // Class name in Xcode
HighlightField.rawValue: NSColor(hex: "#FC5FA3"), // Keywords in Xcode
HighlightPublicKey.rawValue: NSColor(hex: "#FD8F3F"), // Preprocessor directives in Xcode
private let boldFont = NSFont.boldSystemFont(ofSize: fontSize)
private lazy var italicFont = NSFontManager.shared.convert(defaultFont, toHaveTrait: .italicFontMask)
- private var textColorTheme: ConfTextColorTheme?
+ private var textColorTheme: ConfTextColorTheme.Type?
private let backingStore: NSMutableAttributedString
private(set) var hasError = false
}
}
- func updateAttributes(for textColorTheme: ConfTextColorTheme) {
+ func updateAttributes(for textColorTheme: ConfTextColorTheme.Type) {
self.textColorTheme = textColorTheme
highlightSyntax()
}
}
func highlightSyntax() {
+ guard let textColorTheme = textColorTheme else { return }
hasError = false
privateKeyString = nil
let fullTextRange = NSRange(location: 0, length: (backingStore.string as NSString).length)
backingStore.beginEditing()
- if let textColorTheme = textColorTheme {
- let defaultAttributes: [NSAttributedString.Key: Any] = [
- .foregroundColor: textColorTheme.defaultColor,
- .font: defaultFont
- ]
- backingStore.setAttributes(defaultAttributes, range: fullTextRange)
- }
+ let defaultAttributes: [NSAttributedString.Key: Any] = [
+ .foregroundColor: textColorTheme.defaultColor,
+ .font: defaultFont
+ ]
+ backingStore.setAttributes(defaultAttributes, range: fullTextRange)
var spans = highlight_config(backingStore.string.cString(using: String.Encoding.utf8))!
while spans.pointee.type != HighlightEnd {
let range = NSRange(location: span.start, length: span.len)
backingStore.setAttributes(nonColorAttributes(for: span.type), range: range)
- if let textColorTheme = textColorTheme {
- let color = textColorTheme.colorMap[span.type.rawValue] ?? textColorTheme.defaultColor
- backingStore.addAttribute(.foregroundColor, value: color, range: range)
- }
+ let color = textColorTheme.colorMap[span.type.rawValue] ?? textColorTheme.defaultColor
+ backingStore.addAttribute(.foregroundColor, value: color, range: range)
if span.type == HighlightError {
hasError = true