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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
const BASE03: crate::Rgb = crate::rgb!(0, 43, 54);
const BASE01: crate::Rgb = crate::rgb!(88, 110, 117);
const BASE00: crate::Rgb = crate::rgb!(101, 123, 131);
const BASE0: crate::Rgb = crate::rgb!(131, 148, 150);
const BASE1: crate::Rgb = crate::rgb!(147, 161, 161);
const BASE3: crate::Rgb = crate::rgb!(253, 246, 227);
const YELLOW: crate::Rgb = crate::rgb!(181, 137, 0);
const ORANGE: crate::Rgb = crate::rgb!(203, 75, 22);
const RED: crate::Rgb = crate::rgb!(220, 50, 47);
const BLUE: crate::Rgb = crate::rgb!(38, 139, 210);
const CYAN: crate::Rgb = crate::rgb!(42, 161, 152);
const GREEN: crate::Rgb = crate::rgb!(133, 153, 0);
macro_rules! create_solarized_theme {
($theme_name: ident, $fg: expr, $bg: expr, $deemphasized: expr) => {
#[derive(Debug)]
pub struct $theme_name;
impl crate::Theme for $theme_name {
fn default_style(&self) -> crate::ResolvedStyle {
crate::ResolvedStyle {
fg_color: $fg,
bg_color: $bg,
is_bold: false,
is_italic: false,
is_underline: false,
}
}
fn style(&self, group: crate::HighlightGroup) -> crate::Style {
match group {
crate::HighlightGroup::CtrlFlowKeyword
| crate::HighlightGroup::OtherKeyword => crate::Style {
fg_color: Some(GREEN),
bg_color: None,
is_bold: false,
is_italic: false,
is_underline: false,
},
crate::HighlightGroup::FunctionDef
| crate::HighlightGroup::FunctionCall
| crate::HighlightGroup::VariableDef
| crate::HighlightGroup::VariableUse
| crate::HighlightGroup::MemberDef
| crate::HighlightGroup::MemberUse
| crate::HighlightGroup::SpecialIdentDef
| crate::HighlightGroup::SpecialIdentUse
| crate::HighlightGroup::FunctionParam
| crate::HighlightGroup::ModuleDef
| crate::HighlightGroup::ModuleUse => crate::Style {
fg_color: Some(BLUE),
bg_color: None,
is_bold: false,
is_italic: false,
is_underline: false,
},
crate::HighlightGroup::ConstantDef
| crate::HighlightGroup::ConstantUse
| crate::HighlightGroup::Number
| crate::HighlightGroup::String
| crate::HighlightGroup::StringDelimiter
| crate::HighlightGroup::Character
| crate::HighlightGroup::CharacterDelimiter
| crate::HighlightGroup::Boolean => crate::Style {
fg_color: Some(CYAN),
bg_color: None,
is_bold: false,
is_italic: false,
is_underline: false,
},
crate::HighlightGroup::TyDef
| crate::HighlightGroup::TyUse
| crate::HighlightGroup::InterfaceDef
| crate::HighlightGroup::InterfaceUse
| crate::HighlightGroup::PrimitiveTy => crate::Style {
fg_color: Some(YELLOW),
bg_color: None,
is_bold: false,
is_italic: false,
is_underline: false,
},
crate::HighlightGroup::PreProc
| crate::HighlightGroup::MacroDef
| crate::HighlightGroup::MacroUse => crate::Style {
fg_color: Some(ORANGE),
bg_color: None,
is_bold: false,
is_italic: false,
is_underline: false,
},
crate::HighlightGroup::MemberOper
| crate::HighlightGroup::PointerOper
| crate::HighlightGroup::AssignOper
| crate::HighlightGroup::BinaryOper
| crate::HighlightGroup::OtherOper
| crate::HighlightGroup::Delimiter
| crate::HighlightGroup::Separator
| crate::HighlightGroup::Terminator => crate::Style {
fg_color: None,
bg_color: None,
is_bold: false,
is_italic: false,
is_underline: false,
},
crate::HighlightGroup::Comment | crate::HighlightGroup::DocComment => {
crate::Style {
fg_color: Some($deemphasized),
bg_color: None,
is_bold: false,
is_italic: true,
is_underline: false,
}
}
crate::HighlightGroup::Attribute => crate::Style {
fg_color: Some(GREEN),
bg_color: None,
is_bold: false,
is_italic: false,
is_underline: false,
},
crate::HighlightGroup::Error => crate::Style {
fg_color: Some(RED),
bg_color: None,
is_bold: false,
is_italic: false,
is_underline: true,
},
}
}
}
};
}
create_solarized_theme!(SolarizedLight, BASE00, BASE3, BASE1);
create_solarized_theme!(SolarizedDark, BASE0, BASE03, BASE01);