[Fix] auto detect content which should use source syntax (#86)

pull/89/head
The Mist 2024-04-15 22:33:57 +08:00 committed by GitHub
parent 727584b109
commit ac30b071d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 15 additions and 0 deletions

View File

@ -1,3 +1,5 @@
use std::collections::HashMap;
use cosmic_text::{Attrs, Family, Style, Weight}; use cosmic_text::{Attrs, Family, Style, Weight};
use syntect::{ use syntect::{
easy::HighlightLines, easy::HighlightLines,
@ -8,11 +10,14 @@ use syntect::{
use crate::components::interface::render_error::RenderError; use crate::components::interface::render_error::RenderError;
type SourceMap = HashMap<&'static str, &'static str>;
pub struct Highlight { pub struct Highlight {
content: String, content: String,
code_file_path: String, code_file_path: String,
extension: Option<String>, extension: Option<String>,
font_family: String, font_family: String,
highlighting_language_source_map: SourceMap,
} }
pub type HighlightResult<'a> = Vec<(&'a str, Attrs<'a>)>; pub type HighlightResult<'a> = Vec<(&'a str, Attrs<'a>)>;
@ -29,6 +34,7 @@ impl Highlight {
code_file_path, code_file_path,
extension, extension,
font_family, font_family,
highlighting_language_source_map: HashMap::from([("PHP", "<?php")]),
} }
} }
@ -47,6 +53,15 @@ impl Highlight {
))?, ))?,
}; };
if let Some(identifier) = self.highlighting_language_source_map.get(&syntax.name[..]) {
if !self.content.contains(identifier) {
return Ok(syntax_set
.find_syntax_by_name(&format!("{} Source", &syntax.name))
.unwrap_or(syntax)
.to_owned());
}
}
Ok(syntax.to_owned()) Ok(syntax.to_owned())
} }