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
|
use rowan::ast::AstNode;
use syntax::latex;
use crate::{
util::{find_curly_group_word, CompletionBuilder},
CompletionItem, CompletionItemData, CompletionParams,
};
pub fn complete_colors<'a>(
params: &'a CompletionParams<'a>,
builder: &mut CompletionBuilder<'a>,
) -> Option<()> {
let (cursor, group) = find_curly_group_word(params)?;
latex::ColorReference::cast(group.syntax().parent()?)?;
for name in COLORS {
if let Some(score) = builder.matcher.score(&name, &cursor.text) {
let data = CompletionItemData::Color(name);
builder
.items
.push(CompletionItem::new_simple(score, cursor.range, data));
}
}
Some(())
}
const COLORS: &[&str] = &[
"black",
"blue",
"brown",
"cyan",
"darkgray",
"gray",
"green",
"lightgray",
"lime",
"magenta",
"olive",
"orange",
"pink",
"purple",
"red",
"teal",
"violet",
"white",
"yellow",
"Apricot",
"Bittersweet",
"Blue",
"BlueViolet",
"Brown",
"CadetBlue",
"Cerulean",
"Cyan",
"DarkOrchid",
"ForestGreen",
"Goldenrod",
"Green",
"JungleGreen",
"LimeGreen",
"Mahogany",
"Melon",
"Mulberry",
"OliveGreen",
"OrangeRed",
"Peach",
"PineGreen",
"ProcessBlue",
"RawSienna",
"RedOrange",
"Rhodamine",
"RoyalPurple",
"Salmon",
"Sepia",
"SpringGreen",
"TealBlue",
"Turquoise",
"VioletRed",
"WildStrawberry",
"YellowGreen",
"Aquamarine",
"Black",
"BlueGreen",
"BrickRed",
"BurntOrange",
"CarnationPink",
"CornflowerBlue",
"Dandelion",
"Emerald",
"Fuchsia",
"Gray",
"GreenYellow",
"Lavender",
"Magenta",
"Maroon",
"MidnightBlue",
"NavyBlue",
"Orange",
"Orchid",
"Periwinkle",
"Plum",
"Purple",
"Red",
"RedViolet",
"RoyalBlue",
"RubineRed",
"SeaGreen",
"SkyBlue",
"Tan",
"Thistle",
"Violet",
"White",
"Yellow",
"YellowOrange",
];
|