Files
i7t5--edmund/Sources/EdmundCore/Parsing/CodeSyntaxPalette.swift
T
wehub-resource-sync 5b99bf6bca
CI / test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:34:54 +08:00

48 lines
1.7 KiB
Swift

import Foundation
// MARK: - Code Syntax Palette
//
// The single source of truth for fenced-code-block colors: the Tomorrow palette
// (light) and One Dark (dark), as plain hex strings with no AppKit dependency.
// Both consumers derive from these:
// - the editor (`EditorTextView+CodeHighlighting`) builds `NSColor`s for the
// TextKit attribute run,
// - Read mode / PDF export (`HTMLTheme`) emits CSS `color` rules,
// so Edit mode and Read mode color identical tokens identically.
enum CodeSyntaxPalette {
/// The hex color for a token kind (`nil` = plain, un-tokenized code text) in
/// the given appearance. Only foregrounds are themed; the block keeps its
/// background, so each palette is paired with the appearance it's legible on.
static func hex(_ type: CodeHighlighter.TokenType?, dark: Bool) -> String {
dark ? oneDark(type) : tomorrow(type)
}
/// Tomorrow (light).
private static func tomorrow(_ type: CodeHighlighter.TokenType?) -> String {
switch type {
case nil: return "#4d4d4c"
case .keyword: return "#8959a8"
case .type: return "#c18401"
case .string: return "#718c00"
case .number: return "#f5871f"
case .comment: return "#8e908c"
case .function: return "#4271ae"
}
}
/// One Dark.
private static func oneDark(_ type: CodeHighlighter.TokenType?) -> String {
switch type {
case nil: return "#abb2bf"
case .keyword: return "#c678dd"
case .type: return "#e5c07b"
case .string: return "#98c379"
case .number: return "#d19a66"
case .comment: return "#5c6370"
case .function: return "#61afef"
}
}
}