forked from github/CopilotForXcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHighlightrThemeManager.swift
More file actions
89 lines (75 loc) · 5.13 KB
/
HighlightrThemeManager.swift
File metadata and controls
89 lines (75 loc) · 5.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import Foundation
import Highlightr
import Preferences
public class HighlightrThemeManager: ThemeManager {
let defaultManager: ThemeManager
weak var controller: XcodeThemeController?
public init(defaultManager: ThemeManager, controller: XcodeThemeController) {
self.defaultManager = defaultManager
self.controller = controller
}
public func theme(for name: String) -> Theme? {
let syncSuggestionTheme = UserDefaults.shared.value(for: \.syncSuggestionHighlightTheme)
let syncPromptToCodeTheme = UserDefaults.shared.value(for: \.syncPromptToCodeHighlightTheme)
let syncChatTheme = UserDefaults.shared.value(for: \.syncChatCodeHighlightTheme)
lazy var defaultLight = Theme(themeString: defaultLightTheme)
lazy var defaultDark = Theme(themeString: defaultDarkTheme)
switch name {
case "suggestion-light":
guard syncSuggestionTheme, let theme = theme(lightMode: true) else {
return defaultLight
}
return theme
case "suggestion-dark":
guard syncSuggestionTheme, let theme = theme(lightMode: false) else {
return defaultDark
}
return theme
case "promptToCode-light":
guard syncPromptToCodeTheme, let theme = theme(lightMode: true) else {
return defaultLight
}
return theme
case "promptToCode-dark":
guard syncPromptToCodeTheme, let theme = theme(lightMode: false) else {
return defaultDark
}
return theme
case "chat-light":
guard syncChatTheme, let theme = theme(lightMode: true) else {
return defaultLight
}
return theme
case "chat-dark":
guard syncChatTheme, let theme = theme(lightMode: false) else {
return defaultDark
}
return theme
case "light":
return defaultLight
case "dark":
return defaultDark
default:
return defaultLight
}
}
func theme(lightMode: Bool) -> Theme? {
guard let controller else { return nil }
guard let directories = controller.createSupportDirectoriesIfNeeded() else { return nil }
let themeURL: URL = if lightMode {
directories.themeDirectory.appendingPathComponent("highlightjs-light")
} else {
directories.themeDirectory.appendingPathComponent("highlightjs-dark")
}
if let themeString = try? String(contentsOf: themeURL) {
return Theme(themeString: themeString)
}
controller.syncXcodeThemeIfNeeded()
if let themeString = try? String(contentsOf: themeURL) {
return Theme(themeString: themeString)
}
return nil
}
}
let defaultLightTheme = ".hljs{display:block;overflow-x:auto;padding:0.5em;background:#FFFFFFFF;color:#000000D8}.xml .hljs-meta{color:#495460FF}.hljs-comment,.hljs-quote{color:#5D6B79FF}.hljs-tag,.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-name{color:#9A2393FF}.hljs-attribute{color:#805E03FF}.hljs-variable,.hljs-template-variable{color:#6B36A9FF}.hljs-code,.hljs-string,.hljs-meta-string{color:#C31A15FF}.hljs-regexp{color:#000000D8}.hljs-link{color:#0E0EFFFF}.hljs-title{color:#000000FF}.hljs-symbol,.hljs-bullet{color:#805E03FF}.hljs-number{color:#1C00CFFF}.hljs-section{color:#495460FF}.hljs-meta{color:#9A2393FF}.hljs-type,.hljs-built_in,.hljs-builtin-name{color:#3900A0FF}.hljs-class .hljs-title,.hljs-title .class_{color:#0B4F79FF}.hljs-function .hljs-title,.hljs-title .function_{color:#0E67A0FF}.hljs-params{color:#0E67A0FF}.hljs-attr{color:#805E03FF}.hljs-subst{color:#000000D8}.hljs-formula{background-color:#A3CCFEFF;font-style:italic}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-selector-id,.hljs-selector-class{color:#000000D8}.hljs-doctag,.hljs-strong{font-weight:bold}.hljs-emphasis{font-style:italic}"
let defaultDarkTheme = ".hljs{display:block;overflow-x:auto;padding:0.5em;background:#1F1F23FF;color:#FFFFFFD8}.xml .hljs-meta{color:#91A1B1FF}.hljs-comment,.hljs-quote{color:#6B7985FF}.hljs-tag,.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-name{color:#FC5FA2FF}.hljs-attribute{color:#BF8554FF}.hljs-variable,.hljs-template-variable{color:#A166E5FF}.hljs-code,.hljs-string,.hljs-meta-string{color:#FC695DFF}.hljs-regexp{color:#FFFFFFD8}.hljs-link{color:#5482FEFF}.hljs-title{color:#FFFFFFFF}.hljs-symbol,.hljs-bullet{color:#BF8554FF}.hljs-number{color:#CFBF69FF}.hljs-section{color:#91A1B1FF}.hljs-meta{color:#FC5FA2FF}.hljs-type,.hljs-built_in,.hljs-builtin-name{color:#D0A7FEFF}.hljs-class .hljs-title,.hljs-title .class_{color:#5CD7FEFF}.hljs-function .hljs-title,.hljs-title .function_{color:#41A1BFFF}.hljs-params{color:#41A1BFFF}.hljs-attr{color:#BF8554FF}.hljs-subst{color:#FFFFFFD8}.hljs-formula{background-color:#505A6FFF;font-style:italic}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-selector-id,.hljs-selector-class{color:#FFFFFFD8}.hljs-doctag,.hljs-strong{font-weight:bold}.hljs-emphasis{font-style:italic}"