fix(highlight): 大小写不敏感的语法名称匹配,修复 haskell 等高亮失效
This commit is contained in:
parent
6ce8915e6c
commit
b7afd12538
@ -48,15 +48,20 @@ pub mod server {
|
|||||||
if let Some(s) = ss.find_syntax_by_name(lang) {
|
if let Some(s) = ss.find_syntax_by_name(lang) {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
// 小写后再匹配一次
|
// 小写扩展名再匹配一次(部分语言的扩展名习惯小写)
|
||||||
let lower = lang.to_lowercase();
|
let lower = lang.to_lowercase();
|
||||||
if lower != lang {
|
if lower != lang {
|
||||||
if let Some(s) = ss.find_syntax_by_extension(&lower) {
|
if let Some(s) = ss.find_syntax_by_extension(&lower) {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
if let Some(s) = ss.find_syntax_by_name(&lower) {
|
|
||||||
return s;
|
|
||||||
}
|
}
|
||||||
|
// 大小写不敏感的语法名称匹配(syntect 的语法名通常首字母大写,如 Haskell)
|
||||||
|
if let Some(s) = ss
|
||||||
|
.syntaxes()
|
||||||
|
.iter()
|
||||||
|
.find(|s| s.name.eq_ignore_ascii_case(lang))
|
||||||
|
{
|
||||||
|
return s;
|
||||||
}
|
}
|
||||||
// 常用语言别名映射表
|
// 常用语言别名映射表
|
||||||
let aliases: &[(&str, &str)] = &[
|
let aliases: &[(&str, &str)] = &[
|
||||||
@ -163,6 +168,23 @@ mod tests {
|
|||||||
assert!(result.contains(r#"<span class="constant numeric integer decimal rust">1</span>"#));
|
assert!(result.contains(r#"<span class="constant numeric integer decimal rust">1</span>"#));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn highlight_code_haskell_by_full_name() {
|
||||||
|
// Haskell 语法名首字母大写,扩展名为 hs;直接写 "haskell" 应能匹配。
|
||||||
|
let code = "factorial :: Integer -> Integer\nfactorial 0 = 1";
|
||||||
|
let result = highlight_code(code, Some("haskell"));
|
||||||
|
assert!(
|
||||||
|
!result.contains(r#"<span class="text plain">"#),
|
||||||
|
"Haskell 不应回退到纯文本: {}",
|
||||||
|
result
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
result.contains("source haskell"),
|
||||||
|
"Haskell 应输出 source haskell: {}",
|
||||||
|
result
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn highlight_code_uppercase_language_falls_back_via_lowercase() {
|
fn highlight_code_uppercase_language_falls_back_via_lowercase() {
|
||||||
// 大写语言标识应通过小写回退路径匹配到对应语法。
|
// 大写语言标识应通过小写回退路径匹配到对应语法。
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user