diff --git a/internal/preview.html b/internal/preview.html
index 80c12b3..3726f62 100644
--- a/internal/preview.html
+++ b/internal/preview.html
@@ -23,14 +23,26 @@
title.innerText = data.name;
- if (data.name.endsWith(".txt")) {
- body.innerText = data.content;
+ let language = guessLanguage(data.name);
+
+ if (language) {
+ const code = hljs.highlight(data.content, {
+ language: language,
+ });
+
+ body.innerHTML = code.value;
} else {
- body.innerHTML = hljs.highlightAuto(data.content).value;
+ const code = hljs.highlightAuto(data.content);
+
+ language = code.language;
+
+ body.innerHTML = code.value;
}
+ title.innerText += ` (${language})`;
+
addEventListener("keydown", event => {
- if ((event.ctrlKey || event.metaKey) && event.key === "S") {
+ if ((event.ctrlKey || event.metaKey) && event.key === "s") {
event.preventDefault();
const el = document.createElement("a");
@@ -43,6 +55,94 @@
window.close();
}
});
+
+ function guessLanguage(name) {
+ const extensions = {
+ js: "javascript",
+ mjs: "javascript",
+ cjs: "javascript",
+ jsx: "javascript",
+ ts: "typescript",
+ tsx: "typescript",
+ json: "json",
+ jsonc: "json",
+ html: "html",
+ htm: "html",
+ css: "css",
+ scss: "scss",
+ sass: "scss",
+ less: "less",
+ go: "go",
+ php: "php",
+ sh: "bash",
+ bash: "bash",
+ ps1: "powershell",
+ bat: "dos",
+ cmd: "dos",
+ reg: "ini",
+ env: "ini",
+ properties: "properties",
+ ini: "ini",
+ conf: "ini",
+ toml: "toml",
+ yaml: "yaml",
+ yml: "yaml",
+ md: "markdown",
+ txt: "text",
+ csv: "csv",
+ xml: "xml",
+ svg: "xml",
+ py: "python",
+ rb: "ruby",
+ rbs: "ruby",
+ lua: "lua",
+ pl: "perl",
+ pm: "perl",
+ java: "java",
+ kt: "kotlin",
+ kts: "kotlin",
+ c: "c",
+ h: "c",
+ cc: "cpp",
+ cpp: "cpp",
+ cxx: "cpp",
+ hh: "cpp",
+ hpp: "cpp",
+ hxx: "cpp",
+ cs: "csharp",
+ m: "objectivec",
+ mm: "objectivec",
+ rs: "rust",
+ zig: "zig",
+ asm: "x86asm",
+ swift: "swift",
+ sql: "sql",
+ psq: "pgsql",
+ psql: "pgsql",
+ nginx: "nginx",
+ proto: "protobuf",
+ dockerfile: "dockerfile",
+ ejs: "javascript",
+ diff: "diff",
+ patch: "diff",
+ log: "text",
+ };
+
+ const test = name.toLowerCase().trim();
+
+ if (test === "go.mod" || test === "go.sum") {
+ return "go";
+ }
+
+ for (const ext in extensions) {
+ if (test.endsWith(`.${ext}`)) {
+ return extensions[ext];
+ }
+ }
+
+ return null;
+ }
+