1/**
2 * Maps file extensions to highlight.js language identifiers
3 */
4export function getLanguageFromFilename(filename: string): string {
5 const extension = filename.toLowerCase().substring(filename.lastIndexOf('.'));
6
7 switch (extension) {
8 // JavaScript / TypeScript
9 case '.js':
10 case '.mjs':
11 case '.cjs':
12 return 'javascript';
13 case '.ts':
14 case '.mts':
15 case '.cts':
16 return 'typescript';
17 case '.jsx':
18 return 'javascript';
19 case '.tsx':
20 return 'typescript';
21
22 // Web
23 case '.html':
24 case '.htm':
25 return 'html';
26 case '.css':
27 return 'css';
28 case '.scss':
29 return 'scss';
30 case '.less':
31 return 'less';
32 case '.vue':
33 return 'html';
34 case '.svelte':
35 return 'html';
36
37 // Data formats
38 case '.json':
39 return 'json';
40 case '.xml':
41 return 'xml';
42 case '.yaml':
43 case '.yml':
44 return 'yaml';
45 case '.toml':
46 return 'ini';
47 case '.csv':
48 return 'plaintext';
49
50 // Programming languages
51 case '.py':
52 return 'python';
53 case '.java':
54 return 'java';
55 case '.kt':
56 case '.kts':
57 return 'kotlin';
58 case '.scala':
59 return 'scala';
60 case '.cpp':
61 case '.cc':
62 case '.cxx':
63 case '.c++':
64 return 'cpp';
65 case '.c':
66 return 'c';
67 case '.h':
68 case '.hpp':
69 return 'cpp';
70 case '.cs':
71 return 'csharp';
72 case '.go':
73 return 'go';
74 case '.rs':
75 return 'rust';
76 case '.rb':
77 return 'ruby';
78 case '.php':
79 return 'php';
80 case '.swift':
81 return 'swift';
82 case '.dart':
83 return 'dart';
84 case '.r':
85 return 'r';
86 case '.lua':
87 return 'lua';
88 case '.pl':
89 case '.pm':
90 return 'perl';
91
92 // Shell
93 case '.sh':
94 case '.bash':
95 case '.zsh':
96 return 'bash';
97 case '.bat':
98 case '.cmd':
99 return 'dos';
100 case '.ps1':
101 return 'powershell';
102
103 // Database
104 case '.sql':
105 return 'sql';
106
107 // Markup / Documentation
108 case '.md':
109 case '.markdown':
110 return 'markdown';
111 case '.tex':
112 case '.latex':
113 return 'latex';
114 case '.adoc':
115 case '.asciidoc':
116 return 'asciidoc';
117
118 // Config
119 case '.ini':
120 case '.cfg':
121 case '.conf':
122 return 'ini';
123 case '.dockerfile':
124 return 'dockerfile';
125 case '.nginx':
126 return 'nginx';
127
128 // Other
129 case '.graphql':
130 case '.gql':
131 return 'graphql';
132 case '.proto':
133 return 'protobuf';
134 case '.diff':
135 case '.patch':
136 return 'diff';
137 case '.log':
138 return 'plaintext';
139 case '.txt':
140 return 'plaintext';
141
142 default:
143 return 'plaintext';
144 }
145}