// Copyright (C) 2024 Rubén Beltrán del Río // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see https://map.tranquil.systems. import AppKit extension NSColor { struct Theme { struct Syntax { static let vertex = NSColor(named: "Vertex") ?? .textColor static let number = NSColor(named: "Number") ?? .textColor static let option = NSColor(named: "Option") ?? .textColor static let symbol = NSColor(named: "Symbol") ?? .textColor static let text = NSColor(named: "Foreground") ?? .textColor static let punctuation = NSColor(named: "Foreground") ?? .textColor static let match = (NSColor(named: "Light Neutral Gray") ?? .textColor).withAlphaComponent( 0.3) static let highlightMatch = (NSColor(named: "Naples Yellow") ?? .textColor) .withAlphaComponent( 0.3) static let error = (NSColor(named: "Jasper Red") ?? .textColor) static func colorForSyntax(_ captureName: String) -> NSColor { switch captureName { case ("variable.component_label"): return .Theme.Syntax.vertex case ("number.real_number"): return .Theme.Syntax.number case ("punctuation.position"): return .Theme.Syntax.punctuation case ("punctuation.shape"): return .Theme.Syntax.punctuation case ("punctuation.dependency_type"): return .Theme.Syntax.punctuation case ("parameter.optional"): return .Theme.Syntax.option case ("operator.sign"): return .Theme.Syntax.option case ("keyword.evolution"): return .Theme.Syntax.symbol case ("keyword.inertia"): return .Theme.Syntax.symbol case ("keyword.stage"): return .Theme.Syntax.symbol case ("keyword.stage_number"): return .Theme.Syntax.symbol case ("keyword.note"): return .Theme.Syntax.symbol case ("keyword.group"): return .Theme.Syntax.symbol default: return .Theme.Syntax.text } } } struct UI { static let background = NSColor(named: "Background") ?? .windowBackgroundColor } } }