Skip to content

Commit 6ac0ee0

Browse files
committed
Update template
1 parent d280914 commit 6ac0ee0

File tree

2 files changed

+50
-46
lines changed

2 files changed

+50
-46
lines changed

build.rs

+32
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ fn main() -> Result<(), Box<dyn Error>> {
1818
let mut tera = Tera::default();
1919
tera.register_filter("strip_color_tokens", strip_color_tokens_filter);
2020
tera.register_filter("hex_to_rgb", hex_to_rgb_filter);
21+
tera.register_filter("enumify", enumify);
2122

2223
let lang_data: serde_json::Value = serde_yaml::from_reader(File::open("languages.yaml")?)?;
2324

@@ -78,3 +79,34 @@ fn hex_to_rgb_filter(
7879
"b": b,
7980
}))
8081
}
82+
83+
fn enumify(value: &tera::Value, _args: &HashMap<String, tera::Value>) -> tera::Result<tera::Value> {
84+
let s = match value {
85+
tera::Value::String(s) => s,
86+
_ => return Err(tera::Error::msg("expected string")),
87+
};
88+
// NOTE Known manual overrides
89+
let manual = match s.as_str() {
90+
"C++" => Some("Cpp".into()),
91+
_ => None,
92+
};
93+
94+
if let Some(manual) = manual {
95+
return Ok(tera::Value::String(manual));
96+
}
97+
98+
let titlecase = s
99+
.split(' ')
100+
.map(|s| {
101+
let mut chars = s.chars();
102+
match chars.next() {
103+
None => String::new(),
104+
Some(f) => f.to_uppercase().chain(chars).collect(),
105+
}
106+
})
107+
.collect::<Vec<_>>()
108+
.join("")
109+
.replace('#', "Sharp");
110+
111+
Ok(tera::Value::String(titlecase))
112+
}

src/info/langs/language.tera

+18-46
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use owo_colors::{
44
};
55
use std::fmt;
66
use std::fmt::Write;
7+
use std::str::FromStr;
78
use strum::EnumIter;
89

910
pub struct Colors {
@@ -17,54 +18,48 @@ pub struct Colors {
1718
pub enum Language {
1819
{% for language, attrs in languages -%}
1920
{% if attrs.serialization %}#[clap(name="{{ attrs.serialization }}")]{% endif -%}
20-
{{ language }},
21+
{{ language|enumify }},
2122
{% endfor %}
2223
}
2324

2425
impl fmt::Display for Language {
2526
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2627
match self {
2728
{% for language, _ in languages -%}
28-
Self::{{ language }} => write!(f, "{}", tokei::LanguageType::{{ language }}.name()),
29+
Self::{{ language|enumify }} => write!(f, "{}", r#"{{ language }}"#),
2930
{% endfor %}
3031
}
3132
}
3233
}
3334

34-
impl From<tokei::LanguageType> for Language {
35-
fn from(language: tokei::LanguageType) -> Self {
36-
match language {
37-
{% for language, _ in languages -%}
38-
tokei::LanguageType::{{ language }} => Self::{{ language }},
39-
{% endfor %}
40-
_ => unimplemented!("Language {:?}", language),
41-
}
42-
}
43-
}
35+
impl FromStr for Language {
36+
// NOTE Right now we just panic, matching old behavior
37+
type Err = ();
4438

45-
impl From<Language> for tokei::LanguageType {
46-
fn from(language: Language) -> Self {
47-
match language {
39+
fn from_str(s: &str) -> Result<Self, Self::Err> {
40+
let lang = match s {
4841
{% for language, _ in languages -%}
49-
Language::{{ language }} => tokei::LanguageType::{{ language }},
42+
r#"{{ language }}"# => Self::{{ language|enumify }},
5043
{% endfor %}
51-
}
44+
_ => unimplemented!("Language {:?}", s),
45+
};
46+
Ok(lang)
5247
}
5348
}
5449

5550
impl Language {
5651
pub fn get_ascii_art(&self) -> &'static str {
5752
match self {
5853
{% for language, attrs in languages -%}
59-
Language::{{ language }} => "{{ attrs.ascii | addslashes }}",
54+
Language::{{ language|enumify }} => "{{ attrs.ascii | addslashes }}",
6055
{% endfor %}
6156
}
6257
}
6358

6459
pub fn get_colors(&self, true_color: bool) -> Vec<DynColors> {
6560
let colors = match self {
6661
{% for language, attrs in languages -%}
67-
Language::{{ language }} => Colors {
62+
Language::{{ language|enumify }} => Colors {
6863
basic_colors: vec![{%- for color in attrs.colors.ansi -%}Ansi(AnsiColors::{{ color | capitalize | replace(from="White", to="Default") }}),{% endfor %}],
6964
true_colors: {% if attrs.colors.hex -%}
7065
Some(vec![
@@ -87,41 +82,18 @@ impl Language {
8782
match self {
8883
{% for language, attrs in languages -%}
8984
{% set rgb = attrs.colors.chip | hex_to_rgb -%}
90-
Language::{{ language }} => Rgb({{ rgb.r }}, {{ rgb.g }}, {{ rgb.b }}),
85+
Language::{{ language|enumify }} => Rgb({{ rgb.r }}, {{ rgb.g }}, {{ rgb.b }}),
9186
{% endfor %}
9287
}
9388
}
9489
}
9590

96-
fn __loc(language_type: &tokei::LanguageType, language: &tokei::Language) -> usize {
97-
match language_type {
98-
{% for language, attrs in languages -%}
99-
{%- set line_types = attrs.line_types | default(value=['code']) -%}
100-
tokei::LanguageType::{{ language }} => language.{{ line_types.0 }}{% for line_type in line_types | slice(start=1) %} + language.{{ line_type }}{% endfor %},
101-
{% endfor %}
102-
_ => unimplemented!("Language Type {:?}", language_type),
103-
}
104-
}
105-
106-
107-
fn __stats_loc(language_type: &tokei::LanguageType, stats: &tokei::CodeStats) -> usize {
108-
match language_type {
109-
{% for language, attrs in languages -%}
110-
{%- set line_types = attrs.line_types | default(value=['code']) -%}
111-
{%- if attrs.line_types -%}
112-
tokei::LanguageType::{{ language }} => stats.{{ line_types.0 }}{% for line_type in line_types | slice(start=1) %} + stats.{{ line_type }}{% endfor %},
113-
{% endif -%}
114-
{% endfor %}
115-
_ => stats.code
116-
}
117-
}
118-
11991
{% for language, attrs in languages -%}
12092
{% if attrs.colors.rgb %}
12193
{% set ansi_length = attrs.colors.ansi | length -%}
12294
{% set rgb_length = attrs.colors.rgb | length %}
12395
{% if ansi_length != rgb_length %}
124-
compile_error!("{{ language }}: ansi and rgb colors must be the same length");
96+
compile_error!(r#"{{ language }}: ansi and rgb colors must be the same length"#);
12597
{% endif %}
12698
{% endif -%}
12799
{% endfor -%}
@@ -135,14 +107,14 @@ fn __stats_loc(language_type: &tokei::LanguageType, stats: &tokei::CodeStats) ->
135107
{% set lines = attrs.ascii | split(pat="\n") -%}
136108
{% set height = lines | length -%}
137109
{% if height > max_height %}
138-
compile_error!("{{ language }}: ascii art must have {{ max_height - 1 }} or less lines, has {{ height }}");
110+
compile_error!(r#"{{ language }}: ascii art must have {{ max_height - 1 }} or less lines, has {{ height }}"#);
139111
{% endif -%}
140112

141113
{% for line in lines -%}
142114
{% set cleaned_line = line | strip_color_tokens -%}
143115
{% set width = cleaned_line | length -%}
144116
{% if width > max_width %}
145-
compile_error!("{{ language }}: ascii art line {{ loop.index }} must be {{ max_width }} or less characters wide");
117+
compile_error!(r#"{{ language }}: ascii art line {{ loop.index }} must be {{ max_width }} or less characters wide"#);
146118
{% endif -%}
147119
{% endfor -%}
148120
{% endfor -%}

0 commit comments

Comments
 (0)