git.templeos.me/xultist/go-enry/v2@v2.0.0-20230215093429-6ef3e87f47c0/internal/code-generator/generator/test_files/content.gold (about)

     1  // Code generated by github.com/go-enry/go-enry/v2/internal/code-generator DO NOT EDIT.
     2  // Extracted from github/linguist commit: d7799da826e01acdb8f84694d33116dccaabe9c2
     3  
     4  package data
     5  
     6  import (
     7  	"regexp"
     8  
     9  	"github.com/go-enry/go-enry/v2/data/rule"
    10  )
    11  
    12  var 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  		rule.Or(
   642  			rule.MatchingLanguages("Clojure"),
   643  			regexp.MustCompile(`(?m)\((def|defn|defmacro|let)\s`),
   644  		),
   645  	},
   646  	".bi": &Heuristics{
   647  		rule.Or(
   648  			rule.MatchingLanguages("FreeBasic"),
   649  			regexp.MustCompile(`(?m)^[ \t]*#(?:define|endif|endmacro|ifn?def|if|include|lang|macro)\s`),
   650  		),
   651  	},
   652  	".bs": &Heuristics{},
   653  	".builds": &Heuristics{
   654  		rule.Or(
   655  			rule.MatchingLanguages("XML"),
   656  			regexp.MustCompile(`(?m)^(\s*)(?i:<Project|<Import|<Property|<?xml|xmlns)`),
   657  		),
   658  	},
   659  	".ch": &Heuristics{
   660  		rule.Or(
   661  			rule.MatchingLanguages("xBase"),
   662  			regexp.MustCompile(`(?m)^\s*#\s*(?i:if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b`),
   663  		),
   664  	},
   665  	".cl": &Heuristics{
   666  		rule.Or(
   667  			rule.MatchingLanguages("Common Lisp"),
   668  			regexp.MustCompile(`(?m)^\s*\((?i:defun|in-package|defpackage) `),
   669  		),
   670  		rule.Or(
   671  			rule.MatchingLanguages("Cool"),
   672  			regexp.MustCompile(`(?m)^class`),
   673  		),
   674  		rule.Or(
   675  			rule.MatchingLanguages("OpenCL"),
   676  			regexp.MustCompile(`(?m)\/\* |\/\/ |^\}`),
   677  		),
   678  	},
   679  	".cls": &Heuristics{
   680  		rule.Or(
   681  			rule.MatchingLanguages("TeX"),
   682  			regexp.MustCompile(`(?m)^\s*\\(?:NeedsTeXFormat|ProvidesClass){`),
   683  		),
   684  		rule.Or(
   685  			rule.MatchingLanguages("ObjectScript"),
   686  			regexp.MustCompile(`(?m)^Class\s`),
   687  		),
   688  	},
   689  	".cmp": &Heuristics{
   690  		rule.Or(
   691  			rule.MatchingLanguages("Gerber Image"),
   692  			regexp.MustCompile(`(?m)^[DGMT][0-9]{2}\*\r?\n`),
   693  		),
   694  	},
   695  	".cs": &Heuristics{
   696  		rule.Or(
   697  			rule.MatchingLanguages("Smalltalk"),
   698  			regexp.MustCompile(`(?m)![\w\s]+methodsFor: `),
   699  		),
   700  		rule.Or(
   701  			rule.MatchingLanguages("C#"),
   702  			regexp.MustCompile(`(?m)^(\s*namespace\s*[\w\.]+\s*{|\s*\/\/)`),
   703  		),
   704  	},
   705  	".csc": &Heuristics{},
   706  	".csl": &Heuristics{
   707  		rule.Or(
   708  			rule.MatchingLanguages("XML"),
   709  			regexp.MustCompile(`(?m)(?i:^\s*(\<\?xml|xmlns))`),
   710  		),
   711  		rule.Or(
   712  			rule.MatchingLanguages("Kusto"),
   713  			regexp.MustCompile(`(?m)(^\|\s*(where|extend|project|limit|summarize))|(^\.\w+)`),
   714  		),
   715  	},
   716  	".d": &Heuristics{
   717  		rule.Or(
   718  			rule.MatchingLanguages("D"),
   719  			regexp.MustCompile(`(?m)^module\s+[\w.]*\s*;|import\s+[\w\s,.:]*;|\w+\s+\w+\s*\(.*\)(?:\(.*\))?\s*{[^}]*}|unittest\s*(?:\(.*\))?\s*{[^}]*}`),
   720  		),
   721  		rule.Or(
   722  			rule.MatchingLanguages("DTrace"),
   723  			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)`),
   724  		),
   725  		rule.Or(
   726  			rule.MatchingLanguages("Makefile"),
   727  			regexp.MustCompile(`(?m)([\/\\].*:\s+.*\s\\$|: \\$|^[ %]:|^[\w\s\/\\.]+\w+\.\w+\s*:\s+[\w\s\/\\.]+\w+\.\w+)`),
   728  		),
   729  	},
   730  	".dsp": &Heuristics{
   731  		rule.Or(
   732  			rule.MatchingLanguages("Microsoft Developer Studio Project"),
   733  			regexp.MustCompile(`(?m)# Microsoft Developer Studio Generated Build File`),
   734  		),
   735  		rule.Or(
   736  			rule.MatchingLanguages("Faust"),
   737  			regexp.MustCompile(`(?m)\bprocess\s*[(=]|\b(library|import)\s*\(\s*"|\bdeclare\s+(name|version|author|copyright|license)\s+"`),
   738  		),
   739  	},
   740  	".e": &Heuristics{
   741  		rule.Or(
   742  			rule.MatchingLanguages("E"),
   743  			regexp.MustCompile(`(?m)^\s*(def|var)\s+(.+):=|^\s*(def|to)\s+(\w+)(\(.+\))?\s+{|^\s*(when)\s+(\(.+\))\s+->\s+{`),
   744  		),
   745  		rule.Or(
   746  			rule.MatchingLanguages("Eiffel"),
   747  			regexp.MustCompile(`(?m)^\s*\w+\s*(?:,\s*\w+)*[:]\s*\w+\s|^\s*\w+\s*(?:\(\s*\w+[:][^)]+\))?(?:[:]\s*\w+)?(?:--.+\s+)*\s+(?:do|local)\s|^\s*(?:across|deferred|elseif|ensure|feature|from|inherit|inspect|invariant|note|once|require|undefine|variant|when)\s*$`),
   748  		),
   749  		rule.Or(
   750  			rule.MatchingLanguages("Euphoria"),
   751  			regexp.MustCompile(`(?m)^\s*namespace\s|^\s*(?:public\s+)?include\s|^\s*(?:(?:public|export|global)\s+)?(?:atom|constant|enum|function|integer|object|procedure|sequence|type)\s`),
   752  		),
   753  	},
   754  	".ecl": &Heuristics{
   755  		rule.Or(
   756  			rule.MatchingLanguages("ECLiPSe"),
   757  			regexp.MustCompile(`(?m)^[^#]+:-`),
   758  		),
   759  		rule.Or(
   760  			rule.MatchingLanguages("ECL"),
   761  			regexp.MustCompile(`(?m):=`),
   762  		),
   763  	},
   764  	".es": &Heuristics{
   765  		rule.Or(
   766  			rule.MatchingLanguages("Erlang"),
   767  			regexp.MustCompile(`(?m)^\s*(?:%%|main\s*\(.*?\)\s*->)`),
   768  		),
   769  	},
   770  	".ex": &Heuristics{
   771  		rule.Or(
   772  			rule.MatchingLanguages("Elixir"),
   773  			regexp.MustCompile(`(?m)^\s*@moduledoc\s|^\s*(?:cond|import|quote|unless)\s|^\s*def(?:exception|impl|macro|module|protocol)[(\s]`),
   774  		),
   775  		rule.Or(
   776  			rule.MatchingLanguages("Euphoria"),
   777  			regexp.MustCompile(`(?m)^\s*namespace\s|^\s*(?:public\s+)?include\s|^\s*(?:(?:public|export|global)\s+)?(?:atom|constant|enum|function|integer|object|procedure|sequence|type)\s`),
   778  		),
   779  	},
   780  	".f": &Heuristics{
   781  		rule.Or(
   782  			rule.MatchingLanguages("Forth"),
   783  			regexp.MustCompile(`(?m)^: `),
   784  		),
   785  		rule.Or(
   786  			rule.MatchingLanguages("Filebench WML"),
   787  			regexp.MustCompile(`(?m)flowop`),
   788  		),
   789  		rule.Or(
   790  			rule.MatchingLanguages("Fortran"),
   791  			regexp.MustCompile(`(?m)^(?i:[c*][^abd-z]|      (subroutine|program|end|data)\s|\s*!)`),
   792  		),
   793  	},
   794  	".for": &Heuristics{
   795  		rule.Or(
   796  			rule.MatchingLanguages("Forth"),
   797  			regexp.MustCompile(`(?m)^: `),
   798  		),
   799  		rule.Or(
   800  			rule.MatchingLanguages("Fortran"),
   801  			regexp.MustCompile(`(?m)^(?i:[c*][^abd-z]|      (subroutine|program|end|data)\s|\s*!)`),
   802  		),
   803  	},
   804  	".fr": &Heuristics{
   805  		rule.Or(
   806  			rule.MatchingLanguages("Forth"),
   807  			regexp.MustCompile(`(?m)^(: |also |new-device|previous )`),
   808  		),
   809  		rule.Or(
   810  			rule.MatchingLanguages("Frege"),
   811  			regexp.MustCompile(`(?m)^\s*(import|module|package|data|type) `),
   812  		),
   813  		rule.Always(
   814  			rule.MatchingLanguages("Text"),
   815  		),
   816  	},
   817  	".fs": &Heuristics{
   818  		rule.Or(
   819  			rule.MatchingLanguages("Forth"),
   820  			regexp.MustCompile(`(?m)^(: |new-device)`),
   821  		),
   822  		rule.Or(
   823  			rule.MatchingLanguages("F#"),
   824  			regexp.MustCompile(`(?m)^\s*(#light|import|let|module|namespace|open|type)`),
   825  		),
   826  		rule.Or(
   827  			rule.MatchingLanguages("GLSL"),
   828  			regexp.MustCompile(`(?m)^\s*(#version|precision|uniform|varying|vec[234])`),
   829  		),
   830  		rule.Or(
   831  			rule.MatchingLanguages("Filterscript"),
   832  			regexp.MustCompile(`(?m)#include|#pragma\s+(rs|version)|__attribute__`),
   833  		),
   834  	},
   835  	".ftl": &Heuristics{
   836  		rule.Or(
   837  			rule.MatchingLanguages("Fluent"),
   838  			regexp.MustCompile(`(?m)^-?[a-zA-Z][a-zA-Z0-9_-]* *=|\{\$-?[a-zA-Z][-\w]*(?:\.[a-zA-Z][-\w]*)?\}`),
   839  		),
   840  	},
   841  	".gd": &Heuristics{
   842  		rule.Or(
   843  			rule.MatchingLanguages("GAP"),
   844  			regexp.MustCompile(`(?m)\s*(Declare|BindGlobal|KeyDependentOperation)`),
   845  		),
   846  		rule.Or(
   847  			rule.MatchingLanguages("GDScript"),
   848  			regexp.MustCompile(`(?m)\s*(extends|var|const|enum|func|class|signal|tool|yield|assert|onready)`),
   849  		),
   850  	},
   851  	".gml": &Heuristics{
   852  		rule.Or(
   853  			rule.MatchingLanguages("XML"),
   854  			regexp.MustCompile(`(?m)(?i:^\s*(\<\?xml|xmlns))`),
   855  		),
   856  		rule.Or(
   857  			rule.MatchingLanguages("Graph Modeling Language"),
   858  			regexp.MustCompile(`(?m)(?i:^\s*(graph|node)\s+\[$)`),
   859  		),
   860  		rule.Or(
   861  			rule.MatchingLanguages("Gerber Image"),
   862  			regexp.MustCompile(`(?m)^[DGMT][0-9]{2}\*$`),
   863  		),
   864  		rule.Always(
   865  			rule.MatchingLanguages("Game Maker Language"),
   866  		),
   867  	},
   868  	".gs": &Heuristics{
   869  		rule.Or(
   870  			rule.MatchingLanguages("GLSL"),
   871  			regexp.MustCompile(`(?m)^#version\s+[0-9]+\b`),
   872  		),
   873  		rule.Or(
   874  			rule.MatchingLanguages("Gosu"),
   875  			regexp.MustCompile(`(?m)^uses (java|gw)\.`),
   876  		),
   877  		rule.Or(
   878  			rule.MatchingLanguages("Genie"),
   879  			regexp.MustCompile(`(?m)^\[indent=[0-9]+\]`),
   880  		),
   881  	},
   882  	".gsc": &Heuristics{},
   883  	".gsh": &Heuristics{},
   884  	".h": &Heuristics{
   885  		rule.Or(
   886  			rule.MatchingLanguages("Objective-C"),
   887  			regexp.MustCompile(`(?m)^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])`),
   888  		),
   889  		rule.Or(
   890  			rule.MatchingLanguages("C++"),
   891  			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+`),
   892  		),
   893  		rule.Always(
   894  			rule.MatchingLanguages("C"),
   895  		),
   896  	},
   897  	".hh": &Heuristics{
   898  		rule.Or(
   899  			rule.MatchingLanguages("Hack"),
   900  			regexp.MustCompile(`(?m)<\?hh`),
   901  		),
   902  	},
   903  	".i": &Heuristics{
   904  		rule.Or(
   905  			rule.MatchingLanguages("Motorola 68K Assembly"),
   906  			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`),
   907  		),
   908  		rule.Or(
   909  			rule.MatchingLanguages("SWIG"),
   910  			regexp.MustCompile(`(?m)^[ \t]*%[a-z_]+\b|^%[{}]$`),
   911  		),
   912  	},
   913  	".ice": &Heuristics{
   914  		rule.Or(
   915  			rule.MatchingLanguages("JSON"),
   916  			regexp.MustCompile(`(?m)\A\s*[{\[]`),
   917  		),
   918  		rule.Always(
   919  			rule.MatchingLanguages("Slice"),
   920  		),
   921  	},
   922  	".inc": &Heuristics{
   923  		rule.Or(
   924  			rule.MatchingLanguages("Motorola 68K Assembly"),
   925  			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`),
   926  		),
   927  		rule.Or(
   928  			rule.MatchingLanguages("PHP"),
   929  			regexp.MustCompile(`(?m)^<\?(?:php)?`),
   930  		),
   931  		rule.Or(
   932  			rule.MatchingLanguages("SourcePawn"),
   933  			regexp.MustCompile(`(?m)^public\s+(?:SharedPlugin(?:\s+|:)__pl_\w+\s*=(?:\s*{)?|(?:void\s+)?__pl_\w+_SetNTVOptional\(\)(?:\s*{)?)|^methodmap\s+\w+\s+<\s+\w+|^\s*MarkNativeAsOptional\s*\(`),
   934  		),
   935  		rule.Or(
   936  			rule.MatchingLanguages("POV-Ray SDL"),
   937  			regexp.MustCompile(`(?m)^\s*#(declare|local|macro|while)\s`),
   938  		),
   939  		rule.Or(
   940  			rule.MatchingLanguages("Pascal"),
   941  			regexp.MustCompile(`(?m)(?i:^\s*{\$(?:mode|ifdef|undef|define)[ ]+[a-z0-9_]+})|^\s*end[.;]\s*$`),
   942  		),
   943  	},
   944  	".l": &Heuristics{
   945  		rule.Or(
   946  			rule.MatchingLanguages("Common Lisp"),
   947  			regexp.MustCompile(`(?m)\(def(un|macro)\s`),
   948  		),
   949  		rule.Or(
   950  			rule.MatchingLanguages("Lex"),
   951  			regexp.MustCompile(`(?m)^(%[%{}]xs|<.*>)`),
   952  		),
   953  		rule.Or(
   954  			rule.MatchingLanguages("Roff"),
   955  			regexp.MustCompile(`(?m)^\.[A-Za-z]{2}(\s|$)`),
   956  		),
   957  		rule.Or(
   958  			rule.MatchingLanguages("PicoLisp"),
   959  			regexp.MustCompile(`(?m)^\((de|class|rel|code|data|must)\s`),
   960  		),
   961  	},
   962  	".lisp": &Heuristics{
   963  		rule.Or(
   964  			rule.MatchingLanguages("Common Lisp"),
   965  			regexp.MustCompile(`(?m)^\s*\((?i:defun|in-package|defpackage) `),
   966  		),
   967  		rule.Or(
   968  			rule.MatchingLanguages("NewLisp"),
   969  			regexp.MustCompile(`(?m)^\s*\(define `),
   970  		),
   971  	},
   972  	".ls": &Heuristics{
   973  		rule.Or(
   974  			rule.MatchingLanguages("LoomScript"),
   975  			regexp.MustCompile(`(?m)^\s*package\s*[\w\.\/\*\s]*\s*{`),
   976  		),
   977  		rule.Always(
   978  			rule.MatchingLanguages("LiveScript"),
   979  		),
   980  	},
   981  	".lsp": &Heuristics{
   982  		rule.Or(
   983  			rule.MatchingLanguages("Common Lisp"),
   984  			regexp.MustCompile(`(?m)^\s*\((?i:defun|in-package|defpackage) `),
   985  		),
   986  		rule.Or(
   987  			rule.MatchingLanguages("NewLisp"),
   988  			regexp.MustCompile(`(?m)^\s*\(define `),
   989  		),
   990  	},
   991  	".m": &Heuristics{
   992  		rule.Or(
   993  			rule.MatchingLanguages("Objective-C"),
   994  			regexp.MustCompile(`(?m)^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])`),
   995  		),
   996  		rule.Or(
   997  			rule.MatchingLanguages("Mercury"),
   998  			regexp.MustCompile(`(?m):- module`),
   999  		),
  1000  		rule.Or(
  1001  			rule.MatchingLanguages("MUF"),
  1002  			regexp.MustCompile(`(?m)^: `),
  1003  		),
  1004  		rule.Or(
  1005  			rule.MatchingLanguages("M"),
  1006  			regexp.MustCompile(`(?m)^\s*;`),
  1007  		),
  1008  		rule.And(
  1009  			rule.MatchingLanguages("Mathematica"),
  1010  			rule.Or(
  1011  				rule.MatchingLanguages(""),
  1012  				regexp.MustCompile(`(?m)\(\*`),
  1013  			),
  1014  			rule.Or(
  1015  				rule.MatchingLanguages(""),
  1016  				regexp.MustCompile(`(?m)\*\)$`),
  1017  			),
  1018  		),
  1019  		rule.Or(
  1020  			rule.MatchingLanguages("MATLAB"),
  1021  			regexp.MustCompile(`(?m)^\s*%`),
  1022  		),
  1023  		rule.Or(
  1024  			rule.MatchingLanguages("Limbo"),
  1025  			regexp.MustCompile(`(?m)^\w+\s*:\s*module\s*{`),
  1026  		),
  1027  	},
  1028  	".m4": &Heuristics{
  1029  		rule.Or(
  1030  			rule.MatchingLanguages("M4Sugar"),
  1031  			regexp.MustCompile(`(?m)AC_DEFUN|AC_PREREQ|AC_INIT|^_?m4_`),
  1032  		),
  1033  		rule.Always(
  1034  			rule.MatchingLanguages("M4"),
  1035  		),
  1036  	},
  1037  	".man": &Heuristics{
  1038  		rule.And(
  1039  			rule.MatchingLanguages("Roff Manpage"),
  1040  			rule.Or(
  1041  				rule.MatchingLanguages(""),
  1042  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
  1043  			),
  1044  			rule.Or(
  1045  				rule.MatchingLanguages(""),
  1046  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
  1047  			),
  1048  			rule.Or(
  1049  				rule.MatchingLanguages(""),
  1050  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
  1051  			),
  1052  		),
  1053  		rule.And(
  1054  			rule.MatchingLanguages("Roff Manpage"),
  1055  			rule.Or(
  1056  				rule.MatchingLanguages(""),
  1057  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
  1058  			),
  1059  			rule.Or(
  1060  				rule.MatchingLanguages(""),
  1061  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
  1062  			),
  1063  		),
  1064  		rule.Always(
  1065  			rule.MatchingLanguages("Roff"),
  1066  		),
  1067  	},
  1068  	".mask": &Heuristics{
  1069  		rule.Or(
  1070  			rule.MatchingLanguages("Unity3D Asset"),
  1071  			regexp.MustCompile(`(?m)tag:unity3d.com`),
  1072  		),
  1073  	},
  1074  	".mc": &Heuristics{
  1075  		rule.Or(
  1076  			rule.MatchingLanguages("M4"),
  1077  			regexp.MustCompile(`(?m)^dnl|^divert\((?:-?\d+)?\)|^\w+\(`+"`"+`[^\n]*?'[),]`),
  1078  		),
  1079  		rule.Or(
  1080  			rule.MatchingLanguages("Monkey C"),
  1081  			regexp.MustCompile(`(?m)\b(?:using|module|function|class|var)\s+\w`),
  1082  		),
  1083  	},
  1084  	".md": &Heuristics{
  1085  		rule.Or(
  1086  			rule.MatchingLanguages("Markdown"),
  1087  			regexp.MustCompile(`(?m)(^[-A-Za-z0-9=#!\*\[|>])|<\/|\A\z`),
  1088  		),
  1089  		rule.Or(
  1090  			rule.MatchingLanguages("GCC Machine Description"),
  1091  			regexp.MustCompile(`(?m)^(;;|\(define_)`),
  1092  		),
  1093  		rule.Always(
  1094  			rule.MatchingLanguages("Markdown"),
  1095  		),
  1096  	},
  1097  	".mdoc": &Heuristics{
  1098  		rule.And(
  1099  			rule.MatchingLanguages("Roff Manpage"),
  1100  			rule.Or(
  1101  				rule.MatchingLanguages(""),
  1102  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
  1103  			),
  1104  			rule.Or(
  1105  				rule.MatchingLanguages(""),
  1106  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
  1107  			),
  1108  			rule.Or(
  1109  				rule.MatchingLanguages(""),
  1110  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
  1111  			),
  1112  		),
  1113  		rule.And(
  1114  			rule.MatchingLanguages("Roff Manpage"),
  1115  			rule.Or(
  1116  				rule.MatchingLanguages(""),
  1117  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
  1118  			),
  1119  			rule.Or(
  1120  				rule.MatchingLanguages(""),
  1121  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
  1122  			),
  1123  		),
  1124  		rule.Always(
  1125  			rule.MatchingLanguages("Roff"),
  1126  		),
  1127  	},
  1128  	".ml": &Heuristics{
  1129  		rule.Or(
  1130  			rule.MatchingLanguages("OCaml"),
  1131  			regexp.MustCompile(`(?m)(^\s*module)|let rec |match\s+(\S+\s)+with`),
  1132  		),
  1133  		rule.Or(
  1134  			rule.MatchingLanguages("Standard ML"),
  1135  			regexp.MustCompile(`(?m)=> |case\s+(\S+\s)+of`),
  1136  		),
  1137  	},
  1138  	".mod": &Heuristics{
  1139  		rule.Or(
  1140  			rule.MatchingLanguages("XML"),
  1141  			regexp.MustCompile(`(?m)<!ENTITY `),
  1142  		),
  1143  		rule.Or(
  1144  			rule.MatchingLanguages("Modula-2"),
  1145  			regexp.MustCompile(`(?m)^\s*(?i:MODULE|END) [\w\.]+;`),
  1146  		),
  1147  		rule.Always(
  1148  			rule.MatchingLanguages("Linux Kernel Module", "AMPL"),
  1149  		),
  1150  	},
  1151  	".ms": &Heuristics{
  1152  		rule.Or(
  1153  			rule.MatchingLanguages("Roff"),
  1154  			regexp.MustCompile(`(?m)^[.'][A-Za-z]{2}(\s|$)`),
  1155  		),
  1156  		rule.And(
  1157  			rule.MatchingLanguages("Unix Assembly"),
  1158  			rule.Not(
  1159  				rule.MatchingLanguages(""),
  1160  				regexp.MustCompile(`(?m)/\*`),
  1161  			),
  1162  			rule.Or(
  1163  				rule.MatchingLanguages(""),
  1164  				regexp.MustCompile(`(?m)^\s*\.(?:include\s|globa?l\s|[A-Za-z][_A-Za-z0-9]*:)`),
  1165  			),
  1166  		),
  1167  		rule.Always(
  1168  			rule.MatchingLanguages("MAXScript"),
  1169  		),
  1170  	},
  1171  	".n": &Heuristics{
  1172  		rule.Or(
  1173  			rule.MatchingLanguages("Roff"),
  1174  			regexp.MustCompile(`(?m)^[.']`),
  1175  		),
  1176  		rule.Or(
  1177  			rule.MatchingLanguages("Nemerle"),
  1178  			regexp.MustCompile(`(?m)^(module|namespace|using)\s`),
  1179  		),
  1180  	},
  1181  	".ncl": &Heuristics{
  1182  		rule.Or(
  1183  			rule.MatchingLanguages("XML"),
  1184  			regexp.MustCompile(`(?m)^\s*<\?xml\s+version`),
  1185  		),
  1186  		rule.Or(
  1187  			rule.MatchingLanguages("Gerber Image"),
  1188  			regexp.MustCompile(`(?m)^[DGMT][0-9]{2}\*\r?\n`),
  1189  		),
  1190  		rule.Or(
  1191  			rule.MatchingLanguages("Text"),
  1192  			regexp.MustCompile(`(?m)THE_TITLE`),
  1193  		),
  1194  	},
  1195  	".nl": &Heuristics{
  1196  		rule.Or(
  1197  			rule.MatchingLanguages("NL"),
  1198  			regexp.MustCompile(`(?m)^(b|g)[0-9]+ `),
  1199  		),
  1200  		rule.Always(
  1201  			rule.MatchingLanguages("NewLisp"),
  1202  		),
  1203  	},
  1204  	".odin": &Heuristics{
  1205  		rule.Or(
  1206  			rule.MatchingLanguages("Object Data Instance Notation"),
  1207  			regexp.MustCompile(`(?m)(?:^|<)\s*[A-Za-z0-9_]+\s*=\s*<`),
  1208  		),
  1209  		rule.Or(
  1210  			rule.MatchingLanguages("Odin"),
  1211  			regexp.MustCompile(`(?m)package\s+\w+|\b(?:im|ex)port\s*"[\w:./]+"|\w+\s*::\s*(?:proc|struct)\s*\(|^\s*//\s`),
  1212  		),
  1213  	},
  1214  	".p": &Heuristics{
  1215  		rule.Or(
  1216  			rule.MatchingLanguages("Gnuplot"),
  1217  			regexp.MustCompile(`(?m)^s?plot\b|^set\s+(term|terminal|out|output|[xy]tics|[xy]label|[xy]range|style)\b`),
  1218  		),
  1219  		rule.Always(
  1220  			rule.MatchingLanguages("OpenEdge ABL"),
  1221  		),
  1222  	},
  1223  	".php": &Heuristics{
  1224  		rule.Or(
  1225  			rule.MatchingLanguages("Hack"),
  1226  			regexp.MustCompile(`(?m)<\?hh`),
  1227  		),
  1228  		rule.Or(
  1229  			rule.MatchingLanguages("PHP"),
  1230  			regexp.MustCompile(`(?m)<\?[^h]`),
  1231  		),
  1232  	},
  1233  	".pl": &Heuristics{
  1234  		rule.Or(
  1235  			rule.MatchingLanguages("Prolog"),
  1236  			regexp.MustCompile(`(?m)^[^#]*:-`),
  1237  		),
  1238  		rule.Or(
  1239  			rule.MatchingLanguages("Perl"),
  1240  			regexp.MustCompile(`(?m)\buse\s+(?:strict\b|v?5\.)`),
  1241  		),
  1242  		rule.Or(
  1243  			rule.MatchingLanguages("Raku"),
  1244  			regexp.MustCompile(`(?m)^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)`),
  1245  		),
  1246  	},
  1247  	".plist": &Heuristics{
  1248  		rule.Or(
  1249  			rule.MatchingLanguages("XML Property List"),
  1250  			regexp.MustCompile(`(?m)<!DOCTYPE\s+plist`),
  1251  		),
  1252  		rule.Always(
  1253  			rule.MatchingLanguages("OpenStep Property List"),
  1254  		),
  1255  	},
  1256  	".pm": &Heuristics{
  1257  		rule.Or(
  1258  			rule.MatchingLanguages("Perl"),
  1259  			regexp.MustCompile(`(?m)\buse\s+(?:strict\b|v?5\.)`),
  1260  		),
  1261  		rule.Or(
  1262  			rule.MatchingLanguages("Raku"),
  1263  			regexp.MustCompile(`(?m)^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)`),
  1264  		),
  1265  		rule.Or(
  1266  			rule.MatchingLanguages("X PixMap"),
  1267  			regexp.MustCompile(`(?m)^\s*\/\* XPM \*\/`),
  1268  		),
  1269  	},
  1270  	".pod": &Heuristics{
  1271  		rule.Or(
  1272  			rule.MatchingLanguages("Pod 6"),
  1273  			regexp.MustCompile(`(?m)^[\s&&[^\n]]*=(comment|begin pod|begin para|item\d+)`),
  1274  		),
  1275  		rule.Always(
  1276  			rule.MatchingLanguages("Pod"),
  1277  		),
  1278  	},
  1279  	".pp": &Heuristics{
  1280  		rule.Or(
  1281  			rule.MatchingLanguages("Pascal"),
  1282  			regexp.MustCompile(`(?m)^\s*end[.;]`),
  1283  		),
  1284  		rule.Or(
  1285  			rule.MatchingLanguages("Puppet"),
  1286  			regexp.MustCompile(`(?m)^\s+\w+\s+=>\s`),
  1287  		),
  1288  	},
  1289  	".pro": &Heuristics{
  1290  		rule.Or(
  1291  			rule.MatchingLanguages("Proguard"),
  1292  			regexp.MustCompile(`(?m)^-(include\b.*\.pro$|keep\b|keepclassmembers\b|keepattributes\b)`),
  1293  		),
  1294  		rule.Or(
  1295  			rule.MatchingLanguages("Prolog"),
  1296  			regexp.MustCompile(`(?m)^[^\[#]+:-`),
  1297  		),
  1298  		rule.Or(
  1299  			rule.MatchingLanguages("INI"),
  1300  			regexp.MustCompile(`(?m)last_client=`),
  1301  		),
  1302  		rule.And(
  1303  			rule.MatchingLanguages("QMake"),
  1304  			rule.Or(
  1305  				rule.MatchingLanguages(""),
  1306  				regexp.MustCompile(`(?m)HEADERS`),
  1307  			),
  1308  			rule.Or(
  1309  				rule.MatchingLanguages(""),
  1310  				regexp.MustCompile(`(?m)SOURCES`),
  1311  			),
  1312  		),
  1313  		rule.Or(
  1314  			rule.MatchingLanguages("IDL"),
  1315  			regexp.MustCompile(`(?m)^\s*function[ \w,]+$`),
  1316  		),
  1317  	},
  1318  	".properties": &Heuristics{
  1319  		rule.And(
  1320  			rule.MatchingLanguages("INI"),
  1321  			rule.Or(
  1322  				rule.MatchingLanguages(""),
  1323  				regexp.MustCompile(`(?m)^[^#!;][^=]*=`),
  1324  			),
  1325  			rule.Or(
  1326  				rule.MatchingLanguages(""),
  1327  				regexp.MustCompile(`(?m)^[;\[]`),
  1328  			),
  1329  		),
  1330  		rule.And(
  1331  			rule.MatchingLanguages("Java Properties"),
  1332  			rule.Or(
  1333  				rule.MatchingLanguages(""),
  1334  				regexp.MustCompile(`(?m)^[^#!;][^=]*=`),
  1335  			),
  1336  			rule.Or(
  1337  				rule.MatchingLanguages(""),
  1338  				regexp.MustCompile(`(?m)^[#!]`),
  1339  			),
  1340  		),
  1341  		rule.Or(
  1342  			rule.MatchingLanguages("INI"),
  1343  			regexp.MustCompile(`(?m)^[^#!;][^=]*=`),
  1344  		),
  1345  		rule.Or(
  1346  			rule.MatchingLanguages("Java Properties"),
  1347  			regexp.MustCompile(`(?m)^[^#!][^:]*:`),
  1348  		),
  1349  	},
  1350  	".q": &Heuristics{
  1351  		rule.Or(
  1352  			rule.MatchingLanguages("q"),
  1353  			regexp.MustCompile(`(?m)((?i:[A-Z.][\w.]*:{)|(^|\n)\\(cd?|d|l|p|ts?) )`),
  1354  		),
  1355  		rule.Or(
  1356  			rule.MatchingLanguages("HiveQL"),
  1357  			regexp.MustCompile(`(?m)(?i:SELECT\s+[\w*,]+\s+FROM|(CREATE|ALTER|DROP)\s(DATABASE|SCHEMA|TABLE))`),
  1358  		),
  1359  	},
  1360  	".qs": &Heuristics{
  1361  		rule.Or(
  1362  			rule.MatchingLanguages("Q#"),
  1363  			regexp.MustCompile(`(?m)^((\/{2,3})?\s*(namespace|operation)\b)`),
  1364  		),
  1365  		rule.Or(
  1366  			rule.MatchingLanguages("Qt Script"),
  1367  			regexp.MustCompile(`(?m)(\w+\.prototype\.\w+|===|\bvar\b)`),
  1368  		),
  1369  	},
  1370  	".r": &Heuristics{
  1371  		rule.Or(
  1372  			rule.MatchingLanguages("Rebol"),
  1373  			regexp.MustCompile(`(?m)(?i:\bRebol\b)`),
  1374  		),
  1375  		rule.Or(
  1376  			rule.MatchingLanguages("R"),
  1377  			regexp.MustCompile(`(?m)<-|^\s*#`),
  1378  		),
  1379  	},
  1380  	".re": &Heuristics{
  1381  		rule.Or(
  1382  			rule.MatchingLanguages("Reason"),
  1383  			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*$)`),
  1384  		),
  1385  		rule.Or(
  1386  			rule.MatchingLanguages("C++"),
  1387  			regexp.MustCompile(`(?m)^\s*#(?:(?:if|ifdef|define|pragma)\s+\w|\s*include\s+<[^>]+>)|^\s*template\s*<`),
  1388  		),
  1389  	},
  1390  	".res": &Heuristics{
  1391  		rule.Or(
  1392  			rule.MatchingLanguages("ReScript"),
  1393  			regexp.MustCompile(`(?m)^\s*(let|module|type)\s+\w*\s+=\s+|^\s*(?:include|open)\s+\w+\s*$`),
  1394  		),
  1395  	},
  1396  	".rno": &Heuristics{
  1397  		rule.Or(
  1398  			rule.MatchingLanguages("Roff"),
  1399  			regexp.MustCompile(`(?m)^\.\\" `),
  1400  		),
  1401  	},
  1402  	".rpy": &Heuristics{
  1403  		rule.Or(
  1404  			rule.MatchingLanguages("Python"),
  1405  			regexp.MustCompile(`(?m)(?m:^(import|from|class|def)\s)`),
  1406  		),
  1407  		rule.Always(
  1408  			rule.MatchingLanguages("Ren'Py"),
  1409  		),
  1410  	},
  1411  	".rs": &Heuristics{
  1412  		rule.Or(
  1413  			rule.MatchingLanguages("Rust"),
  1414  			regexp.MustCompile(`(?m)^(use |fn |mod |pub |macro_rules|impl|#!?\[)`),
  1415  		),
  1416  		rule.Or(
  1417  			rule.MatchingLanguages("RenderScript"),
  1418  			regexp.MustCompile(`(?m)#include|#pragma\s+(rs|version)|__attribute__`),
  1419  		),
  1420  		rule.Or(
  1421  			rule.MatchingLanguages("XML"),
  1422  			regexp.MustCompile(`(?m)^\s*<\?xml`),
  1423  		),
  1424  	},
  1425  	".s": &Heuristics{
  1426  		rule.Or(
  1427  			rule.MatchingLanguages("Motorola 68K Assembly"),
  1428  			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`),
  1429  		),
  1430  	},
  1431  	".sc": &Heuristics{
  1432  		rule.Or(
  1433  			rule.MatchingLanguages("SuperCollider"),
  1434  			regexp.MustCompile(`(?m)(?i:\^(this|super)\.|^\s*~\w+\s*=\.)`),
  1435  		),
  1436  		rule.Or(
  1437  			rule.MatchingLanguages("Scala"),
  1438  			regexp.MustCompile(`(?m)(^\s*import (scala|java)\.|^\s*class\b)`),
  1439  		),
  1440  	},
  1441  	".sol": &Heuristics{
  1442  		rule.Or(
  1443  			rule.MatchingLanguages("Gerber Image"),
  1444  			regexp.MustCompile(`(?m)^[DGMT][0-9]{2}\*\r?\n`),
  1445  		),
  1446  	},
  1447  	".sql": &Heuristics{
  1448  		rule.Or(
  1449  			rule.MatchingLanguages("PLpgSQL"),
  1450  			regexp.MustCompile(`(?m)(?i:^\\i\b|AS\s+\$\$|LANGUAGE\s+'?plpgsql'?|BEGIN(\s+WORK)?\s*;)`),
  1451  		),
  1452  		rule.Or(
  1453  			rule.MatchingLanguages("SQLPL"),
  1454  			regexp.MustCompile(`(?m)(?i:ALTER\s+MODULE|MODE\s+DB2SQL|\bSYS(CAT|PROC)\.|ASSOCIATE\s+RESULT\s+SET|\bEND!\s*$)`),
  1455  		),
  1456  		rule.Or(
  1457  			rule.MatchingLanguages("PLSQL"),
  1458  			regexp.MustCompile(`(?m)(?i:\$\$PLSQL_|XMLTYPE|systimestamp|\.nextval|CONNECT\s+BY|AUTHID\s+(DEFINER|CURRENT_USER)|constructor\W+function)`),
  1459  		),
  1460  		rule.Or(
  1461  			rule.MatchingLanguages("TSQL"),
  1462  			regexp.MustCompile(`(?m)(?i:^\s*GO\b|BEGIN(\s+TRY|\s+CATCH)|OUTPUT\s+INSERTED|DECLARE\s+@|\[dbo\])`),
  1463  		),
  1464  		rule.Always(
  1465  			rule.MatchingLanguages("SQL"),
  1466  		),
  1467  	},
  1468  	".srt": &Heuristics{
  1469  		rule.Or(
  1470  			rule.MatchingLanguages("SubRip Text"),
  1471  			regexp.MustCompile(`(?m)^(\d{2}:\d{2}:\d{2},\d{3})\s*(-->)\s*(\d{2}:\d{2}:\d{2},\d{3})$`),
  1472  		),
  1473  	},
  1474  	".st": &Heuristics{
  1475  		rule.Or(
  1476  			rule.MatchingLanguages("Smalltalk"),
  1477  			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*\[`),
  1478  		),
  1479  	},
  1480  	".star": &Heuristics{
  1481  		rule.Or(
  1482  			rule.MatchingLanguages("STAR"),
  1483  			regexp.MustCompile(`(?m)^loop_\s*$`),
  1484  		),
  1485  		rule.Always(
  1486  			rule.MatchingLanguages("Starlark"),
  1487  		),
  1488  	},
  1489  	".stl": &Heuristics{},
  1490  	".t": &Heuristics{
  1491  		rule.Or(
  1492  			rule.MatchingLanguages("Perl"),
  1493  			regexp.MustCompile(`(?m)\buse\s+(?:strict\b|v?5\.)`),
  1494  		),
  1495  		rule.Or(
  1496  			rule.MatchingLanguages("Raku"),
  1497  			regexp.MustCompile(`(?m)^\s*(?:use\s+v6\b|\bmodule\b|\bmy\s+class\b)`),
  1498  		),
  1499  		rule.Or(
  1500  			rule.MatchingLanguages("Turing"),
  1501  			regexp.MustCompile(`(?m)^\s*%[ \t]+|^\s*var\s+\w+(\s*:\s*\w+)?\s*:=\s*\w+`),
  1502  		),
  1503  	},
  1504  	".toc": &Heuristics{
  1505  		rule.Or(
  1506  			rule.MatchingLanguages("World of Warcraft Addon Data"),
  1507  			regexp.MustCompile(`(?m)^## |@no-lib-strip@`),
  1508  		),
  1509  		rule.Or(
  1510  			rule.MatchingLanguages("TeX"),
  1511  			regexp.MustCompile(`(?m)^\\(contentsline|defcounter|beamer|boolfalse)`),
  1512  		),
  1513  	},
  1514  	".ts": &Heuristics{
  1515  		rule.Or(
  1516  			rule.MatchingLanguages("XML"),
  1517  			regexp.MustCompile(`(?m)<TS\b`),
  1518  		),
  1519  		rule.Always(
  1520  			rule.MatchingLanguages("TypeScript"),
  1521  		),
  1522  	},
  1523  	".tst": &Heuristics{
  1524  		rule.Or(
  1525  			rule.MatchingLanguages("GAP"),
  1526  			regexp.MustCompile(`(?m)gap> `),
  1527  		),
  1528  		rule.Always(
  1529  			rule.MatchingLanguages("Scilab"),
  1530  		),
  1531  	},
  1532  	".tsx": &Heuristics{
  1533  		rule.Or(
  1534  			rule.MatchingLanguages("TSX"),
  1535  			regexp.MustCompile(`(?m)^\s*(import.+(from\s+|require\()['"]react|\/\/\/\s*<reference\s)`),
  1536  		),
  1537  		rule.Or(
  1538  			rule.MatchingLanguages("XML"),
  1539  			regexp.MustCompile(`(?m)(?i:^\s*<\?xml\s+version)`),
  1540  		),
  1541  	},
  1542  	".txt": &Heuristics{
  1543  		rule.Always(
  1544  			rule.MatchingLanguages("Text"),
  1545  		),
  1546  	},
  1547  	".url": &Heuristics{},
  1548  	".v": &Heuristics{
  1549  		rule.Or(
  1550  			rule.MatchingLanguages("Coq"),
  1551  			regexp.MustCompile(`(?m)(?:^|\s)(?:Proof|Qed)\.(?:$|\s)|(?:^|\s)Require[ \t]+(Import|Export)\s`),
  1552  		),
  1553  		rule.Or(
  1554  			rule.MatchingLanguages("Verilog"),
  1555  			regexp.MustCompile(`(?m)^[ \t]*module\s+[^\s()]+\s+\#?\(|^[ \t]*`+"`"+`(?:define|ifdef|ifndef|include|timescale)|^[ \t]*always[ \t]+@|^[ \t]*initial[ \t]+(begin|@)`),
  1556  		),
  1557  		rule.Or(
  1558  			rule.MatchingLanguages("V"),
  1559  			regexp.MustCompile(`(?m)\$(?:if|else)[ \t]|^[ \t]*fn\s+[^\s()]+\(.*?\).*?\{|^[ \t]*for\s*\{`),
  1560  		),
  1561  	},
  1562  	".vba": &Heuristics{
  1563  		rule.Or(
  1564  			rule.MatchingLanguages("Vim Script"),
  1565  			regexp.MustCompile(`(?m)^UseVimball`),
  1566  		),
  1567  		rule.Always(
  1568  			rule.MatchingLanguages("VBA"),
  1569  		),
  1570  	},
  1571  	".w": &Heuristics{
  1572  		rule.Or(
  1573  			rule.MatchingLanguages("OpenEdge ABL"),
  1574  			regexp.MustCompile(`(?m)&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS`),
  1575  		),
  1576  		rule.Or(
  1577  			rule.MatchingLanguages("CWeb"),
  1578  			regexp.MustCompile(`(?m)^@(<|\w+\.)`),
  1579  		),
  1580  	},
  1581  	".x": &Heuristics{
  1582  		rule.Or(
  1583  			rule.MatchingLanguages("DirectX 3D File"),
  1584  			regexp.MustCompile(`(?m)^xof 030(2|3)(?:txt|bin|tzip|bzip)\b`),
  1585  		),
  1586  		rule.Or(
  1587  			rule.MatchingLanguages("RPC"),
  1588  			regexp.MustCompile(`(?m)\b(program|version)\s+\w+\s*{|\bunion\s+\w+\s+switch\s*\(`),
  1589  		),
  1590  		rule.Or(
  1591  			rule.MatchingLanguages("Logos"),
  1592  			regexp.MustCompile(`(?m)^%(end|ctor|hook|group)\b`),
  1593  		),
  1594  		rule.Or(
  1595  			rule.MatchingLanguages("Linker Script"),
  1596  			regexp.MustCompile(`(?m)OUTPUT_ARCH\(|OUTPUT_FORMAT\(|SECTIONS`),
  1597  		),
  1598  	},
  1599  	".yaml": &Heuristics{
  1600  		rule.Or(
  1601  			rule.MatchingLanguages("MiniYAML"),
  1602  			regexp.MustCompile(`(?m)^\t+.*?[^\s:].*?:`),
  1603  		),
  1604  		rule.Always(
  1605  			rule.MatchingLanguages("YAML"),
  1606  		),
  1607  	},
  1608  	".yy": &Heuristics{
  1609  		rule.Or(
  1610  			rule.MatchingLanguages("JSON"),
  1611  			regexp.MustCompile(`(?m)\"modelName\"\:\s*\"GM`),
  1612  		),
  1613  		rule.Always(
  1614  			rule.MatchingLanguages("Yacc"),
  1615  		),
  1616  	},
  1617  }