Skip to main content

se/themes/
dark_plus.rs

1pub(crate) struct DarkPlus;
2
3const DARK_BLUE: dialect::Rgb = dialect::rgb!(86, 156, 214);
4const DARK_GREEN: dialect::Rgb = dialect::rgb!(107, 153, 85);
5const DULL_GREEN_DARKER: dialect::Rgb = dialect::rgb!(181, 206, 168);
6const FADED: dialect::Rgb = dialect::rgb!(178, 178, 178);
7const GREEN: dialect::Rgb = dialect::rgb!(134, 198, 145);
8const DULL_GREEN: dialect::Rgb = dialect::rgb!(184, 215, 163);
9const LIGHT_BLUE: dialect::Rgb = dialect::rgb!(156, 220, 254);
10const ORANGE: dialect::Rgb = dialect::rgb!(206, 144, 120);
11const PURPLE: dialect::Rgb = dialect::rgb!(197, 134, 192);
12const RED: dialect::Rgb = dialect::rgb!(244, 71, 71);
13const TEAL: dialect::Rgb = dialect::rgb!(78, 201, 176);
14const YELLOW: dialect::Rgb = dialect::rgb!(220, 220, 170);
15
16impl dialect::Theme for DarkPlus {
17    fn default_style(&self) -> dialect::ResolvedStyle {
18        dialect::ResolvedStyle {
19            fg_color: dialect::rgb!(212, 212, 212),
20            bg_color: dialect::rgb!(30, 30, 30),
21            is_bold: false,
22            is_italic: false,
23            is_underline: false,
24        }
25    }
26
27    fn style(&self, group: dialect::HighlightGroup) -> dialect::Style {
28        match group {
29            dialect::HighlightGroup::CtrlFlowKeyword => dialect::Style {
30                fg_color: Some(PURPLE),
31                bg_color: None,
32                is_bold: false,
33                is_italic: false,
34                is_underline: false,
35            },
36
37            // Keywords and things that are often treated as such
38            dialect::HighlightGroup::OtherKeyword
39            | dialect::HighlightGroup::PrimitiveTy
40            | dialect::HighlightGroup::Boolean => dialect::Style {
41                fg_color: Some(DARK_BLUE),
42                bg_color: None,
43                is_bold: false,
44                is_italic: false,
45                is_underline: false,
46            },
47
48            // Call-able things
49            dialect::HighlightGroup::FunctionDef
50            | dialect::HighlightGroup::FunctionCall
51            | dialect::HighlightGroup::MacroDef
52            | dialect::HighlightGroup::MacroUse => dialect::Style {
53                fg_color: Some(YELLOW),
54                bg_color: None,
55                is_bold: false,
56                is_italic: false,
57                is_underline: false,
58            },
59
60            dialect::HighlightGroup::TyDef | dialect::HighlightGroup::TyUse => dialect::Style {
61                fg_color: Some(TEAL),
62                bg_color: None,
63                is_bold: false,
64                is_italic: false,
65                is_underline: false,
66            },
67
68            dialect::HighlightGroup::InterfaceDef | dialect::HighlightGroup::InterfaceUse => {
69                dialect::Style {
70                    fg_color: Some(DULL_GREEN),
71                    bg_color: None,
72                    is_bold: false,
73                    is_italic: false,
74                    is_underline: false,
75                }
76            }
77
78            dialect::HighlightGroup::VariableDef
79            | dialect::HighlightGroup::VariableUse
80            | dialect::HighlightGroup::MemberDef
81            | dialect::HighlightGroup::MemberUse
82            | dialect::HighlightGroup::ConstantDef
83            | dialect::HighlightGroup::ConstantUse
84            | dialect::HighlightGroup::FunctionParam => dialect::Style {
85                fg_color: Some(LIGHT_BLUE),
86                bg_color: None,
87                is_bold: false,
88                is_italic: false,
89                is_underline: false,
90            },
91
92            dialect::HighlightGroup::SpecialIdentDef | dialect::HighlightGroup::SpecialIdentUse => {
93                dialect::Style {
94                    // This colour is actually used for structs, but the distinction between
95                    // structs and other types is only possible through semantic highlighting -- it
96                    // is expected that all highlighters will either be simple lexers or parsers.
97                    //
98                    // Since ‘special identifiers’ are unique in the languages that they occur in
99                    // (e.g.  lifetimes in Rust, symbols in Ruby), it makes sense to give them a
100                    // special colour. This colour was left over, so I decided to use it.
101                    fg_color: Some(GREEN),
102                    bg_color: None,
103                    is_bold: false,
104                    is_italic: false,
105                    is_underline: false,
106                }
107            }
108
109            // Modules aren’t highlighted
110            dialect::HighlightGroup::ModuleDef | dialect::HighlightGroup::ModuleUse => {
111                dialect::Style {
112                    fg_color: None,
113                    bg_color: None,
114                    is_bold: false,
115                    is_italic: false,
116                    is_underline: false,
117                }
118            }
119
120            dialect::HighlightGroup::Number => dialect::Style {
121                fg_color: Some(DULL_GREEN_DARKER),
122                bg_color: None,
123                is_bold: false,
124                is_italic: false,
125                is_underline: false,
126            },
127
128            dialect::HighlightGroup::String
129            | dialect::HighlightGroup::StringDelimiter
130            | dialect::HighlightGroup::Character
131            | dialect::HighlightGroup::CharacterDelimiter => dialect::Style {
132                fg_color: Some(ORANGE),
133                bg_color: None,
134                is_bold: false,
135                is_italic: false,
136                is_underline: false,
137            },
138
139            dialect::HighlightGroup::PreProc => dialect::Style {
140                fg_color: Some(DARK_BLUE),
141                bg_color: None,
142                is_bold: false,
143                is_italic: false,
144                is_underline: false,
145            },
146
147            dialect::HighlightGroup::Attribute => dialect::Style {
148                fg_color: Some(FADED),
149                bg_color: None,
150                is_bold: false,
151                is_italic: false,
152                is_underline: false,
153            },
154
155            dialect::HighlightGroup::Comment | dialect::HighlightGroup::DocComment => {
156                dialect::Style {
157                    fg_color: Some(DARK_GREEN),
158                    bg_color: None,
159                    is_bold: false,
160                    is_italic: false,
161                    is_underline: false,
162                }
163            }
164
165            // Punctuation
166            dialect::HighlightGroup::MemberOper
167            | dialect::HighlightGroup::PointerOper
168            | dialect::HighlightGroup::AssignOper
169            | dialect::HighlightGroup::BinaryOper
170            | dialect::HighlightGroup::OtherOper
171            | dialect::HighlightGroup::Delimiter
172            | dialect::HighlightGroup::Separator
173            | dialect::HighlightGroup::Terminator => dialect::Style {
174                fg_color: Some(FADED),
175                bg_color: None,
176                is_bold: false,
177                is_italic: false,
178                is_underline: false,
179            },
180
181            dialect::HighlightGroup::Error => dialect::Style {
182                fg_color: Some(RED),
183                bg_color: None,
184                is_bold: false,
185                is_italic: false,
186                is_underline: true,
187            },
188        }
189    }
190}