Detect language for highlighting
This commit is contained in:
parent
789ba410f7
commit
001a27c694
4 changed files with 21 additions and 7 deletions
|
|
@ -23,6 +23,7 @@ Early development: not usable yet.
|
||||||
* [ ] Security tests (zip bomb)
|
* [ ] Security tests (zip bomb)
|
||||||
* [ ] Allow download
|
* [ ] Allow download
|
||||||
* [ ] Markdown rendering
|
* [ ] Markdown rendering
|
||||||
|
* [ ] Error pages
|
||||||
|
|
||||||
## Design choices
|
## Design choices
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,7 @@ pub fn make_router(config: &'static Config) -> impl Handler {
|
||||||
return conn.with_status(404);
|
return conn.with_status(404);
|
||||||
};
|
};
|
||||||
|
|
||||||
let Some(file_hash) = root.find(conn.path().split('/')) else {
|
let Some(repo_file) = root.find(conn.path().split('/')) else {
|
||||||
return conn.with_status(404);
|
return conn.with_status(404);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -164,17 +164,30 @@ pub fn make_router(config: &'static Config) -> impl Handler {
|
||||||
Some(buf)
|
Some(buf)
|
||||||
};
|
};
|
||||||
let Some(file_content) = file_cache.fetch(
|
let Some(file_content) = file_cache.fetch(
|
||||||
(repo_hash_str.to_string(), file_hash.to_string()),
|
(repo_hash_str.to_string(), repo_file.hash.clone()),
|
||||||
fetch_file,
|
fetch_file,
|
||||||
) else {
|
) else {
|
||||||
return conn.with_status(500);
|
return conn.with_status(500);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let file_lang = conn
|
||||||
|
.path()
|
||||||
|
.rsplit('.')
|
||||||
|
.next()
|
||||||
|
.unwrap_or(giallo::PLAIN_GRAMMAR_NAME);
|
||||||
|
|
||||||
let hl_options = giallo::HighlightOptions::new(
|
let hl_options = giallo::HighlightOptions::new(
|
||||||
"py",
|
file_lang,
|
||||||
giallo::ThemeVariant::Single("catppuccin-frappe"),
|
giallo::ThemeVariant::Single("catppuccin-frappe"),
|
||||||
);
|
);
|
||||||
let highlighted = hl_registry.highlight(&file_content, &hl_options).unwrap();
|
let highlighted = hl_registry.highlight(&file_content, &hl_options).unwrap_or_else(|_e| {
|
||||||
|
// If extension is unknown
|
||||||
|
let hl_options = giallo::HighlightOptions::new(
|
||||||
|
giallo::PLAIN_GRAMMAR_NAME,
|
||||||
|
giallo::ThemeVariant::Single("catppuccin-frappe"),
|
||||||
|
);
|
||||||
|
hl_registry.highlight(&file_content, &hl_options).unwrap()
|
||||||
|
});
|
||||||
let html = giallo::HtmlRenderer::default().render(
|
let html = giallo::HtmlRenderer::default().render(
|
||||||
&highlighted,
|
&highlighted,
|
||||||
&giallo::RenderOptions {
|
&giallo::RenderOptions {
|
||||||
|
|
|
||||||
|
|
@ -113,10 +113,10 @@ impl Directory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find<'a>(&self, mut path: impl Iterator<Item = &'a str>) -> Option<&str> {
|
pub fn find<'a>(&self, mut path: impl Iterator<Item = &'a str>) -> Option<&File> {
|
||||||
match self.entries.get(path.next()?)? {
|
match self.entries.get(path.next()?)? {
|
||||||
Entry::Directory(directory) => directory.find(path),
|
Entry::Directory(directory) => directory.find(path),
|
||||||
Entry::File(file) => Some(&file.hash),
|
Entry::File(file) => Some(file),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ html, body {
|
||||||
list-style-type: "🗋";
|
list-style-type: "🗋";
|
||||||
}
|
}
|
||||||
.giallo {
|
.giallo {
|
||||||
tab-size: 4em;
|
tab-size: 4;
|
||||||
}
|
}
|
||||||
.giallo-ln {
|
.giallo-ln {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue