1// Code generated by github.com/go-enry/go-enry/v2/internal/code-generator DO NOT EDIT.
2// Extracted from github/linguist commit: 95636e415749b0bf8fbf3f86922f788cf91c11a2
3
4package data
5
6import (
7	"regexp"
8
9	"github.com/go-enry/go-enry/v2/data/rule"
10)
11
12var ContentHeuristics = map[string]*Heuristics{
13	".1": &Heuristics{
14		rule.And(
15			rule.MatchingLanguages("Roff Manpage"),
16			rule.Or(
17				rule.MatchingLanguages(""),
18				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
19			),
20			rule.Or(
21				rule.MatchingLanguages(""),
22				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
23			),
24			rule.Or(
25				rule.MatchingLanguages(""),
26				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
27			),
28		),
29		rule.And(
30			rule.MatchingLanguages("Roff Manpage"),
31			rule.Or(
32				rule.MatchingLanguages(""),
33				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
34			),
35			rule.Or(
36				rule.MatchingLanguages(""),
37				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
38			),
39		),
40		rule.Or(
41			rule.MatchingLanguages("Roff"),
42			regexp.MustCompile(`(?m)^\.(?:[A-Za-z]{2}(?:\s|$)|\\")`),
43		),
44	},
45	".1in": &Heuristics{
46		rule.And(
47			rule.MatchingLanguages("Roff Manpage"),
48			rule.Or(
49				rule.MatchingLanguages(""),
50				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
51			),
52			rule.Or(
53				rule.MatchingLanguages(""),
54				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
55			),
56			rule.Or(
57				rule.MatchingLanguages(""),
58				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
59			),
60		),
61		rule.And(
62			rule.MatchingLanguages("Roff Manpage"),
63			rule.Or(
64				rule.MatchingLanguages(""),
65				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
66			),
67			rule.Or(
68				rule.MatchingLanguages(""),
69				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
70			),
71		),
72		rule.Always(
73			rule.MatchingLanguages("Roff"),
74		),
75	},
76	".1m": &Heuristics{
77		rule.And(
78			rule.MatchingLanguages("Roff Manpage"),
79			rule.Or(
80				rule.MatchingLanguages(""),
81				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
82			),
83			rule.Or(
84				rule.MatchingLanguages(""),
85				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
86			),
87			rule.Or(
88				rule.MatchingLanguages(""),
89				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
90			),
91		),
92		rule.And(
93			rule.MatchingLanguages("Roff Manpage"),
94			rule.Or(
95				rule.MatchingLanguages(""),
96				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
97			),
98			rule.Or(
99				rule.MatchingLanguages(""),
100				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
101			),
102		),
103		rule.Always(
104			rule.MatchingLanguages("Roff"),
105		),
106	},
107	".1x": &Heuristics{
108		rule.And(
109			rule.MatchingLanguages("Roff Manpage"),
110			rule.Or(
111				rule.MatchingLanguages(""),
112				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
113			),
114			rule.Or(
115				rule.MatchingLanguages(""),
116				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
117			),
118			rule.Or(
119				rule.MatchingLanguages(""),
120				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
121			),
122		),
123		rule.And(
124			rule.MatchingLanguages("Roff Manpage"),
125			rule.Or(
126				rule.MatchingLanguages(""),
127				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
128			),
129			rule.Or(
130				rule.MatchingLanguages(""),
131				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
132			),
133		),
134		rule.Always(
135			rule.MatchingLanguages("Roff"),
136		),
137	},
138	".2": &Heuristics{
139		rule.And(
140			rule.MatchingLanguages("Roff Manpage"),
141			rule.Or(
142				rule.MatchingLanguages(""),
143				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
144			),
145			rule.Or(
146				rule.MatchingLanguages(""),
147				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
148			),
149			rule.Or(
150				rule.MatchingLanguages(""),
151				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
152			),
153		),
154		rule.And(
155			rule.MatchingLanguages("Roff Manpage"),
156			rule.Or(
157				rule.MatchingLanguages(""),
158				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
159			),
160			rule.Or(
161				rule.MatchingLanguages(""),
162				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
163			),
164		),
165		rule.Or(
166			rule.MatchingLanguages("Roff"),
167			regexp.MustCompile(`(?m)^\.(?:[A-Za-z]{2}(?:\s|$)|\\")`),
168		),
169	},
170	".3": &Heuristics{
171		rule.And(
172			rule.MatchingLanguages("Roff Manpage"),
173			rule.Or(
174				rule.MatchingLanguages(""),
175				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
176			),
177			rule.Or(
178				rule.MatchingLanguages(""),
179				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
180			),
181			rule.Or(
182				rule.MatchingLanguages(""),
183				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
184			),
185		),
186		rule.And(
187			rule.MatchingLanguages("Roff Manpage"),
188			rule.Or(
189				rule.MatchingLanguages(""),
190				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
191			),
192			rule.Or(
193				rule.MatchingLanguages(""),
194				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
195			),
196		),
197		rule.Or(
198			rule.MatchingLanguages("Roff"),
199			regexp.MustCompile(`(?m)^\.(?:[A-Za-z]{2}(?:\s|$)|\\")`),
200		),
201	},
202	".3in": &Heuristics{
203		rule.And(
204			rule.MatchingLanguages("Roff Manpage"),
205			rule.Or(
206				rule.MatchingLanguages(""),
207				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
208			),
209			rule.Or(
210				rule.MatchingLanguages(""),
211				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
212			),
213			rule.Or(
214				rule.MatchingLanguages(""),
215				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
216			),
217		),
218		rule.And(
219			rule.MatchingLanguages("Roff Manpage"),
220			rule.Or(
221				rule.MatchingLanguages(""),
222				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
223			),
224			rule.Or(
225				rule.MatchingLanguages(""),
226				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
227			),
228		),
229		rule.Always(
230			rule.MatchingLanguages("Roff"),
231		),
232	},
233	".3m": &Heuristics{
234		rule.And(
235			rule.MatchingLanguages("Roff Manpage"),
236			rule.Or(
237				rule.MatchingLanguages(""),
238				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
239			),
240			rule.Or(
241				rule.MatchingLanguages(""),
242				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
243			),
244			rule.Or(
245				rule.MatchingLanguages(""),
246				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
247			),
248		),
249		rule.And(
250			rule.MatchingLanguages("Roff Manpage"),
251			rule.Or(
252				rule.MatchingLanguages(""),
253				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
254			),
255			rule.Or(
256				rule.MatchingLanguages(""),
257				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
258			),
259		),
260		rule.Always(
261			rule.MatchingLanguages("Roff"),
262		),
263	},
264	".3p": &Heuristics{
265		rule.And(
266			rule.MatchingLanguages("Roff Manpage"),
267			rule.Or(
268				rule.MatchingLanguages(""),
269				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
270			),
271			rule.Or(
272				rule.MatchingLanguages(""),
273				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
274			),
275			rule.Or(
276				rule.MatchingLanguages(""),
277				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
278			),
279		),
280		rule.And(
281			rule.MatchingLanguages("Roff Manpage"),
282			rule.Or(
283				rule.MatchingLanguages(""),
284				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
285			),
286			rule.Or(
287				rule.MatchingLanguages(""),
288				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
289			),
290		),
291		rule.Always(
292			rule.MatchingLanguages("Roff"),
293		),
294	},
295	".3pm": &Heuristics{
296		rule.And(
297			rule.MatchingLanguages("Roff Manpage"),
298			rule.Or(
299				rule.MatchingLanguages(""),
300				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
301			),
302			rule.Or(
303				rule.MatchingLanguages(""),
304				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
305			),
306			rule.Or(
307				rule.MatchingLanguages(""),
308				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
309			),
310		),
311		rule.And(
312			rule.MatchingLanguages("Roff Manpage"),
313			rule.Or(
314				rule.MatchingLanguages(""),
315				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
316			),
317			rule.Or(
318				rule.MatchingLanguages(""),
319				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
320			),
321		),
322		rule.Always(
323			rule.MatchingLanguages("Roff"),
324		),
325	},
326	".3qt": &Heuristics{
327		rule.And(
328			rule.MatchingLanguages("Roff Manpage"),
329			rule.Or(
330				rule.MatchingLanguages(""),
331				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
332			),
333			rule.Or(
334				rule.MatchingLanguages(""),
335				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
336			),
337			rule.Or(
338				rule.MatchingLanguages(""),
339				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
340			),
341		),
342		rule.And(
343			rule.MatchingLanguages("Roff Manpage"),
344			rule.Or(
345				rule.MatchingLanguages(""),
346				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
347			),
348			rule.Or(
349				rule.MatchingLanguages(""),
350				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
351			),
352		),
353		rule.Always(
354			rule.MatchingLanguages("Roff"),
355		),
356	},
357	".3x": &Heuristics{
358		rule.And(
359			rule.MatchingLanguages("Roff Manpage"),
360			rule.Or(
361				rule.MatchingLanguages(""),
362				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
363			),
364			rule.Or(
365				rule.MatchingLanguages(""),
366				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
367			),
368			rule.Or(
369				rule.MatchingLanguages(""),
370				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
371			),
372		),
373		rule.And(
374			rule.MatchingLanguages("Roff Manpage"),
375			rule.Or(
376				rule.MatchingLanguages(""),
377				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
378			),
379			rule.Or(
380				rule.MatchingLanguages(""),
381				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
382			),
383		),
384		rule.Always(
385			rule.MatchingLanguages("Roff"),
386		),
387	},
388	".4": &Heuristics{
389		rule.And(
390			rule.MatchingLanguages("Roff Manpage"),
391			rule.Or(
392				rule.MatchingLanguages(""),
393				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
394			),
395			rule.Or(
396				rule.MatchingLanguages(""),
397				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
398			),
399			rule.Or(
400				rule.MatchingLanguages(""),
401				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
402			),
403		),
404		rule.And(
405			rule.MatchingLanguages("Roff Manpage"),
406			rule.Or(
407				rule.MatchingLanguages(""),
408				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
409			),
410			rule.Or(
411				rule.MatchingLanguages(""),
412				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
413			),
414		),
415		rule.Or(
416			rule.MatchingLanguages("Roff"),
417			regexp.MustCompile(`(?m)^\.(?:[A-Za-z]{2}(?:\s|$)|\\")`),
418		),
419	},
420	".5": &Heuristics{
421		rule.And(
422			rule.MatchingLanguages("Roff Manpage"),
423			rule.Or(
424				rule.MatchingLanguages(""),
425				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
426			),
427			rule.Or(
428				rule.MatchingLanguages(""),
429				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
430			),
431			rule.Or(
432				rule.MatchingLanguages(""),
433				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
434			),
435		),
436		rule.And(
437			rule.MatchingLanguages("Roff Manpage"),
438			rule.Or(
439				rule.MatchingLanguages(""),
440				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
441			),
442			rule.Or(
443				rule.MatchingLanguages(""),
444				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
445			),
446		),
447		rule.Or(
448			rule.MatchingLanguages("Roff"),
449			regexp.MustCompile(`(?m)^\.(?:[A-Za-z]{2}(?:\s|$)|\\")`),
450		),
451	},
452	".6": &Heuristics{
453		rule.And(
454			rule.MatchingLanguages("Roff Manpage"),
455			rule.Or(
456				rule.MatchingLanguages(""),
457				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
458			),
459			rule.Or(
460				rule.MatchingLanguages(""),
461				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
462			),
463			rule.Or(
464				rule.MatchingLanguages(""),
465				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
466			),
467		),
468		rule.And(
469			rule.MatchingLanguages("Roff Manpage"),
470			rule.Or(
471				rule.MatchingLanguages(""),
472				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
473			),
474			rule.Or(
475				rule.MatchingLanguages(""),
476				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
477			),
478		),
479		rule.Or(
480			rule.MatchingLanguages("Roff"),
481			regexp.MustCompile(`(?m)^\.(?:[A-Za-z]{2}(?:\s|$)|\\")`),
482		),
483	},
484	".7": &Heuristics{
485		rule.And(
486			rule.MatchingLanguages("Roff Manpage"),
487			rule.Or(
488				rule.MatchingLanguages(""),
489				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
490			),
491			rule.Or(
492				rule.MatchingLanguages(""),
493				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
494			),
495			rule.Or(
496				rule.MatchingLanguages(""),
497				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
498			),
499		),
500		rule.And(
501			rule.MatchingLanguages("Roff Manpage"),
502			rule.Or(
503				rule.MatchingLanguages(""),
504				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
505			),
506			rule.Or(
507				rule.MatchingLanguages(""),
508				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
509			),
510		),
511		rule.Or(
512			rule.MatchingLanguages("Roff"),
513			regexp.MustCompile(`(?m)^\.(?:[A-Za-z]{2}(?:\s|$)|\\")`),
514		),
515	},
516	".8": &Heuristics{
517		rule.And(
518			rule.MatchingLanguages("Roff Manpage"),
519			rule.Or(
520				rule.MatchingLanguages(""),
521				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
522			),
523			rule.Or(
524				rule.MatchingLanguages(""),
525				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
526			),
527			rule.Or(
528				rule.MatchingLanguages(""),
529				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
530			),
531		),
532		rule.And(
533			rule.MatchingLanguages("Roff Manpage"),
534			rule.Or(
535				rule.MatchingLanguages(""),
536				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
537			),
538			rule.Or(
539				rule.MatchingLanguages(""),
540				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
541			),
542		),
543		rule.Or(
544			rule.MatchingLanguages("Roff"),
545			regexp.MustCompile(`(?m)^\.(?:[A-Za-z]{2}(?:\s|$)|\\")`),
546		),
547	},
548	".9": &Heuristics{
549		rule.And(
550			rule.MatchingLanguages("Roff Manpage"),
551			rule.Or(
552				rule.MatchingLanguages(""),
553				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
554			),
555			rule.Or(
556				rule.MatchingLanguages(""),
557				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
558			),
559			rule.Or(
560				rule.MatchingLanguages(""),
561				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
562			),
563		),
564		rule.And(
565			rule.MatchingLanguages("Roff Manpage"),
566			rule.Or(
567				rule.MatchingLanguages(""),
568				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
569			),
570			rule.Or(
571				rule.MatchingLanguages(""),
572				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
573			),
574		),
575		rule.Or(
576			rule.MatchingLanguages("Roff"),
577			regexp.MustCompile(`(?m)^\.(?:[A-Za-z]{2}(?:\s|$)|\\")`),
578		),
579	},
580	".al": &Heuristics{
581		rule.And(
582			rule.MatchingLanguages("AL"),
583			rule.Or(
584				rule.MatchingLanguages(""),
585				regexp.MustCompile(`(?m)\b(?i:(CODEUNIT|PAGE|PAGEEXTENSION|PAGECUSTOMIZATION|DOTNET|ENUM|ENUMEXTENSION|VALUE|QUERY|REPORT|TABLE|TABLEEXTENSION|XMLPORT|PROFILE|CONTROLADDIN))\b`),
586			),
587		),
588		rule.Always(
589			rule.MatchingLanguages("Perl"),
590		),
591	},
592	".as": &Heuristics{},
593	".asc": &Heuristics{
594		rule.Or(
595			rule.MatchingLanguages("Public Key"),
596			regexp.MustCompile(`(?m)^(----[- ]BEGIN|ssh-(rsa|dss)) `),
597		),
598		rule.Or(
599			rule.MatchingLanguages("AsciiDoc"),
600			regexp.MustCompile(`(?m)^[=-]+(\s|\n)|{{[A-Za-z]`),
601		),
602		rule.Or(
603			rule.MatchingLanguages("AGS Script"),
604			regexp.MustCompile(`(?m)^(\/\/.+|((import|export)\s+)?(function|int|float|char)\s+((room|repeatedly|on|game)_)?([A-Za-z]+[A-Za-z_0-9]+)\s*[;\(])`),
605		),
606	},
607	".asm": &Heuristics{
608		rule.Or(
609			rule.MatchingLanguages("Motorola 68K Assembly"),
610			regexp.MustCompile(`(?m)(?im)\bmoveq(?:\.l)?\s+#(?:\$-?[0-9a-f]{1,3}|%[0-1]{1,8}|-?[0-9]{1,3}),\s*d[0-7]\b|(?im)^\s*move(?:\.[bwl])?\s+(?:sr|usp),\s*[^\s]+|(?im)^\s*move\.[bwl]\s+.*\b[ad]\d|(?im)^\s*movem\.[bwl]\b|(?im)^\s*move[mp](?:\.[wl])?\b|(?im)^\s*btst\b|(?im)^\s*dbra\b`),
611		),
612	},
613	".asy": &Heuristics{
614		rule.Or(
615			rule.MatchingLanguages("LTspice Symbol"),
616			regexp.MustCompile(`(?m)^SymbolType[ \t]`),
617		),
618		rule.Always(
619			rule.MatchingLanguages("Asymptote"),
620		),
621	},
622	".bas": &Heuristics{
623		rule.Or(
624			rule.MatchingLanguages("FreeBasic"),
625			regexp.MustCompile(`(?m)^[ \t]*#(?:define|endif|endmacro|ifn?def|if|include|lang|macro)\s`),
626		),
627		rule.Or(
628			rule.MatchingLanguages("BASIC"),
629			regexp.MustCompile(`(?m)^\s*\d+`),
630		),
631	},
632	".bb": &Heuristics{
633		rule.Or(
634			rule.MatchingLanguages("BlitzBasic"),
635			regexp.MustCompile(`(?m)(<^\s*; |End Function)`),
636		),
637		rule.Or(
638			rule.MatchingLanguages("BitBake"),
639			regexp.MustCompile(`(?m)^\s*(# |include|require)\b`),
640		),
641	},
642	".bi": &Heuristics{
643		rule.Or(
644			rule.MatchingLanguages("FreeBasic"),
645			regexp.MustCompile(`(?m)^[ \t]*#(?:define|endif|endmacro|ifn?def|if|include|lang|macro)\s`),
646		),
647	},
648	".builds": &Heuristics{
649		rule.Or(
650			rule.MatchingLanguages("XML"),
651			regexp.MustCompile(`(?m)^(\s*)(?i:<Project|<Import|<Property|<?xml|xmlns)`),
652		),
653	},
654	".ch": &Heuristics{
655		rule.Or(
656			rule.MatchingLanguages("xBase"),
657			regexp.MustCompile(`(?m)^\s*#\s*(?i:if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b`),
658		),
659	},
660	".cl": &Heuristics{
661		rule.Or(
662			rule.MatchingLanguages("Common Lisp"),
663			regexp.MustCompile(`(?m)^\s*\((?i:defun|in-package|defpackage) `),
664		),
665		rule.Or(
666			rule.MatchingLanguages("Cool"),
667			regexp.MustCompile(`(?m)^class`),
668		),
669		rule.Or(
670			rule.MatchingLanguages("OpenCL"),
671			regexp.MustCompile(`(?m)\/\* |\/\/ |^\}`),
672		),
673	},
674	".cls": &Heuristics{
675		rule.Or(
676			rule.MatchingLanguages("TeX"),
677			regexp.MustCompile(`(?m)^\s*\\(?:NeedsTeXFormat|ProvidesClass){`),
678		),
679		rule.Or(
680			rule.MatchingLanguages("ObjectScript"),
681			regexp.MustCompile(`(?m)^Class\s`),
682		),
683	},
684	".cmp": &Heuristics{
685		rule.Or(
686			rule.MatchingLanguages("Gerber Image"),
687			regexp.MustCompile(`(?m)^[DGMT][0-9]{2}\*\r?\n`),
688		),
689	},
690	".cs": &Heuristics{
691		rule.Or(
692			rule.MatchingLanguages("Smalltalk"),
693			regexp.MustCompile(`(?m)![\w\s]+methodsFor: `),
694		),
695		rule.Or(
696			rule.MatchingLanguages("C#"),
697			regexp.MustCompile(`(?m)^(\s*namespace\s*[\w\.]+\s*{|\s*\/\/)`),
698		),
699	},
700	".csl": &Heuristics{
701		rule.Or(
702			rule.MatchingLanguages("XML"),
703			regexp.MustCompile(`(?m)(?i:^\s*(\<\?xml|xmlns))`),
704		),
705		rule.Or(
706			rule.MatchingLanguages("Kusto"),
707			regexp.MustCompile(`(?m)(^\|\s*(where|extend|project|limit|summarize))|(^\.\w+)`),
708		),
709	},
710	".d": &Heuristics{
711		rule.Or(
712			rule.MatchingLanguages("D"),
713			regexp.MustCompile(`(?m)^module\s+[\w.]*\s*;|import\s+[\w\s,.:]*;|\w+\s+\w+\s*\(.*\)(?:\(.*\))?\s*{[^}]*}|unittest\s*(?:\(.*\))?\s*{[^}]*}`),
714		),
715		rule.Or(
716			rule.MatchingLanguages("DTrace"),
717			regexp.MustCompile(`(?m)^(\w+:\w*:\w*:\w*|BEGIN|END|provider\s+|(tick|profile)-\w+\s+{[^}]*}|#pragma\s+D\s+(option|attributes|depends_on)\s|#pragma\s+ident\s)`),
718		),
719		rule.Or(
720			rule.MatchingLanguages("Makefile"),
721			regexp.MustCompile(`(?m)([\/\\].*:\s+.*\s\\$|: \\$|^[ %]:|^[\w\s\/\\.]+\w+\.\w+\s*:\s+[\w\s\/\\.]+\w+\.\w+)`),
722		),
723	},
724	".dsp": &Heuristics{
725		rule.Or(
726			rule.MatchingLanguages("Microsoft Developer Studio Project"),
727			regexp.MustCompile(`(?m)# Microsoft Developer Studio Generated Build File`),
728		),
729		rule.Or(
730			rule.MatchingLanguages("Faust"),
731			regexp.MustCompile(`(?m)\bprocess\s*[(=]|\b(library|import)\s*\(\s*"|\bdeclare\s+(name|version|author|copyright|license)\s+"`),
732		),
733	},
734	".ecl": &Heuristics{
735		rule.Or(
736			rule.MatchingLanguages("ECLiPSe"),
737			regexp.MustCompile(`(?m)^[^#]+:-`),
738		),
739		rule.Or(
740			rule.MatchingLanguages("ECL"),
741			regexp.MustCompile(`(?m):=`),
742		),
743	},
744	".es": &Heuristics{
745		rule.Or(
746			rule.MatchingLanguages("Erlang"),
747			regexp.MustCompile(`(?m)^\s*(?:%%|main\s*\(.*?\)\s*->)`),
748		),
749	},
750	".f": &Heuristics{
751		rule.Or(
752			rule.MatchingLanguages("Forth"),
753			regexp.MustCompile(`(?m)^: `),
754		),
755		rule.Or(
756			rule.MatchingLanguages("Filebench WML"),
757			regexp.MustCompile(`(?m)flowop`),
758		),
759		rule.Or(
760			rule.MatchingLanguages("Fortran"),
761			regexp.MustCompile(`(?m)^(?i:[c*][^abd-z]|      (subroutine|program|end|data)\s|\s*!)`),
762		),
763	},
764	".for": &Heuristics{
765		rule.Or(
766			rule.MatchingLanguages("Forth"),
767			regexp.MustCompile(`(?m)^: `),
768		),
769		rule.Or(
770			rule.MatchingLanguages("Fortran"),
771			regexp.MustCompile(`(?m)^(?i:[c*][^abd-z]|      (subroutine|program|end|data)\s|\s*!)`),
772		),
773	},
774	".fr": &Heuristics{
775		rule.Or(
776			rule.MatchingLanguages("Forth"),
777			regexp.MustCompile(`(?m)^(: |also |new-device|previous )`),
778		),
779		rule.Or(
780			rule.MatchingLanguages("Frege"),
781			regexp.MustCompile(`(?m)^\s*(import|module|package|data|type) `),
782		),
783		rule.Always(
784			rule.MatchingLanguages("Text"),
785		),
786	},
787	".fs": &Heuristics{
788		rule.Or(
789			rule.MatchingLanguages("Forth"),
790			regexp.MustCompile(`(?m)^(: |new-device)`),
791		),
792		rule.Or(
793			rule.MatchingLanguages("F#"),
794			regexp.MustCompile(`(?m)^\s*(#light|import|let|module|namespace|open|type)`),
795		),
796		rule.Or(
797			rule.MatchingLanguages("GLSL"),
798			regexp.MustCompile(`(?m)^\s*(#version|precision|uniform|varying|vec[234])`),
799		),
800		rule.Or(
801			rule.MatchingLanguages("Filterscript"),
802			regexp.MustCompile(`(?m)#include|#pragma\s+(rs|version)|__attribute__`),
803		),
804	},
805	".gd": &Heuristics{
806		rule.Or(
807			rule.MatchingLanguages("GAP"),
808			regexp.MustCompile(`(?m)\s*(Declare|BindGlobal|KeyDependentOperation)`),
809		),
810		rule.Or(
811			rule.MatchingLanguages("GDScript"),
812			regexp.MustCompile(`(?m)\s*(extends|var|const|enum|func|class|signal|tool|yield|assert|onready)`),
813		),
814	},
815	".gml": &Heuristics{
816		rule.Or(
817			rule.MatchingLanguages("XML"),
818			regexp.MustCompile(`(?m)(?i:^\s*(\<\?xml|xmlns))`),
819		),
820		rule.Or(
821			rule.MatchingLanguages("Graph Modeling Language"),
822			regexp.MustCompile(`(?m)(?i:^\s*(graph|node)\s+\[$)`),
823		),
824		rule.Or(
825			rule.MatchingLanguages("Gerber Image"),
826			regexp.MustCompile(`(?m)^[DGMT][0-9]{2}\*$`),
827		),
828		rule.Always(
829			rule.MatchingLanguages("Game Maker Language"),
830		),
831	},
832	".gs": &Heuristics{
833		rule.Or(
834			rule.MatchingLanguages("GLSL"),
835			regexp.MustCompile(`(?m)^#version\s+[0-9]+\b`),
836		),
837		rule.Or(
838			rule.MatchingLanguages("Gosu"),
839			regexp.MustCompile(`(?m)^uses (java|gw)\.`),
840		),
841		rule.Or(
842			rule.MatchingLanguages("Genie"),
843			regexp.MustCompile(`(?m)^\[indent=[0-9]+\]`),
844		),
845	},
846	".h": &Heuristics{
847		rule.Or(
848			rule.MatchingLanguages("Objective-C"),
849			regexp.MustCompile(`(?m)^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])`),
850		),
851		rule.Or(
852			rule.MatchingLanguages("C++"),
853			regexp.MustCompile(`(?m)^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>|^\s*template\s*<|^[ \t]*(try|constexpr)|^[ \t]*catch\s*\(|^[ \t]*(class|(using[ \t]+)?namespace)\s+\w+|^[ \t]*(private|public|protected):$|std::\w+`),
854		),
855	},
856	".hh": &Heuristics{
857		rule.Or(
858			rule.MatchingLanguages("Hack"),
859			regexp.MustCompile(`(?m)<\?hh`),
860		),
861	},
862	".i": &Heuristics{
863		rule.Or(
864			rule.MatchingLanguages("Motorola 68K Assembly"),
865			regexp.MustCompile(`(?m)(?im)\bmoveq(?:\.l)?\s+#(?:\$-?[0-9a-f]{1,3}|%[0-1]{1,8}|-?[0-9]{1,3}),\s*d[0-7]\b|(?im)^\s*move(?:\.[bwl])?\s+(?:sr|usp),\s*[^\s]+|(?im)^\s*move\.[bwl]\s+.*\b[ad]\d|(?im)^\s*movem\.[bwl]\b|(?im)^\s*move[mp](?:\.[wl])?\b|(?im)^\s*btst\b|(?im)^\s*dbra\b`),
866		),
867		rule.Or(
868			rule.MatchingLanguages("SWIG"),
869			regexp.MustCompile(`(?m)^[ \t]*%[a-z_]+\b|^%[{}]$`),
870		),
871	},
872	".ice": &Heuristics{
873		rule.Or(
874			rule.MatchingLanguages("JSON"),
875			regexp.MustCompile(`(?m)\A\s*[{\[]`),
876		),
877		rule.Always(
878			rule.MatchingLanguages("Slice"),
879		),
880	},
881	".inc": &Heuristics{
882		rule.Or(
883			rule.MatchingLanguages("Motorola 68K Assembly"),
884			regexp.MustCompile(`(?m)(?im)\bmoveq(?:\.l)?\s+#(?:\$-?[0-9a-f]{1,3}|%[0-1]{1,8}|-?[0-9]{1,3}),\s*d[0-7]\b|(?im)^\s*move(?:\.[bwl])?\s+(?:sr|usp),\s*[^\s]+|(?im)^\s*move\.[bwl]\s+.*\b[ad]\d|(?im)^\s*movem\.[bwl]\b|(?im)^\s*move[mp](?:\.[wl])?\b|(?im)^\s*btst\b|(?im)^\s*dbra\b`),
885		),
886		rule.Or(
887			rule.MatchingLanguages("PHP"),
888			regexp.MustCompile(`(?m)^<\?(?:php)?`),
889		),
890		rule.Or(
891			rule.MatchingLanguages("SourcePawn"),
892			regexp.MustCompile(`(?m)^public\s+(?:SharedPlugin(?:\s+|:)__pl_\w+\s*=(?:\s*{)?|(?:void\s+)?__pl_\w+_SetNTVOptional\(\)(?:\s*{)?)`),
893		),
894		rule.Or(
895			rule.MatchingLanguages("POV-Ray SDL"),
896			regexp.MustCompile(`(?m)^\s*#(declare|local|macro|while)\s`),
897		),
898	},
899	".l": &Heuristics{
900		rule.Or(
901			rule.MatchingLanguages("Common Lisp"),
902			regexp.MustCompile(`(?m)\(def(un|macro)\s`),
903		),
904		rule.Or(
905			rule.MatchingLanguages("Lex"),
906			regexp.MustCompile(`(?m)^(%[%{}]xs|<.*>)`),
907		),
908		rule.Or(
909			rule.MatchingLanguages("Roff"),
910			regexp.MustCompile(`(?m)^\.[A-Za-z]{2}(\s|$)`),
911		),
912		rule.Or(
913			rule.MatchingLanguages("PicoLisp"),
914			regexp.MustCompile(`(?m)^\((de|class|rel|code|data|must)\s`),
915		),
916	},
917	".lisp": &Heuristics{
918		rule.Or(
919			rule.MatchingLanguages("Common Lisp"),
920			regexp.MustCompile(`(?m)^\s*\((?i:defun|in-package|defpackage) `),
921		),
922		rule.Or(
923			rule.MatchingLanguages("NewLisp"),
924			regexp.MustCompile(`(?m)^\s*\(define `),
925		),
926	},
927	".ls": &Heuristics{
928		rule.Or(
929			rule.MatchingLanguages("LoomScript"),
930			regexp.MustCompile(`(?m)^\s*package\s*[\w\.\/\*\s]*\s*{`),
931		),
932		rule.Always(
933			rule.MatchingLanguages("LiveScript"),
934		),
935	},
936	".lsp": &Heuristics{
937		rule.Or(
938			rule.MatchingLanguages("Common Lisp"),
939			regexp.MustCompile(`(?m)^\s*\((?i:defun|in-package|defpackage) `),
940		),
941		rule.Or(
942			rule.MatchingLanguages("NewLisp"),
943			regexp.MustCompile(`(?m)^\s*\(define `),
944		),
945	},
946	".m": &Heuristics{
947		rule.Or(
948			rule.MatchingLanguages("Objective-C"),
949			regexp.MustCompile(`(?m)^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])`),
950		),
951		rule.Or(
952			rule.MatchingLanguages("Mercury"),
953			regexp.MustCompile(`(?m):- module`),
954		),
955		rule.Or(
956			rule.MatchingLanguages("MUF"),
957			regexp.MustCompile(`(?m)^: `),
958		),
959		rule.Or(
960			rule.MatchingLanguages("M"),
961			regexp.MustCompile(`(?m)^\s*;`),
962		),
963		rule.And(
964			rule.MatchingLanguages("Mathematica"),
965			rule.Or(
966				rule.MatchingLanguages(""),
967				regexp.MustCompile(`(?m)\(\*`),
968			),
969			rule.Or(
970				rule.MatchingLanguages(""),
971				regexp.MustCompile(`(?m)\*\)$`),
972			),
973		),
974		rule.Or(
975			rule.MatchingLanguages("MATLAB"),
976			regexp.MustCompile(`(?m)^\s*%`),
977		),
978		rule.Or(
979			rule.MatchingLanguages("Limbo"),
980			regexp.MustCompile(`(?m)^\w+\s*:\s*module\s*{`),
981		),
982	},
983	".m4": &Heuristics{
984		rule.Or(
985			rule.MatchingLanguages("M4Sugar"),
986			regexp.MustCompile(`(?m)AC_DEFUN|AC_PREREQ|AC_INIT|^_?m4_`),
987		),
988		rule.Always(
989			rule.MatchingLanguages("M4"),
990		),
991	},
992	".man": &Heuristics{
993		rule.And(
994			rule.MatchingLanguages("Roff Manpage"),
995			rule.Or(
996				rule.MatchingLanguages(""),
997				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
998			),
999			rule.Or(
1000				rule.MatchingLanguages(""),
1001				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
1002			),
1003			rule.Or(
1004				rule.MatchingLanguages(""),
1005				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
1006			),
1007		),
1008		rule.And(
1009			rule.MatchingLanguages("Roff Manpage"),
1010			rule.Or(
1011				rule.MatchingLanguages(""),
1012				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
1013			),
1014			rule.Or(
1015				rule.MatchingLanguages(""),
1016				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
1017			),
1018		),
1019		rule.Always(
1020			rule.MatchingLanguages("Roff"),
1021		),
1022	},
1023	".mask": &Heuristics{
1024		rule.Or(
1025			rule.MatchingLanguages("Unity3d Asset"),
1026			regexp.MustCompile(`(?m)tag:unity3d.com`),
1027		),
1028	},
1029	".md": &Heuristics{
1030		rule.Or(
1031			rule.MatchingLanguages("Markdown"),
1032			regexp.MustCompile(`(?m)(^[-A-Za-z0-9=#!\*\[|>])|<\/|\A\z`),
1033		),
1034		rule.Or(
1035			rule.MatchingLanguages("GCC Machine Description"),
1036			regexp.MustCompile(`(?m)^(;;|\(define_)`),
1037		),
1038		rule.Always(
1039			rule.MatchingLanguages("Markdown"),
1040		),
1041	},
1042	".mdoc": &Heuristics{
1043		rule.And(
1044			rule.MatchingLanguages("Roff Manpage"),
1045			rule.Or(
1046				rule.MatchingLanguages(""),
1047				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
1048			),
1049			rule.Or(
1050				rule.MatchingLanguages(""),
1051				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
1052			),
1053			rule.Or(
1054				rule.MatchingLanguages(""),
1055				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
1056			),
1057		),
1058		rule.And(
1059			rule.MatchingLanguages("Roff Manpage"),
1060			rule.Or(
1061				rule.MatchingLanguages(""),
1062				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
1063			),
1064			rule.Or(
1065				rule.MatchingLanguages(""),
1066				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
1067			),
1068		),
1069		rule.Always(
1070			rule.MatchingLanguages("Roff"),
1071		),
1072	},
1073	".ml": &Heuristics{
1074		rule.Or(
1075			rule.MatchingLanguages("OCaml"),
1076			regexp.MustCompile(`(?m)(^\s*module)|let rec |match\s+(\S+\s)+with`),
1077		),
1078		rule.Or(
1079			rule.MatchingLanguages("Standard ML"),
1080			regexp.MustCompile(`(?m)=> |case\s+(\S+\s)+of`),
1081		),
1082	},
1083	".mod": &Heuristics{
1084		rule.Or(
1085			rule.MatchingLanguages("XML"),
1086			regexp.MustCompile(`(?m)<!ENTITY `),
1087		),
1088		rule.Or(
1089			rule.MatchingLanguages("Modula-2"),
1090			regexp.MustCompile(`(?m)^\s*(?i:MODULE|END) [\w\.]+;`),
1091		),
1092		rule.Always(
1093			rule.MatchingLanguages("Linux Kernel Module", "AMPL"),
1094		),
1095	},
1096	".ms": &Heuristics{
1097		rule.Or(
1098			rule.MatchingLanguages("Roff"),
1099			regexp.MustCompile(`(?m)^[.'][A-Za-z]{2}(\s|$)`),
1100		),
1101		rule.And(
1102			rule.MatchingLanguages("Unix Assembly"),
1103			rule.Not(
1104				rule.MatchingLanguages(""),
1105				regexp.MustCompile(`(?m)/\*`),
1106			),
1107			rule.Or(
1108				rule.MatchingLanguages(""),
1109				regexp.MustCompile(`(?m)^\s*\.(?:include\s|globa?l\s|[A-Za-z][_A-Za-z0-9]*:)`),
1110			),
1111		),
1112		rule.Always(
1113			rule.MatchingLanguages("MAXScript"),
1114		),
1115	},
1116	".n": &Heuristics{
1117		rule.Or(
1118			rule.MatchingLanguages("Roff"),
1119			regexp.MustCompile(`(?m)^[.']`),
1120		),
1121		rule.Or(
1122			rule.MatchingLanguages("Nemerle"),
1123			regexp.MustCompile(`(?m)^(module|namespace|using)\s`),
1124		),
1125	},
1126	".ncl": &Heuristics{
1127		rule.Or(
1128			rule.MatchingLanguages("XML"),
1129			regexp.MustCompile(`(?m)^\s*<\?xml\s+version`),
1130		),
1131		rule.Or(
1132			rule.MatchingLanguages("Gerber Image"),
1133			regexp.MustCompile(`(?m)^[DGMT][0-9]{2}\*\r?\n`),
1134		),
1135		rule.Or(
1136			rule.MatchingLanguages("Text"),
1137			regexp.MustCompile(`(?m)THE_TITLE`),
1138		),
1139	},
1140	".nl": &Heuristics{
1141		rule.Or(
1142			rule.MatchingLanguages("NL"),
1143			regexp.MustCompile(`(?m)^(b|g)[0-9]+ `),
1144		),
1145		rule.Always(
1146			rule.MatchingLanguages("NewLisp"),
1147		),
1148	},
1149	".odin": &Heuristics{
1150		rule.Or(
1151			rule.MatchingLanguages("Object Data Instance Notation"),
1152			regexp.MustCompile(`(?m)(?:^|<)\s*[A-Za-z0-9_]+\s*=\s*<`),
1153		),
1154		rule.Or(
1155			rule.MatchingLanguages("Odin"),
1156			regexp.MustCompile(`(?m)package\s+\w+|\b(?:im|ex)port\s*"[\w:./]+"|\w+\s*::\s*(?:proc|struct)\s*\(|^\s*//\s`),
1157		),
1158	},
1159	".p": &Heuristics{
1160		rule.Or(
1161			rule.MatchingLanguages("Gnuplot"),
1162			regexp.MustCompile(`(?m)^s?plot\b|^set\s+(term|terminal|out|output|[xy]tics|[xy]label|[xy]range|style)\b`),
1163		),
1164		rule.Always(
1165			rule.MatchingLanguages("OpenEdge ABL"),
1166		),
1167	},
1168	".php": &Heuristics{
1169		rule.Or(
1170			rule.MatchingLanguages("Hack"),
1171			regexp.MustCompile(`(?m)<\?hh`),
1172		),
1173		rule.Or(
1174			rule.MatchingLanguages("PHP"),
1175			regexp.MustCompile(`(?m)<\?[^h]`),
1176		),
1177	},
1178	".pl": &Heuristics{
1179		rule.Or(
1180			rule.MatchingLanguages("Prolog"),
1181			regexp.MustCompile(`(?m)^[^#]*:-`),
1182		),
1183		rule.Or(
1184			rule.MatchingLanguages("Perl"),
1185			regexp.MustCompile(`(?m)\buse\s+(?:strict\b|v?5\.)`),
1186		),
1187		rule.Or(
1188			rule.MatchingLanguages("Raku"),
1189			regexp.MustCompile(`(?m)^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)`),
1190		),
1191	},
1192	".plist": &Heuristics{
1193		rule.Or(
1194			rule.MatchingLanguages("XML Property List"),
1195			regexp.MustCompile(`(?m)<!DOCTYPE\s+plist`),
1196		),
1197		rule.Always(
1198			rule.MatchingLanguages("OpenStep Property List"),
1199		),
1200	},
1201	".pm": &Heuristics{
1202		rule.Or(
1203			rule.MatchingLanguages("Perl"),
1204			regexp.MustCompile(`(?m)\buse\s+(?:strict\b|v?5\.)`),
1205		),
1206		rule.Or(
1207			rule.MatchingLanguages("Raku"),
1208			regexp.MustCompile(`(?m)^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)`),
1209		),
1210		rule.Or(
1211			rule.MatchingLanguages("X PixMap"),
1212			regexp.MustCompile(`(?m)^\s*\/\* XPM \*\/`),
1213		),
1214	},
1215	".pod": &Heuristics{
1216		rule.Or(
1217			rule.MatchingLanguages("Pod 6"),
1218			regexp.MustCompile(`(?m)^[\s&&[^\n]]*=(comment|begin pod|begin para|item\d+)`),
1219		),
1220		rule.Always(
1221			rule.MatchingLanguages("Pod"),
1222		),
1223	},
1224	".pp": &Heuristics{
1225		rule.Or(
1226			rule.MatchingLanguages("Pascal"),
1227			regexp.MustCompile(`(?m)^\s*end[.;]`),
1228		),
1229		rule.Or(
1230			rule.MatchingLanguages("Puppet"),
1231			regexp.MustCompile(`(?m)^\s+\w+\s+=>\s`),
1232		),
1233	},
1234	".pro": &Heuristics{
1235		rule.Or(
1236			rule.MatchingLanguages("Proguard"),
1237			regexp.MustCompile(`(?m)^-(include\b.*\.pro$|keep\b|keepclassmembers\b|keepattributes\b)`),
1238		),
1239		rule.Or(
1240			rule.MatchingLanguages("Prolog"),
1241			regexp.MustCompile(`(?m)^[^\[#]+:-`),
1242		),
1243		rule.Or(
1244			rule.MatchingLanguages("INI"),
1245			regexp.MustCompile(`(?m)last_client=`),
1246		),
1247		rule.And(
1248			rule.MatchingLanguages("QMake"),
1249			rule.Or(
1250				rule.MatchingLanguages(""),
1251				regexp.MustCompile(`(?m)HEADERS`),
1252			),
1253			rule.Or(
1254				rule.MatchingLanguages(""),
1255				regexp.MustCompile(`(?m)SOURCES`),
1256			),
1257		),
1258		rule.Or(
1259			rule.MatchingLanguages("IDL"),
1260			regexp.MustCompile(`(?m)^\s*function[ \w,]+$`),
1261		),
1262	},
1263	".properties": &Heuristics{
1264		rule.And(
1265			rule.MatchingLanguages("INI"),
1266			rule.Or(
1267				rule.MatchingLanguages(""),
1268				regexp.MustCompile(`(?m)^[^#!;][^=]*=`),
1269			),
1270			rule.Or(
1271				rule.MatchingLanguages(""),
1272				regexp.MustCompile(`(?m)^[;\[]`),
1273			),
1274		),
1275		rule.And(
1276			rule.MatchingLanguages("Java Properties"),
1277			rule.Or(
1278				rule.MatchingLanguages(""),
1279				regexp.MustCompile(`(?m)^[^#!;][^=]*=`),
1280			),
1281			rule.Or(
1282				rule.MatchingLanguages(""),
1283				regexp.MustCompile(`(?m)^[#!]`),
1284			),
1285		),
1286		rule.Or(
1287			rule.MatchingLanguages("INI"),
1288			regexp.MustCompile(`(?m)^[^#!;][^=]*=`),
1289		),
1290		rule.Or(
1291			rule.MatchingLanguages("Java properties"),
1292			regexp.MustCompile(`(?m)^[^#!][^:]*:`),
1293		),
1294	},
1295	".q": &Heuristics{
1296		rule.Or(
1297			rule.MatchingLanguages("q"),
1298			regexp.MustCompile(`(?m)((?i:[A-Z.][\w.]*:{)|(^|\n)\\(cd?|d|l|p|ts?) )`),
1299		),
1300		rule.Or(
1301			rule.MatchingLanguages("HiveQL"),
1302			regexp.MustCompile(`(?m)(?i:SELECT\s+[\w*,]+\s+FROM|(CREATE|ALTER|DROP)\s(DATABASE|SCHEMA|TABLE))`),
1303		),
1304	},
1305	".qs": &Heuristics{
1306		rule.Or(
1307			rule.MatchingLanguages("Q#"),
1308			regexp.MustCompile(`(?m)^((\/{2,3})?\s*(namespace|operation)\b)`),
1309		),
1310		rule.Or(
1311			rule.MatchingLanguages("Qt Script"),
1312			regexp.MustCompile(`(?m)(\w+\.prototype\.\w+|===|\bvar\b)`),
1313		),
1314	},
1315	".r": &Heuristics{
1316		rule.Or(
1317			rule.MatchingLanguages("Rebol"),
1318			regexp.MustCompile(`(?m)(?i:\bRebol\b)`),
1319		),
1320		rule.Or(
1321			rule.MatchingLanguages("R"),
1322			regexp.MustCompile(`(?m)<-|^\s*#`),
1323		),
1324	},
1325	".re": &Heuristics{
1326		rule.Or(
1327			rule.MatchingLanguages("Reason"),
1328			regexp.MustCompile(`(?m)^\s*module\s+type\s|^\s*(?:include|open)\s+\w+\s*;\s*$|^\s*let\s+(?:module\s\w+\s*=\s*{|\w+:\s+.*=.*;\s*$)`),
1329		),
1330		rule.Or(
1331			rule.MatchingLanguages("C++"),
1332			regexp.MustCompile(`(?m)^\s*#(?:(?:if|ifdef|define|pragma)\s+\w|\s*include\s+<[^>]+>)|^\s*template\s*<`),
1333		),
1334	},
1335	".res": &Heuristics{
1336		rule.Or(
1337			rule.MatchingLanguages("ReScript"),
1338			regexp.MustCompile(`(?m)^\s*(let|module|type)\s+\w*\s+=\s+|^\s*(?:include|open)\s+\w+\s*$`),
1339		),
1340	},
1341	".rno": &Heuristics{
1342		rule.Or(
1343			rule.MatchingLanguages("Roff"),
1344			regexp.MustCompile(`(?m)^\.\\" `),
1345		),
1346	},
1347	".rpy": &Heuristics{
1348		rule.Or(
1349			rule.MatchingLanguages("Python"),
1350			regexp.MustCompile(`(?m)(?m:^(import|from|class|def)\s)`),
1351		),
1352		rule.Always(
1353			rule.MatchingLanguages("Ren'Py"),
1354		),
1355	},
1356	".rs": &Heuristics{
1357		rule.Or(
1358			rule.MatchingLanguages("Rust"),
1359			regexp.MustCompile(`(?m)^(use |fn |mod |pub |macro_rules|impl|#!?\[)`),
1360		),
1361		rule.Or(
1362			rule.MatchingLanguages("RenderScript"),
1363			regexp.MustCompile(`(?m)#include|#pragma\s+(rs|version)|__attribute__`),
1364		),
1365		rule.Or(
1366			rule.MatchingLanguages("XML"),
1367			regexp.MustCompile(`(?m)^\s*<\?xml`),
1368		),
1369	},
1370	".s": &Heuristics{
1371		rule.Or(
1372			rule.MatchingLanguages("Motorola 68K Assembly"),
1373			regexp.MustCompile(`(?m)(?im)\bmoveq(?:\.l)?\s+#(?:\$-?[0-9a-f]{1,3}|%[0-1]{1,8}|-?[0-9]{1,3}),\s*d[0-7]\b|(?im)^\s*move(?:\.[bwl])?\s+(?:sr|usp),\s*[^\s]+|(?im)^\s*move\.[bwl]\s+.*\b[ad]\d|(?im)^\s*movem\.[bwl]\b|(?im)^\s*move[mp](?:\.[wl])?\b|(?im)^\s*btst\b|(?im)^\s*dbra\b`),
1374		),
1375	},
1376	".sc": &Heuristics{
1377		rule.Or(
1378			rule.MatchingLanguages("SuperCollider"),
1379			regexp.MustCompile(`(?m)(?i:\^(this|super)\.|^\s*~\w+\s*=\.)`),
1380		),
1381		rule.Or(
1382			rule.MatchingLanguages("Scala"),
1383			regexp.MustCompile(`(?m)(^\s*import (scala|java)\.|^\s*class\b)`),
1384		),
1385	},
1386	".sol": &Heuristics{
1387		rule.Or(
1388			rule.MatchingLanguages("Gerber Image"),
1389			regexp.MustCompile(`(?m)^[DGMT][0-9]{2}\*\r?\n`),
1390		),
1391	},
1392	".sql": &Heuristics{
1393		rule.Or(
1394			rule.MatchingLanguages("PLpgSQL"),
1395			regexp.MustCompile(`(?m)(?i:^\\i\b|AS\s+\$\$|LANGUAGE\s+'?plpgsql'?|BEGIN(\s+WORK)?\s*;)`),
1396		),
1397		rule.Or(
1398			rule.MatchingLanguages("SQLPL"),
1399			regexp.MustCompile(`(?m)(?i:ALTER\s+MODULE|MODE\s+DB2SQL|\bSYS(CAT|PROC)\.|ASSOCIATE\s+RESULT\s+SET|\bEND!\s*$)`),
1400		),
1401		rule.Or(
1402			rule.MatchingLanguages("PLSQL"),
1403			regexp.MustCompile(`(?m)(?i:\$\$PLSQL_|XMLTYPE|systimestamp|\.nextval|CONNECT\s+BY|AUTHID\s+(DEFINER|CURRENT_USER)|constructor\W+function)`),
1404		),
1405		rule.Or(
1406			rule.MatchingLanguages("TSQL"),
1407			regexp.MustCompile(`(?m)(?i:^\s*GO\b|BEGIN(\s+TRY|\s+CATCH)|OUTPUT\s+INSERTED|DECLARE\s+@|\[dbo\])`),
1408		),
1409		rule.Always(
1410			rule.MatchingLanguages("SQL"),
1411		),
1412	},
1413	".srt": &Heuristics{
1414		rule.Or(
1415			rule.MatchingLanguages("SubRip Text"),
1416			regexp.MustCompile(`(?m)^(\d{2}:\d{2}:\d{2},\d{3})\s*(-->)\s*(\d{2}:\d{2}:\d{2},\d{3})$`),
1417		),
1418	},
1419	".st": &Heuristics{
1420		rule.Or(
1421			rule.MatchingLanguages("Smalltalk"),
1422			regexp.MustCompile(`(?m)\A\s*[\[{(^"'\w#]|[a-zA-Z_]\w*\s*:=\s*[a-zA-Z_]\w*|class\s*>>\s*[a-zA-Z_]\w*|^[a-zA-Z_]\w*\s+[a-zA-Z_]\w*:|^Class\s*{|if(?:True|False):\s*\[`),
1423		),
1424	},
1425	".t": &Heuristics{
1426		rule.Or(
1427			rule.MatchingLanguages("Perl"),
1428			regexp.MustCompile(`(?m)\buse\s+(?:strict\b|v?5\.)`),
1429		),
1430		rule.Or(
1431			rule.MatchingLanguages("Raku"),
1432			regexp.MustCompile(`(?m)^\s*(?:use\s+v6\b|\bmodule\b|\bmy\s+class\b)`),
1433		),
1434		rule.Or(
1435			rule.MatchingLanguages("Turing"),
1436			regexp.MustCompile(`(?m)^\s*%[ \t]+|^\s*var\s+\w+(\s*:\s*\w+)?\s*:=\s*\w+`),
1437		),
1438	},
1439	".toc": &Heuristics{
1440		rule.Or(
1441			rule.MatchingLanguages("World of Warcraft Addon Data"),
1442			regexp.MustCompile(`(?m)^## |@no-lib-strip@`),
1443		),
1444		rule.Or(
1445			rule.MatchingLanguages("TeX"),
1446			regexp.MustCompile(`(?m)^\\(contentsline|defcounter|beamer|boolfalse)`),
1447		),
1448	},
1449	".ts": &Heuristics{
1450		rule.Or(
1451			rule.MatchingLanguages("XML"),
1452			regexp.MustCompile(`(?m)<TS\b`),
1453		),
1454		rule.Always(
1455			rule.MatchingLanguages("TypeScript"),
1456		),
1457	},
1458	".tst": &Heuristics{
1459		rule.Or(
1460			rule.MatchingLanguages("GAP"),
1461			regexp.MustCompile(`(?m)gap> `),
1462		),
1463		rule.Always(
1464			rule.MatchingLanguages("Scilab"),
1465		),
1466	},
1467	".tsx": &Heuristics{
1468		rule.Or(
1469			rule.MatchingLanguages("TSX"),
1470			regexp.MustCompile(`(?m)^\s*(import.+(from\s+|require\()['"]react|\/\/\/\s*<reference\s)`),
1471		),
1472		rule.Or(
1473			rule.MatchingLanguages("XML"),
1474			regexp.MustCompile(`(?m)(?i:^\s*<\?xml\s+version)`),
1475		),
1476	},
1477	".txt": &Heuristics{
1478		rule.Always(
1479			rule.MatchingLanguages("Text"),
1480		),
1481	},
1482	".v": &Heuristics{
1483		rule.Or(
1484			rule.MatchingLanguages("Coq"),
1485			regexp.MustCompile(`(?m)(?:^|\s)(?:Proof|Qed)\.(?:$|\s)|(?:^|\s)Require[ \t]+(Import|Export)\s`),
1486		),
1487		rule.Or(
1488			rule.MatchingLanguages("Verilog"),
1489			regexp.MustCompile(`(?m)^[ \t]*module\s+[^\s()]+\s+\#?\(|^[ \t]*`+"`"+`(?:define|ifdef|ifndef|include|timescale)|^[ \t]*always[ \t]+@|^[ \t]*initial[ \t]+(begin|@)`),
1490		),
1491		rule.Or(
1492			rule.MatchingLanguages("V"),
1493			regexp.MustCompile(`(?m)\$(?:if|else)[ \t]|^[ \t]*fn\s+[^\s()]+\(.*?\).*?\{|^[ \t]*for\s*\{`),
1494		),
1495	},
1496	".vba": &Heuristics{
1497		rule.Or(
1498			rule.MatchingLanguages("Vim script"),
1499			regexp.MustCompile(`(?m)^UseVimball`),
1500		),
1501		rule.Always(
1502			rule.MatchingLanguages("VBA"),
1503		),
1504	},
1505	".w": &Heuristics{
1506		rule.Or(
1507			rule.MatchingLanguages("OpenEdge ABL"),
1508			regexp.MustCompile(`(?m)&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS`),
1509		),
1510		rule.Or(
1511			rule.MatchingLanguages("CWeb"),
1512			regexp.MustCompile(`(?m)^@(<|\w+\.)`),
1513		),
1514	},
1515	".x": &Heuristics{
1516		rule.Or(
1517			rule.MatchingLanguages("DirectX 3D File"),
1518			regexp.MustCompile(`(?m)^xof 030(2|3)(?:txt|bin|tzip|bzip)\b`),
1519		),
1520		rule.Or(
1521			rule.MatchingLanguages("RPC"),
1522			regexp.MustCompile(`(?m)\b(program|version)\s+\w+\s*{|\bunion\s+\w+\s+switch\s*\(`),
1523		),
1524		rule.Or(
1525			rule.MatchingLanguages("Logos"),
1526			regexp.MustCompile(`(?m)^%(end|ctor|hook|group)\b`),
1527		),
1528		rule.Or(
1529			rule.MatchingLanguages("Linker Script"),
1530			regexp.MustCompile(`(?m)OUTPUT_ARCH\(|OUTPUT_FORMAT\(|SECTIONS`),
1531		),
1532	},
1533	".yy": &Heuristics{
1534		rule.Or(
1535			rule.MatchingLanguages("JSON"),
1536			regexp.MustCompile(`(?m)\"modelName\"\:\s*\"GM`),
1537		),
1538		rule.Always(
1539			rule.MatchingLanguages("Yacc"),
1540		),
1541	},
1542}
1543