Use build script instead.
Map between macro and independen languages for better coverage.
This commit is contained in:
@@ -109,8 +109,8 @@ fn main() -> Result<()> {
|
||||
}
|
||||
}
|
||||
|
||||
let mut languages = Vec::new();
|
||||
let mut matchers = Vec::new();
|
||||
let stdout = io::stdout();
|
||||
let mut lock = stdout.lock();
|
||||
|
||||
for (language, mut results) in entries.into_iter() {
|
||||
results.sort_unstable();
|
||||
@@ -170,96 +170,14 @@ fn main() -> Result<()> {
|
||||
|
||||
regex.push_str(")+$");
|
||||
|
||||
let re = Regex::new(®ex).expect("failed to build regex");
|
||||
let _ = Regex::new(®ex).expect("failed to build regex");
|
||||
|
||||
languages.push(language);
|
||||
matchers.push(re);
|
||||
assert!(!regex.contains('\n'));
|
||||
assert!(!regex.contains('\t'));
|
||||
|
||||
writeln!(lock, "{}\t{}", language.to_639_3(), regex).expect("failed to write to stdout");
|
||||
}
|
||||
|
||||
assert_eq!(languages.len(), matchers.len());
|
||||
|
||||
if languages.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let stdout = io::stdout();
|
||||
let mut lock = stdout.lock();
|
||||
|
||||
writeln!(lock, "use isolang::Language;").expect("failed to write to stdout");
|
||||
writeln!(lock, "use once_cell::sync::Lazy;").expect("failed to write to stdout");
|
||||
writeln!(lock, "use regex::{{Regex, RegexSet}};").expect("failed to write to stdout");
|
||||
|
||||
writeln!(lock).expect("failed to write to stdout");
|
||||
|
||||
writeln!(
|
||||
lock,
|
||||
"pub static LANGUAGES: [Language; {}] = [",
|
||||
languages.len()
|
||||
)
|
||||
.expect("failed to write to stdout");
|
||||
|
||||
for language in &languages {
|
||||
writeln!(lock, " Language::{},", title(language.to_639_3()))
|
||||
.expect("failed to write to stdout");
|
||||
}
|
||||
|
||||
writeln!(lock, "];").expect("failed to write to stdout");
|
||||
|
||||
writeln!(lock).expect("failed to write to stdout");
|
||||
|
||||
writeln!(
|
||||
lock,
|
||||
"pub static REGEX_SET: Lazy<RegexSet> = Lazy::new(|| {{",
|
||||
)
|
||||
.expect("failed to write to stdout");
|
||||
writeln!(lock, " RegexSet::new(vec![",).expect("failed to write to stdout");
|
||||
|
||||
for matcher in &matchers {
|
||||
writeln!(lock, " \"{}\",", matcher).expect("failed to write to stdout");
|
||||
}
|
||||
|
||||
writeln!(lock, " ]).unwrap()",).expect("failed to write to stdout");
|
||||
|
||||
writeln!(lock, "}});").expect("failed to write to stdout");
|
||||
|
||||
writeln!(lock).expect("failed to write to stdout");
|
||||
|
||||
for (language, matcher) in languages.iter().zip(matchers.iter()) {
|
||||
writeln!(
|
||||
lock,
|
||||
"pub static RE_{}: Lazy<Regex> = Lazy::new(|| Regex::new(\"{}\").unwrap());",
|
||||
language.to_639_3().to_ascii_uppercase(),
|
||||
matcher,
|
||||
)
|
||||
.expect("failed to write to stdout");
|
||||
}
|
||||
|
||||
writeln!(lock).expect("failed to write to stdout");
|
||||
|
||||
writeln!(lock, "impl super::LanguageExt for Language {{",).expect("failed to write to stdout");
|
||||
writeln!(
|
||||
lock,
|
||||
" fn is_match(&self, word: &str) -> Option<bool> {{",
|
||||
)
|
||||
.expect("failed to write to stdout");
|
||||
writeln!(lock, " match self {{",).expect("failed to write to stdout");
|
||||
|
||||
for language in &languages {
|
||||
writeln!(
|
||||
lock,
|
||||
" Language::{} => Some(RE_{}.is_match(word)),",
|
||||
title(language.to_639_3()),
|
||||
language.to_639_3().to_ascii_uppercase(),
|
||||
)
|
||||
.expect("failed to write to stdout");
|
||||
}
|
||||
|
||||
writeln!(lock, " _ => None,",).expect("failed to write to stdout");
|
||||
|
||||
writeln!(lock, " }}",).expect("failed to write to stdout");
|
||||
writeln!(lock, " }}",).expect("failed to write to stdout");
|
||||
writeln!(lock, "}}",).expect("failed to write to stdout");
|
||||
|
||||
lock.flush().expect("failed to flush to stdout");
|
||||
|
||||
Ok(())
|
||||
|
||||
Reference in New Issue
Block a user