Skip to content

Commit 536bf76

Browse files
committed
Define language colors in macro
1 parent e76b8ec commit 536bf76

File tree

1 file changed

+65
-129
lines changed

1 file changed

+65
-129
lines changed

Diff for: src/language.rs

+65-129
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use {
77
};
88

99
macro_rules! define_languages {
10-
($( { $name:ident, $ascii:literal, $display:literal $(, $serialize:literal )? } ),* ,) => {
10+
($( { $name:ident, $ascii:literal, $display:literal, $colors:expr $(, $serialize:literal )? } ),* ,) => {
1111

1212
#[strum(serialize_all = "lowercase")]
1313
#[derive(PartialEq, Eq, Hash, Clone, EnumString, EnumIter)]
@@ -44,142 +44,78 @@ macro_rules! define_languages {
4444
Language::Unknown => include_str!("../resources/unknown.ascii"),
4545
}
4646
}
47+
48+
pub fn get_colors(&self) -> Vec<Color> {
49+
match *self {
50+
$(
51+
Language::$name => $colors,
52+
)*
53+
Language::Unknown => vec![Color::White],
54+
}
55+
}
4756
}
4857
};
4958
}
5059

5160
define_languages!{
52-
{ Assembly, "assembly.ascii", "Assembly" },
53-
{ C, "c.ascii", "C" },
54-
{ Clojure, "clojure.ascii", "Clojure" },
55-
{ CMake, "cmake.ascii", "CMake" },
56-
{ CoffeeScript, "coffeescript.ascii", "CoffeeScript" },
57-
{ Cpp, "cpp.ascii", "C++", "c++" },
58-
{ CSharp, "csharp.ascii", "C#", "c#" },
59-
{ Css, "css.ascii", "CSS" },
60-
{ D, "d.ascii", "D" },
61-
{ Dart, "dart.ascii", "Dart" },
62-
{ Dockerfile, "dockerfile.ascii", "Dockerfile" },
63-
{ Elisp, "emacslisp.ascii", "EmacsLisp", "emacslisp" },
64-
{ Elixir, "elixir.ascii", "Elixir" },
65-
{ Elm, "elm.ascii", "Elm" },
66-
{ Erlang, "erlang.ascii", "Erlang" },
67-
{ Fish, "fish.ascii", "Fish" },
68-
{ Forth, "forth.ascii", "Forth" },
69-
{ FortranModern, "f90.ascii", "Fortran", "fortran" },
70-
{ FSharp, "fsharp.ascii", "FSharp" },
71-
{ Go, "go.ascii", "Go" },
72-
{ Groovy, "groovy.ascii", "Groovy" },
73-
{ Haskell, "haskell.ascii", "Haskell" },
74-
{ Html, "html.ascii", "HTML" },
75-
{ Idris, "idris.ascii", "Idris" },
76-
{ Java, "java.ascii", "Java" },
77-
{ JavaScript, "javascript.ascii", "JavaScript" },
78-
{ Julia, "julia.ascii", "Julia" },
79-
{ Jupyter, "jupyter.ascii", "Jupyter-Notebooks", "jupyter-notebooks" },
80-
{ Kotlin, "kotlin.ascii", "Kotlin" },
81-
{ Lisp, "lisp.ascii", "Lisp" },
82-
{ Lua, "lua.ascii", "Lua" },
83-
{ Markdown, "markdown.ascii", "Markdown" },
84-
{ Nim, "nim.ascii", "Nim" },
85-
{ Nix, "nix.ascii", "Nix" },
86-
{ ObjectiveC, "objectivec.ascii", "Objective-C", "objective-c" },
87-
{ OCaml, "ocaml.ascii", "OCaml" },
88-
{ Org, "org.ascii", "Org" },
89-
{ Perl, "perl.ascii", "Perl" },
90-
{ Php, "php.ascii", "Php" },
91-
{ Prolog, "prolog.ascii", "Prolog" },
92-
{ PureScript, "purescript.ascii", "PureScript" },
93-
{ Python, "python.ascii", "Python" },
94-
{ R, "r.ascii", "R" },
95-
{ Racket, "racket.ascii", "Racket" },
96-
{ Ruby, "ruby.ascii", "Ruby" },
97-
{ Rust, "rust.ascii", "Rust" },
98-
{ Scala, "scala.ascii", "Scala" },
99-
{ Sh, "shell.ascii", "Shell", "shell" },
100-
{ Swift, "swift.ascii", "Swift" },
101-
{ Tcl, "tcl.ascii", "Tcl" },
102-
{ Tex, "tex.ascii", "Tex" },
103-
{ TypeScript, "typescript.ascii", "TypeScript" },
104-
{ Vue, "vue.ascii", "Vue" },
105-
{ Xml, "xml.ascii", "XML" },
106-
{ Zig, "zig.ascii", "Zig" },
61+
{ Assembly, "assembly.ascii", "Assembly", vec![Color::Cyan] },
62+
{ C, "c.ascii", "C", vec![Color::Cyan, Color::Blue] },
63+
{ Clojure, "clojure.ascii", "Clojure", vec![Color::Cyan, Color::Green] },
64+
{ CMake, "cmake.ascii", "CMake", vec![Color::Blue, Color::Green, Color::Red, Color::Black] },
65+
{ CoffeeScript, "coffeescript.ascii", "CoffeeScript", vec![Color::Red] },
66+
{ Cpp, "cpp.ascii", "C++", vec![Color::Cyan, Color::Blue], "c++" },
67+
{ CSharp, "csharp.ascii", "C#", vec![Color::Blue, Color::Magenta], "c#" },
68+
{ Css, "css.ascii", "CSS", vec![Color::Blue, Color::White] },
69+
{ D, "d.ascii", "D", vec![Color::Red] },
70+
{ Dart, "dart.ascii", "Dart", vec![Color::Cyan, Color::Blue] },
71+
{ Dockerfile, "dockerfile.ascii", "Dockerfile", vec![Color::Cyan, Color::White, Color::Cyan] },
72+
{ Elisp, "emacslisp.ascii", "EmacsLisp", vec![Color::Magenta, Color::White], "emacslisp" },
73+
{ Elixir, "elixir.ascii", "Elixir", vec![Color::Magenta] },
74+
{ Elm, "elm.ascii", "Elm", vec![Color::Black, Color::Green, Color::Yellow, Color::Cyan] },
75+
{ Erlang, "erlang.ascii", "Erlang", vec![Color::Red] },
76+
{ Fish, "fish.ascii", "Fish", vec![Color::Red, Color::Yellow] },
77+
{ Forth, "forth.ascii", "Forth", vec![Color::Red] },
78+
{ FortranModern, "f90.ascii", "Fortran", vec![Color::White, Color::Green, Color::Cyan, Color::Yellow, Color::Red], "fortran" },
79+
{ FSharp, "fsharp.ascii", "FSharp", vec![Color::Cyan, Color::Cyan] },
80+
{ Go, "go.ascii", "Go", vec![Color::White] },
81+
{ Groovy, "groovy.ascii", "Groovy", vec![Color::Cyan, Color::White] },
82+
{ Haskell, "haskell.ascii", "Haskell", vec![Color::Cyan, Color::Magenta, Color::Blue] },
83+
{ Html, "html.ascii", "HTML", vec![Color::Red, Color::White] },
84+
{ Idris, "idris.ascii", "Idris", vec![Color::Red] },
85+
{ Java, "java.ascii", "Java", vec![Color::Cyan, Color::Red] },
86+
{ JavaScript, "javascript.ascii", "JavaScript", vec![Color::Yellow] },
87+
{ Julia, "julia.ascii", "Julia", vec![Color::White, Color::Blue, Color::Green, Color::Red, Color::Magenta] },
88+
{ Jupyter, "jupyter.ascii", "Jupyter-Notebooks", vec![Color::White, Color::Yellow, Color::White], "jupyter-notebooks" },
89+
{ Kotlin, "kotlin.ascii", "Kotlin", vec![Color::Blue, Color::Yellow, Color::Magenta] },
90+
{ Lisp, "lisp.ascii", "Lisp", vec![Color::Yellow] },
91+
{ Lua, "lua.ascii", "Lua", vec![Color::Blue] },
92+
{ Markdown, "markdown.ascii", "Markdown", vec![Color::White, Color::Red] },
93+
{ Nim, "nim.ascii", "Nim", vec![Color::Yellow, Color::White] },
94+
{ Nix, "nix.ascii", "Nix", vec![Color::Cyan, Color::Blue] },
95+
{ ObjectiveC, "objectivec.ascii", "Objective-C", vec![Color::Cyan, Color::Blue], "objective-c" },
96+
{ OCaml, "ocaml.ascii", "OCaml", vec![Color::Yellow] },
97+
{ Org, "org.ascii", "Org", vec![Color::Green, Color::Red, Color::White] },
98+
{ Perl, "perl.ascii", "Perl", vec![Color::Cyan] },
99+
{ Php, "php.ascii", "Php", vec![Color::Magenta, Color::Black] },
100+
{ Prolog, "prolog.ascii", "Prolog", vec![Color::Blue, Color::Red] },
101+
{ PureScript, "purescript.ascii", "PureScript", vec![Color::White] },
102+
{ Python, "python.ascii", "Python", vec![Color::Blue, Color::Yellow] },
103+
{ R, "r.ascii", "R", vec![Color::White, Color::Blue] },
104+
{ Racket, "racket.ascii", "Racket", vec![Color::Red, Color::White, Color::Blue] },
105+
{ Ruby, "ruby.ascii", "Ruby", vec![Color::Magenta] },
106+
{ Rust, "rust.ascii", "Rust", vec![Color::White, Color::Red] },
107+
{ Scala, "scala.ascii", "Scala", vec![Color::Blue] },
108+
{ Sh, "shell.ascii", "Shell", vec![Color::Green], "shell" },
109+
{ Swift, "swift.ascii", "Swift", vec![Color::Red] },
110+
{ Tcl, "tcl.ascii", "Tcl", vec![Color::Blue, Color::White, Color::Cyan] },
111+
{ Tex, "tex.ascii", "Tex", vec![Color::White, Color::Black] },
112+
{ TypeScript, "typescript.ascii", "TypeScript", vec![Color::Cyan] },
113+
{ Vue, "vue.ascii", "Vue", vec![Color::Green, Color::Blue] },
114+
{ Xml, "xml.ascii", "XML", vec![Color::Yellow, Color::White, Color::Green] },
115+
{ Zig, "zig.ascii", "Zig", vec![Color::Yellow] },
107116
}
108117

109118
impl Language {
110-
pub fn get_colors(&self) -> Vec<Color> {
111-
match *self {
112-
Language::Assembly => vec![Color::Cyan],
113-
Language::C => vec![Color::Cyan, Color::Blue],
114-
Language::Clojure => vec![Color::Cyan, Color::Green],
115-
Language::CMake => vec![Color::Blue, Color::Green, Color::Red, Color::Black],
116-
Language::CoffeeScript => vec![Color::Red],
117-
Language::Cpp => vec![Color::Cyan, Color::Blue],
118-
Language::CSharp => vec![Color::Blue, Color::Magenta],
119-
Language::Css => vec![Color::Blue, Color::White],
120-
Language::D => vec![Color::Red],
121-
Language::Dart => vec![Color::Cyan, Color::Blue],
122-
Language::Dockerfile => vec![Color::Cyan, Color::White, Color::Cyan],
123-
Language::Elisp => vec![Color::Magenta, Color::White],
124-
Language::Elixir => vec![Color::Magenta],
125-
Language::Elm => vec![Color::Black, Color::Green, Color::Yellow, Color::Cyan],
126-
Language::Erlang => vec![Color::Red],
127-
Language::Fish => vec![Color::Red, Color::Yellow],
128-
Language::Forth => vec![Color::Red],
129-
Language::FortranModern => vec![
130-
Color::White,
131-
Color::Green,
132-
Color::Cyan,
133-
Color::Yellow,
134-
Color::Red,
135-
],
136-
Language::FSharp => vec![Color::Cyan, Color::Cyan],
137-
Language::Go => vec![Color::White],
138-
Language::Groovy => vec![Color::Cyan, Color::White],
139-
Language::Haskell => vec![Color::Cyan, Color::Magenta, Color::Blue],
140-
Language::Html => vec![Color::Red, Color::White],
141-
Language::Idris => vec![Color::Red],
142-
Language::Java => vec![Color::Cyan, Color::Red],
143-
Language::JavaScript => vec![Color::Yellow],
144-
Language::Julia => vec![
145-
Color::White,
146-
Color::Blue,
147-
Color::Green,
148-
Color::Red,
149-
Color::Magenta,
150-
],
151-
Language::Jupyter => vec![Color::White, Color::Yellow, Color::White],
152-
Language::Kotlin => vec![Color::Blue, Color::Yellow, Color::Magenta],
153-
Language::Lisp => vec![Color::Yellow],
154-
Language::Lua => vec![Color::Blue],
155-
Language::Markdown => vec![Color::White, Color::Red],
156-
Language::Nim => vec![Color::Yellow, Color::White],
157-
Language::Nix => vec![Color::Cyan, Color::Blue],
158-
Language::ObjectiveC => vec![Color::Cyan, Color::Blue],
159-
Language::OCaml => vec![Color::Yellow],
160-
Language::Org => vec![Color::Green, Color::Red, Color::White],
161-
Language::Perl => vec![Color::Cyan],
162-
Language::Php => vec![Color::Magenta, Color::Black],
163-
Language::Prolog => vec![Color::Blue, Color::Red],
164-
Language::PureScript => vec![Color::White],
165-
Language::Python => vec![Color::Blue, Color::Yellow],
166-
Language::R => vec![Color::White, Color::Blue],
167-
Language::Racket => vec![Color::Red, Color::White, Color::Blue],
168-
Language::Ruby => vec![Color::Magenta],
169-
Language::Rust => vec![Color::White, Color::Red],
170-
Language::Scala => vec![Color::Blue],
171-
Language::Sh => vec![Color::Green],
172-
Language::Swift => vec![Color::Red],
173-
Language::Tcl => vec![Color::Blue, Color::White, Color::Cyan],
174-
Language::Tex => vec![Color::White, Color::Black],
175-
Language::TypeScript => vec![Color::Cyan],
176-
Language::Vue => vec![Color::Green, Color::Blue],
177-
Language::Xml => vec![Color::Yellow, Color::White, Color::Green],
178-
Language::Zig => vec![Color::Yellow],
179-
Language::Unknown => vec![Color::White],
180-
}
181-
}
182-
183119
fn get_languages_stat(languages: &tokei::Languages) -> Option<HashMap<Language, f64>> {
184120
let mut stats = HashMap::new();
185121

0 commit comments

Comments
 (0)