char/sorcery

static-files based git repo viewer

git clone https://git.t4t.associates/char/sorcery

Charlotte Somexperiment: flat file view by language1fc8dbb

main
5.5 KiB290 linesraw
1/** file → grammar classification, shared by highlighting and the per-language file listing */
2
3// mirrors canonical() in src/grammar_manifest.rs; keep them in sync
4const grammars: Record<string, string> = {
5  ada: "ada",
6  adb: "ada",
7  adoc: "asciidoc",
8  ads: "ada",
9  agda: "agda",
10  asciidoc: "asciidoc",
11  asm: "asm",
12  assembly: "asm",
13  awk: "awk",
14  bash: "bash",
15  bash_profile: "bash",
16  bashrc: "bash",
17  bat: "batch",
18  batch: "batch",
19  bazel: "starlark",
20  bzl: "starlark",
21  c: "c",
22  "c#": "c-sharp",
23  "c++": "cpp",
24  "c-sharp": "c-sharp",
25  caddy: "caddy",
26  caddyfile: "caddy",
27  capnp: "capnp",
28  cbl: "cobol",
29  cc: "cpp",
30  cedar: "cedar",
31  cedarschema: "cedarschema",
32  cfg: "ini",
33  cjs: "javascript",
34  cl: "commonlisp",
35  clj: "clojure",
36  cljc: "clojure",
37  cljs: "clojure",
38  clojure: "clojure",
39  cmake: "cmake",
40  "cmakelists.txt": "cmake",
41  cmd: "batch",
42  cob: "cobol",
43  cobol: "cobol",
44  commonlisp: "commonlisp",
45  conf: "ini",
46  console: "bash",
47  containerfile: "dockerfile",
48  cpp: "cpp",
49  cpy: "cobol",
50  cs: "c-sharp",
51  csharp: "c-sharp",
52  csproj: "xml",
53  css: "css",
54  cts: "typescript",
55  cxx: "cpp",
56  d: "d",
57  dart: "dart",
58  devicetree: "devicetree",
59  diff: "diff",
60  dlang: "d",
61  docker: "dockerfile",
62  dockerfile: "dockerfile",
63  dot: "dot",
64  dts: "devicetree",
65  dtsi: "devicetree",
66  editorconfig: "ini",
67  edn: "clojure",
68  el: "elisp",
69  elisp: "elisp",
70  elixir: "elixir",
71  elm: "elm",
72  "emacs-lisp": "elisp",
73  erl: "erlang",
74  erlang: "erlang",
75  ex: "elixir",
76  exs: "elixir",
77  "f#": "fsharp",
78  fish: "fish",
79  frag: "glsl",
80  fs: "fsharp",
81  fsharp: "fsharp",
82  fsx: "fsharp",
83  gemfile: "ruby",
84  gemspec: "ruby",
85  gitattributes: "gitattributes",
86  gitconfig: "ini",
87  gitmodules: "ini",
88  gleam: "gleam",
89  glsl: "glsl",
90  gnumakefile: "make",
91  go: "go",
92  golang: "go",
93  gql: "graphql",
94  gradle: "groovy",
95  graphql: "graphql",
96  graphviz: "dot",
97  groovy: "groovy",
98  gsh: "groovy",
99  gv: "dot",
100  gvy: "groovy",
101  gy: "groovy",
102  h: "c",
103  haskell: "haskell",
104  hcl: "hcl",
105  hh: "cpp",
106  hlsl: "hlsl",
107  hpp: "cpp",
108  hrl: "erlang",
109  hs: "haskell",
110  htm: "html",
111  html: "html",
112  hxx: "cpp",
113  idr: "idris",
114  idris: "idris",
115  ini: "ini",
116  j2: "jinja2",
117  java: "java",
118  javascript: "javascript",
119  jinja: "jinja2",
120  jinja2: "jinja2",
121  jl: "julia",
122  jq: "jq",
123  js: "javascript",
124  jsdoc: "jsdoc",
125  json: "json",
126  json5: "json",
127  jsonc: "json",
128  jsx: "javascript",
129  julia: "julia",
130  just: "just",
131  justfile: "just",
132  kconfig: "kconfig",
133  kdl: "kdl",
134  kotlin: "kotlin",
135  kt: "kotlin",
136  kts: "kotlin",
137  lean: "lean",
138  lisp: "commonlisp",
139  lua: "lua",
140  m: "matlab",
141  make: "make",
142  makefile: "make",
143  markdown: "markdown",
144  matlab: "matlab",
145  md: "markdown",
146  mdx: "markdown",
147  meson: "meson",
148  "meson.build": "meson",
149  mjs: "javascript",
150  mk: "make",
151  ml: "ocaml",
152  mli: "ocaml",
153  mm: "objc",
154  mts: "typescript",
155  mysql: "sql",
156  nasm: "x86asm",
157  nginx: "nginx",
158  "nginx.conf": "nginx",
159  ninja: "ninja",
160  nix: "nix",
161  objc: "objc",
162  "objective-c": "objc",
163  objectivec: "objc",
164  ocaml: "ocaml",
165  odin: "odin",
166  opa: "rego",
167  patch: "diff",
168  pbtxt: "textproto",
169  perl: "perl",
170  pgsql: "sql",
171  php: "php",
172  pl: "perl",
173  plist: "xml",
174  plsql: "sql",
175  pm: "perl",
176  postgres: "sql",
177  postgresql: "sql",
178  postscript: "postscript",
179  powershell: "powershell",
180  pro: "prolog",
181  prolog: "prolog",
182  proto: "proto",
183  protobuf: "proto",
184  ps: "postscript",
185  ps1: "powershell",
186  psm1: "powershell",
187  pwsh: "powershell",
188  py: "python",
189  py3: "python",
190  pyi: "python",
191  python: "python",
192  python3: "python",
193  query: "query",
194  r: "r",
195  racket: "scheme",
196  rakefile: "ruby",
197  rb: "ruby",
198  regex: "regex",
199  regexp: "regex",
200  rego: "rego",
201  res: "rescript",
202  rescript: "rescript",
203  rkt: "scheme",
204  rlang: "r",
205  ron: "ron",
206  rq: "sparql",
207  rs: "rust",
208  ruby: "ruby",
209  rust: "rust",
210  s: "asm",
211  sass: "scss",
212  sbt: "scala",
213  scala: "scala",
214  scheme: "scheme",
215  scm: "query",
216  scss: "scss",
217  sh: "bash",
218  shell: "bash",
219  sol: "solidity",
220  solidity: "solidity",
221  sparql: "sparql",
222  sql: "sql",
223  sqlite: "sql",
224  ss: "scheme",
225  "ssh-config": "ssh-config",
226  ssh_config: "ssh-config",
227  sshd_config: "ssh-config",
228  starlark: "starlark",
229  styx: "styx",
230  sv: "verilog",
231  svelte: "svelte",
232  svg: "xml",
233  swift: "swift",
234  systemverilog: "verilog",
235  terraform: "hcl",
236  textpb: "textproto",
237  textproto: "textproto",
238  tf: "hcl",
239  tfvars: "hcl",
240  thrift: "thrift",
241  tla: "tlaplus",
242  tlaplus: "tlaplus",
243  toml: "toml",
244  ts: "typescript",
245  tsql: "sql",
246  tsx: "tsx",
247  typ: "typst",
248  typescript: "typescript",
249  typst: "typst",
250  ua: "uiua",
251  uiua: "uiua",
252  v: "verilog",
253  vb: "vb",
254  vbnet: "vb",
255  verilog: "verilog",
256  vert: "glsl",
257  vhd: "vhdl",
258  vhdl: "vhdl",
259  vim: "vim",
260  viml: "vim",
261  vimrc: "vim",
262  vimscript: "vim",
263  visualbasic: "vb",
264  vue: "vue",
265  "wasm-interface": "wit",
266  wit: "wit",
267  x86: "x86asm",
268  x86asm: "x86asm",
269  xhtml: "html",
270  xml: "xml",
271  xsd: "xml",
272  xsl: "xml",
273  xslt: "xml",
274  yaml: "yaml",
275  yml: "yaml",
276  yuri: "yuri",
277  zig: "zig",
278  zon: "zig",
279  zsh: "zsh",
280  zshrc: "zsh",
281};
282
283/** mirrors detect() in src/grammar_manifest.rs: by file name, then by extension */
284export function detectLanguage(path: string): string | null {
285  const name = path.split("/").at(-1)!.toLowerCase();
286  return grammars[name] ?? grammars[name.split(".").at(-1)!] ?? null;
287}
288
289/** mirrors group() in src/languages.rs; keep them in sync */
290export const languageGroup = (grammar: string) => grammar === "tsx" ? "typescript" : grammar;