gitlab.com/thomasboni/go-enry/v2@v2.8.3-0.20220418031202-30b0d7a3de98/internal/code-generator/generator/test_files/content.gold (about)

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