1#[derive(Debug)]
4pub struct Dracula;
5
6const FADED: crate::Rgb = crate::rgb!(98, 114, 164);
7const RED: crate::Rgb = crate::rgb!(255, 85, 85);
8const ORANGE: crate::Rgb = crate::rgb!(255, 184, 108);
9const YELLOW: crate::Rgb = crate::rgb!(241, 250, 140);
10const GREEN: crate::Rgb = crate::rgb!(80, 250, 123);
11const PURPLE: crate::Rgb = crate::rgb!(189, 147, 249);
12const CYAN: crate::Rgb = crate::rgb!(139, 233, 253);
13const PINK: crate::Rgb = crate::rgb!(255, 121, 198);
14
15impl crate::Theme for Dracula {
16 fn default_style(&self) -> crate::ResolvedStyle {
17 crate::ResolvedStyle {
18 fg_color: crate::rgb!(248, 248, 242),
19 bg_color: crate::rgb!(40, 42, 54),
20 is_bold: false,
21 is_italic: false,
22 is_underline: false,
23 }
24 }
25
26 fn style(&self, group: crate::HighlightGroup) -> crate::Style {
27 match group {
28 crate::HighlightGroup::CtrlFlowKeyword | crate::HighlightGroup::OtherKeyword => {
30 crate::Style {
31 fg_color: Some(PINK),
32 bg_color: None,
33 is_bold: false,
34 is_italic: false,
35 is_underline: false,
36 }
37 }
38
39 crate::HighlightGroup::FunctionDef | crate::HighlightGroup::FunctionCall => {
41 crate::Style {
42 fg_color: Some(GREEN),
43 bg_color: None,
44 is_bold: false,
45 is_italic: false,
46 is_underline: false,
47 }
48 }
49
50 crate::HighlightGroup::TyDef
52 | crate::HighlightGroup::TyUse
53 | crate::HighlightGroup::PrimitiveTy => crate::Style {
54 fg_color: Some(CYAN),
55 bg_color: None,
56 is_bold: false,
57 is_italic: false,
58 is_underline: false,
59 },
60
61 crate::HighlightGroup::InterfaceDef | crate::HighlightGroup::InterfaceUse => {
63 crate::Style {
64 fg_color: Some(CYAN),
65 bg_color: None,
66 is_bold: false,
67 is_italic: true,
68 is_underline: false,
69 }
70 }
71
72 crate::HighlightGroup::VariableDef
74 | crate::HighlightGroup::VariableUse
75 | crate::HighlightGroup::MemberDef
76 | crate::HighlightGroup::MemberUse => crate::Style {
77 fg_color: None,
78 bg_color: None,
79 is_bold: false,
80 is_italic: false,
81 is_underline: false,
82 },
83
84 crate::HighlightGroup::FunctionParam => crate::Style {
86 fg_color: Some(ORANGE),
87 bg_color: None,
88 is_bold: false,
89 is_italic: true,
90 is_underline: false,
91 },
92
93 crate::HighlightGroup::ConstantDef
95 | crate::HighlightGroup::ConstantUse
96 | crate::HighlightGroup::Number
97 | crate::HighlightGroup::Boolean
98 | crate::HighlightGroup::Character
99 | crate::HighlightGroup::CharacterDelimiter => crate::Style {
100 fg_color: Some(PURPLE),
101 bg_color: None,
102 is_bold: false,
103 is_italic: false,
104 is_underline: false,
105 },
106
107 crate::HighlightGroup::ModuleDef | crate::HighlightGroup::ModuleUse => crate::Style {
109 fg_color: None,
110 bg_color: None,
111 is_bold: false,
112 is_italic: false,
113 is_underline: false,
114 },
115
116 crate::HighlightGroup::MacroDef
118 | crate::HighlightGroup::MacroUse
119 | crate::HighlightGroup::PreProc => crate::Style {
120 fg_color: Some(CYAN),
121 bg_color: None,
122 is_bold: false,
123 is_italic: false,
124 is_underline: false,
125 },
126
127 crate::HighlightGroup::Attribute => crate::Style {
129 fg_color: Some(GREEN),
130 bg_color: None,
131 is_bold: false,
132 is_italic: true,
133 is_underline: false,
134 },
135
136 crate::HighlightGroup::String | crate::HighlightGroup::StringDelimiter => {
138 crate::Style {
139 fg_color: Some(YELLOW),
140 bg_color: None,
141 is_bold: false,
142 is_italic: false,
143 is_underline: false,
144 }
145 }
146
147 crate::HighlightGroup::SpecialIdentDef | crate::HighlightGroup::SpecialIdentUse => {
149 crate::Style {
150 fg_color: Some(GREEN),
151 bg_color: None,
152 is_bold: false,
153 is_italic: false,
154 is_underline: false,
155 }
156 }
157
158 crate::HighlightGroup::Comment | crate::HighlightGroup::DocComment => crate::Style {
160 fg_color: Some(FADED),
161 bg_color: None,
162 is_bold: false,
163 is_italic: false,
164 is_underline: false,
165 },
166
167 crate::HighlightGroup::PointerOper
169 | crate::HighlightGroup::AssignOper
170 | crate::HighlightGroup::BinaryOper
171 | crate::HighlightGroup::OtherOper
172 | crate::HighlightGroup::Separator => crate::Style {
173 fg_color: Some(PINK),
174 bg_color: None,
175 is_bold: false,
176 is_italic: false,
177 is_underline: false,
178 },
179
180 crate::HighlightGroup::MemberOper
182 | crate::HighlightGroup::Delimiter
183 | crate::HighlightGroup::Terminator => crate::Style {
184 fg_color: None,
185 bg_color: None,
186 is_bold: false,
187 is_italic: false,
188 is_underline: false,
189 },
190
191 crate::HighlightGroup::Error => crate::Style {
193 fg_color: Some(RED),
194 bg_color: None,
195 is_bold: false,
196 is_italic: false,
197 is_underline: false,
198 },
199 }
200 }
201}