gopkg.in/src-d/enry.v1@v1.7.3/internal/code-generator/generator/test_files/content.gold (about)

     1  // Code generated by gopkg.in/src-d/enry.v1/internal/code-generator DO NOT EDIT.
     2  // Extracted from github/linguist commit: e4560984058b4726010ca4b8f03ed9d0f8f464db
     3  
     4  package data
     5  
     6  import (
     7  	"regexp"
     8  
     9  	"gopkg.in/src-d/enry.v1/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.Always(
    41  			rule.MatchingLanguages("Roff"),
    42  		),
    43  	},
    44  	".1in": &Heuristics{
    45  		rule.And(
    46  			rule.MatchingLanguages("Roff Manpage"),
    47  			rule.Or(
    48  				rule.MatchingLanguages(""),
    49  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
    50  			),
    51  			rule.Or(
    52  				rule.MatchingLanguages(""),
    53  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
    54  			),
    55  			rule.Or(
    56  				rule.MatchingLanguages(""),
    57  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
    58  			),
    59  		),
    60  		rule.And(
    61  			rule.MatchingLanguages("Roff Manpage"),
    62  			rule.Or(
    63  				rule.MatchingLanguages(""),
    64  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
    65  			),
    66  			rule.Or(
    67  				rule.MatchingLanguages(""),
    68  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
    69  			),
    70  		),
    71  		rule.Always(
    72  			rule.MatchingLanguages("Roff"),
    73  		),
    74  	},
    75  	".1m": &Heuristics{
    76  		rule.And(
    77  			rule.MatchingLanguages("Roff Manpage"),
    78  			rule.Or(
    79  				rule.MatchingLanguages(""),
    80  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
    81  			),
    82  			rule.Or(
    83  				rule.MatchingLanguages(""),
    84  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
    85  			),
    86  			rule.Or(
    87  				rule.MatchingLanguages(""),
    88  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
    89  			),
    90  		),
    91  		rule.And(
    92  			rule.MatchingLanguages("Roff Manpage"),
    93  			rule.Or(
    94  				rule.MatchingLanguages(""),
    95  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
    96  			),
    97  			rule.Or(
    98  				rule.MatchingLanguages(""),
    99  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   100  			),
   101  		),
   102  		rule.Always(
   103  			rule.MatchingLanguages("Roff"),
   104  		),
   105  	},
   106  	".1x": &Heuristics{
   107  		rule.And(
   108  			rule.MatchingLanguages("Roff Manpage"),
   109  			rule.Or(
   110  				rule.MatchingLanguages(""),
   111  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   112  			),
   113  			rule.Or(
   114  				rule.MatchingLanguages(""),
   115  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   116  			),
   117  			rule.Or(
   118  				rule.MatchingLanguages(""),
   119  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   120  			),
   121  		),
   122  		rule.And(
   123  			rule.MatchingLanguages("Roff Manpage"),
   124  			rule.Or(
   125  				rule.MatchingLanguages(""),
   126  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   127  			),
   128  			rule.Or(
   129  				rule.MatchingLanguages(""),
   130  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   131  			),
   132  		),
   133  		rule.Always(
   134  			rule.MatchingLanguages("Roff"),
   135  		),
   136  	},
   137  	".2": &Heuristics{
   138  		rule.And(
   139  			rule.MatchingLanguages("Roff Manpage"),
   140  			rule.Or(
   141  				rule.MatchingLanguages(""),
   142  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   143  			),
   144  			rule.Or(
   145  				rule.MatchingLanguages(""),
   146  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   147  			),
   148  			rule.Or(
   149  				rule.MatchingLanguages(""),
   150  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   151  			),
   152  		),
   153  		rule.And(
   154  			rule.MatchingLanguages("Roff Manpage"),
   155  			rule.Or(
   156  				rule.MatchingLanguages(""),
   157  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   158  			),
   159  			rule.Or(
   160  				rule.MatchingLanguages(""),
   161  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   162  			),
   163  		),
   164  		rule.Always(
   165  			rule.MatchingLanguages("Roff"),
   166  		),
   167  	},
   168  	".3": &Heuristics{
   169  		rule.And(
   170  			rule.MatchingLanguages("Roff Manpage"),
   171  			rule.Or(
   172  				rule.MatchingLanguages(""),
   173  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   174  			),
   175  			rule.Or(
   176  				rule.MatchingLanguages(""),
   177  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   178  			),
   179  			rule.Or(
   180  				rule.MatchingLanguages(""),
   181  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   182  			),
   183  		),
   184  		rule.And(
   185  			rule.MatchingLanguages("Roff Manpage"),
   186  			rule.Or(
   187  				rule.MatchingLanguages(""),
   188  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   189  			),
   190  			rule.Or(
   191  				rule.MatchingLanguages(""),
   192  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   193  			),
   194  		),
   195  		rule.Always(
   196  			rule.MatchingLanguages("Roff"),
   197  		),
   198  	},
   199  	".3in": &Heuristics{
   200  		rule.And(
   201  			rule.MatchingLanguages("Roff Manpage"),
   202  			rule.Or(
   203  				rule.MatchingLanguages(""),
   204  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   205  			),
   206  			rule.Or(
   207  				rule.MatchingLanguages(""),
   208  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   209  			),
   210  			rule.Or(
   211  				rule.MatchingLanguages(""),
   212  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   213  			),
   214  		),
   215  		rule.And(
   216  			rule.MatchingLanguages("Roff Manpage"),
   217  			rule.Or(
   218  				rule.MatchingLanguages(""),
   219  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   220  			),
   221  			rule.Or(
   222  				rule.MatchingLanguages(""),
   223  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   224  			),
   225  		),
   226  		rule.Always(
   227  			rule.MatchingLanguages("Roff"),
   228  		),
   229  	},
   230  	".3m": &Heuristics{
   231  		rule.And(
   232  			rule.MatchingLanguages("Roff Manpage"),
   233  			rule.Or(
   234  				rule.MatchingLanguages(""),
   235  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   236  			),
   237  			rule.Or(
   238  				rule.MatchingLanguages(""),
   239  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   240  			),
   241  			rule.Or(
   242  				rule.MatchingLanguages(""),
   243  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   244  			),
   245  		),
   246  		rule.And(
   247  			rule.MatchingLanguages("Roff Manpage"),
   248  			rule.Or(
   249  				rule.MatchingLanguages(""),
   250  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   251  			),
   252  			rule.Or(
   253  				rule.MatchingLanguages(""),
   254  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   255  			),
   256  		),
   257  		rule.Always(
   258  			rule.MatchingLanguages("Roff"),
   259  		),
   260  	},
   261  	".3p": &Heuristics{
   262  		rule.And(
   263  			rule.MatchingLanguages("Roff Manpage"),
   264  			rule.Or(
   265  				rule.MatchingLanguages(""),
   266  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   267  			),
   268  			rule.Or(
   269  				rule.MatchingLanguages(""),
   270  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   271  			),
   272  			rule.Or(
   273  				rule.MatchingLanguages(""),
   274  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   275  			),
   276  		),
   277  		rule.And(
   278  			rule.MatchingLanguages("Roff Manpage"),
   279  			rule.Or(
   280  				rule.MatchingLanguages(""),
   281  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   282  			),
   283  			rule.Or(
   284  				rule.MatchingLanguages(""),
   285  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   286  			),
   287  		),
   288  		rule.Always(
   289  			rule.MatchingLanguages("Roff"),
   290  		),
   291  	},
   292  	".3pm": &Heuristics{
   293  		rule.And(
   294  			rule.MatchingLanguages("Roff Manpage"),
   295  			rule.Or(
   296  				rule.MatchingLanguages(""),
   297  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   298  			),
   299  			rule.Or(
   300  				rule.MatchingLanguages(""),
   301  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   302  			),
   303  			rule.Or(
   304  				rule.MatchingLanguages(""),
   305  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   306  			),
   307  		),
   308  		rule.And(
   309  			rule.MatchingLanguages("Roff Manpage"),
   310  			rule.Or(
   311  				rule.MatchingLanguages(""),
   312  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   313  			),
   314  			rule.Or(
   315  				rule.MatchingLanguages(""),
   316  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   317  			),
   318  		),
   319  		rule.Always(
   320  			rule.MatchingLanguages("Roff"),
   321  		),
   322  	},
   323  	".3qt": &Heuristics{
   324  		rule.And(
   325  			rule.MatchingLanguages("Roff Manpage"),
   326  			rule.Or(
   327  				rule.MatchingLanguages(""),
   328  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   329  			),
   330  			rule.Or(
   331  				rule.MatchingLanguages(""),
   332  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   333  			),
   334  			rule.Or(
   335  				rule.MatchingLanguages(""),
   336  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   337  			),
   338  		),
   339  		rule.And(
   340  			rule.MatchingLanguages("Roff Manpage"),
   341  			rule.Or(
   342  				rule.MatchingLanguages(""),
   343  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   344  			),
   345  			rule.Or(
   346  				rule.MatchingLanguages(""),
   347  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   348  			),
   349  		),
   350  		rule.Always(
   351  			rule.MatchingLanguages("Roff"),
   352  		),
   353  	},
   354  	".3x": &Heuristics{
   355  		rule.And(
   356  			rule.MatchingLanguages("Roff Manpage"),
   357  			rule.Or(
   358  				rule.MatchingLanguages(""),
   359  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   360  			),
   361  			rule.Or(
   362  				rule.MatchingLanguages(""),
   363  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   364  			),
   365  			rule.Or(
   366  				rule.MatchingLanguages(""),
   367  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   368  			),
   369  		),
   370  		rule.And(
   371  			rule.MatchingLanguages("Roff Manpage"),
   372  			rule.Or(
   373  				rule.MatchingLanguages(""),
   374  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   375  			),
   376  			rule.Or(
   377  				rule.MatchingLanguages(""),
   378  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   379  			),
   380  		),
   381  		rule.Always(
   382  			rule.MatchingLanguages("Roff"),
   383  		),
   384  	},
   385  	".4": &Heuristics{
   386  		rule.And(
   387  			rule.MatchingLanguages("Roff Manpage"),
   388  			rule.Or(
   389  				rule.MatchingLanguages(""),
   390  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   391  			),
   392  			rule.Or(
   393  				rule.MatchingLanguages(""),
   394  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   395  			),
   396  			rule.Or(
   397  				rule.MatchingLanguages(""),
   398  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   399  			),
   400  		),
   401  		rule.And(
   402  			rule.MatchingLanguages("Roff Manpage"),
   403  			rule.Or(
   404  				rule.MatchingLanguages(""),
   405  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   406  			),
   407  			rule.Or(
   408  				rule.MatchingLanguages(""),
   409  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   410  			),
   411  		),
   412  		rule.Always(
   413  			rule.MatchingLanguages("Roff"),
   414  		),
   415  	},
   416  	".5": &Heuristics{
   417  		rule.And(
   418  			rule.MatchingLanguages("Roff Manpage"),
   419  			rule.Or(
   420  				rule.MatchingLanguages(""),
   421  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   422  			),
   423  			rule.Or(
   424  				rule.MatchingLanguages(""),
   425  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   426  			),
   427  			rule.Or(
   428  				rule.MatchingLanguages(""),
   429  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   430  			),
   431  		),
   432  		rule.And(
   433  			rule.MatchingLanguages("Roff Manpage"),
   434  			rule.Or(
   435  				rule.MatchingLanguages(""),
   436  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   437  			),
   438  			rule.Or(
   439  				rule.MatchingLanguages(""),
   440  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   441  			),
   442  		),
   443  		rule.Always(
   444  			rule.MatchingLanguages("Roff"),
   445  		),
   446  	},
   447  	".6": &Heuristics{
   448  		rule.And(
   449  			rule.MatchingLanguages("Roff Manpage"),
   450  			rule.Or(
   451  				rule.MatchingLanguages(""),
   452  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   453  			),
   454  			rule.Or(
   455  				rule.MatchingLanguages(""),
   456  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   457  			),
   458  			rule.Or(
   459  				rule.MatchingLanguages(""),
   460  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   461  			),
   462  		),
   463  		rule.And(
   464  			rule.MatchingLanguages("Roff Manpage"),
   465  			rule.Or(
   466  				rule.MatchingLanguages(""),
   467  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   468  			),
   469  			rule.Or(
   470  				rule.MatchingLanguages(""),
   471  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   472  			),
   473  		),
   474  		rule.Always(
   475  			rule.MatchingLanguages("Roff"),
   476  		),
   477  	},
   478  	".7": &Heuristics{
   479  		rule.And(
   480  			rule.MatchingLanguages("Roff Manpage"),
   481  			rule.Or(
   482  				rule.MatchingLanguages(""),
   483  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   484  			),
   485  			rule.Or(
   486  				rule.MatchingLanguages(""),
   487  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   488  			),
   489  			rule.Or(
   490  				rule.MatchingLanguages(""),
   491  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   492  			),
   493  		),
   494  		rule.And(
   495  			rule.MatchingLanguages("Roff Manpage"),
   496  			rule.Or(
   497  				rule.MatchingLanguages(""),
   498  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   499  			),
   500  			rule.Or(
   501  				rule.MatchingLanguages(""),
   502  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   503  			),
   504  		),
   505  		rule.Always(
   506  			rule.MatchingLanguages("Roff"),
   507  		),
   508  	},
   509  	".8": &Heuristics{
   510  		rule.And(
   511  			rule.MatchingLanguages("Roff Manpage"),
   512  			rule.Or(
   513  				rule.MatchingLanguages(""),
   514  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   515  			),
   516  			rule.Or(
   517  				rule.MatchingLanguages(""),
   518  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   519  			),
   520  			rule.Or(
   521  				rule.MatchingLanguages(""),
   522  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   523  			),
   524  		),
   525  		rule.And(
   526  			rule.MatchingLanguages("Roff Manpage"),
   527  			rule.Or(
   528  				rule.MatchingLanguages(""),
   529  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   530  			),
   531  			rule.Or(
   532  				rule.MatchingLanguages(""),
   533  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   534  			),
   535  		),
   536  		rule.Always(
   537  			rule.MatchingLanguages("Roff"),
   538  		),
   539  	},
   540  	".9": &Heuristics{
   541  		rule.And(
   542  			rule.MatchingLanguages("Roff Manpage"),
   543  			rule.Or(
   544  				rule.MatchingLanguages(""),
   545  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   546  			),
   547  			rule.Or(
   548  				rule.MatchingLanguages(""),
   549  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   550  			),
   551  			rule.Or(
   552  				rule.MatchingLanguages(""),
   553  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   554  			),
   555  		),
   556  		rule.And(
   557  			rule.MatchingLanguages("Roff Manpage"),
   558  			rule.Or(
   559  				rule.MatchingLanguages(""),
   560  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   561  			),
   562  			rule.Or(
   563  				rule.MatchingLanguages(""),
   564  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   565  			),
   566  		),
   567  		rule.Always(
   568  			rule.MatchingLanguages("Roff"),
   569  		),
   570  	},
   571  	".as": &Heuristics{
   572  		rule.Or(
   573  			rule.MatchingLanguages("ActionScript"),
   574  			regexp.MustCompile(`(?m)^\s*(package\s+[a-z0-9_\.]+|import\s+[a-zA-Z0-9_\.]+;|class\s+[A-Za-z0-9_]+\s+extends\s+[A-Za-z0-9_]+)`),
   575  		),
   576  		rule.Always(
   577  			rule.MatchingLanguages("AngelScript"),
   578  		),
   579  	},
   580  	".asc": &Heuristics{
   581  		rule.Or(
   582  			rule.MatchingLanguages("Public Key"),
   583  			regexp.MustCompile(`(?m)^(----[- ]BEGIN|ssh-(rsa|dss)) `),
   584  		),
   585  		rule.Or(
   586  			rule.MatchingLanguages("AsciiDoc"),
   587  			regexp.MustCompile(`(?m)^[=-]+(\s|\n)|{{[A-Za-z]`),
   588  		),
   589  		rule.Or(
   590  			rule.MatchingLanguages("AGS Script"),
   591  			regexp.MustCompile(`(?m)^(\/\/.+|((import|export)\s+)?(function|int|float|char)\s+((room|repeatedly|on|game)_)?([A-Za-z]+[A-Za-z_0-9]+)\s*[;\(])`),
   592  		),
   593  	},
   594  	".asy": &Heuristics{
   595  		rule.Or(
   596  			rule.MatchingLanguages("LTspice Symbol"),
   597  			regexp.MustCompile(`(?m)^SymbolType[ \t]`),
   598  		),
   599  		rule.Always(
   600  			rule.MatchingLanguages("Asymptote"),
   601  		),
   602  	},
   603  	".bb": &Heuristics{
   604  		rule.Or(
   605  			rule.MatchingLanguages("BlitzBasic"),
   606  			regexp.MustCompile(`(?m)(<^\s*; |End Function)`),
   607  		),
   608  		rule.Or(
   609  			rule.MatchingLanguages("BitBake"),
   610  			regexp.MustCompile(`(?m)^\s*(# |include|require)\b`),
   611  		),
   612  	},
   613  	".builds": &Heuristics{
   614  		rule.Or(
   615  			rule.MatchingLanguages("XML"),
   616  			regexp.MustCompile(`(?m)^(\s*)(?i:<Project|<Import|<Property|<?xml|xmlns)`),
   617  		),
   618  		rule.Always(
   619  			rule.MatchingLanguages("Text"),
   620  		),
   621  	},
   622  	".ch": &Heuristics{
   623  		rule.Or(
   624  			rule.MatchingLanguages("xBase"),
   625  			regexp.MustCompile(`(?m)^\s*#\s*(?i:if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b`),
   626  		),
   627  	},
   628  	".cl": &Heuristics{
   629  		rule.Or(
   630  			rule.MatchingLanguages("Common Lisp"),
   631  			regexp.MustCompile(`(?m)^\s*\((?i:defun|in-package|defpackage) `),
   632  		),
   633  		rule.Or(
   634  			rule.MatchingLanguages("Cool"),
   635  			regexp.MustCompile(`(?m)^class`),
   636  		),
   637  		rule.Or(
   638  			rule.MatchingLanguages("OpenCL"),
   639  			regexp.MustCompile(`(?m)\/\* |\/\/ |^\}`),
   640  		),
   641  	},
   642  	".cls": &Heuristics{
   643  		rule.Or(
   644  			rule.MatchingLanguages("TeX"),
   645  			regexp.MustCompile(`(?m)\\\w+{`),
   646  		),
   647  	},
   648  	".cs": &Heuristics{
   649  		rule.Or(
   650  			rule.MatchingLanguages("Smalltalk"),
   651  			regexp.MustCompile(`(?m)![\w\s]+methodsFor: `),
   652  		),
   653  		rule.Or(
   654  			rule.MatchingLanguages("C#"),
   655  			regexp.MustCompile(`(?m)^(\s*namespace\s*[\w\.]+\s*{|\s*\/\/)`),
   656  		),
   657  	},
   658  	".d": &Heuristics{
   659  		rule.Or(
   660  			rule.MatchingLanguages("D"),
   661  			regexp.MustCompile(`(?m)^module\s+[\w.]*\s*;|import\s+[\w\s,.:]*;|\w+\s+\w+\s*\(.*\)(?:\(.*\))?\s*{[^}]*}|unittest\s*(?:\(.*\))?\s*{[^}]*}`),
   662  		),
   663  		rule.Or(
   664  			rule.MatchingLanguages("DTrace"),
   665  			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)`),
   666  		),
   667  		rule.Or(
   668  			rule.MatchingLanguages("Makefile"),
   669  			regexp.MustCompile(`(?m)([\/\\].*:\s+.*\s\\$|: \\$|^ : |^[\w\s\/\\.]+\w+\.\w+\s*:\s+[\w\s\/\\.]+\w+\.\w+)`),
   670  		),
   671  	},
   672  	".ecl": &Heuristics{
   673  		rule.Or(
   674  			rule.MatchingLanguages("ECLiPSe"),
   675  			regexp.MustCompile(`(?m)^[^#]+:-`),
   676  		),
   677  		rule.Or(
   678  			rule.MatchingLanguages("ECL"),
   679  			regexp.MustCompile(`(?m):=`),
   680  		),
   681  	},
   682  	".es": &Heuristics{
   683  		rule.Or(
   684  			rule.MatchingLanguages("Erlang"),
   685  			regexp.MustCompile(`(?m)^\s*(?:%%|main\s*\(.*?\)\s*->)`),
   686  		),
   687  	},
   688  	".f": &Heuristics{
   689  		rule.Or(
   690  			rule.MatchingLanguages("Forth"),
   691  			regexp.MustCompile(`(?m)^: `),
   692  		),
   693  		rule.Or(
   694  			rule.MatchingLanguages("Filebench WML"),
   695  			regexp.MustCompile(`(?m)flowop`),
   696  		),
   697  		rule.Or(
   698  			rule.MatchingLanguages("Fortran"),
   699  			regexp.MustCompile(`(?m)^(?i:[c*][^abd-z]|      (subroutine|program|end|data)\s|\s*!)`),
   700  		),
   701  	},
   702  	".for": &Heuristics{
   703  		rule.Or(
   704  			rule.MatchingLanguages("Forth"),
   705  			regexp.MustCompile(`(?m)^: `),
   706  		),
   707  		rule.Or(
   708  			rule.MatchingLanguages("Fortran"),
   709  			regexp.MustCompile(`(?m)^(?i:[c*][^abd-z]|      (subroutine|program|end|data)\s|\s*!)`),
   710  		),
   711  	},
   712  	".fr": &Heuristics{
   713  		rule.Or(
   714  			rule.MatchingLanguages("Forth"),
   715  			regexp.MustCompile(`(?m)^(: |also |new-device|previous )`),
   716  		),
   717  		rule.Or(
   718  			rule.MatchingLanguages("Frege"),
   719  			regexp.MustCompile(`(?m)^\s*(import|module|package|data|type) `),
   720  		),
   721  		rule.Always(
   722  			rule.MatchingLanguages("Text"),
   723  		),
   724  	},
   725  	".fs": &Heuristics{
   726  		rule.Or(
   727  			rule.MatchingLanguages("Forth"),
   728  			regexp.MustCompile(`(?m)^(: |new-device)`),
   729  		),
   730  		rule.Or(
   731  			rule.MatchingLanguages("F#"),
   732  			regexp.MustCompile(`(?m)^\s*(#light|import|let|module|namespace|open|type)`),
   733  		),
   734  		rule.Or(
   735  			rule.MatchingLanguages("GLSL"),
   736  			regexp.MustCompile(`(?m)^\s*(#version|precision|uniform|varying|vec[234])`),
   737  		),
   738  		rule.Or(
   739  			rule.MatchingLanguages("Filterscript"),
   740  			regexp.MustCompile(`(?m)#include|#pragma\s+(rs|version)|__attribute__`),
   741  		),
   742  	},
   743  	".gd": &Heuristics{
   744  		rule.Or(
   745  			rule.MatchingLanguages("GAP"),
   746  			regexp.MustCompile(`(?m)\s*(Declare|BindGlobal|KeyDependentOperation)`),
   747  		),
   748  		rule.Or(
   749  			rule.MatchingLanguages("GDScript"),
   750  			regexp.MustCompile(`(?m)\s*(extends|var|const|enum|func|class|signal|tool|yield|assert|onready)`),
   751  		),
   752  	},
   753  	".gml": &Heuristics{
   754  		rule.Or(
   755  			rule.MatchingLanguages("XML"),
   756  			regexp.MustCompile(`(?m)(?i:^\s*(\<\?xml|xmlns))`),
   757  		),
   758  		rule.Or(
   759  			rule.MatchingLanguages("Graph Modeling Language"),
   760  			regexp.MustCompile(`(?m)(?i:^\s*(graph|node)\s+\[$)`),
   761  		),
   762  		rule.Always(
   763  			rule.MatchingLanguages("Game Maker Language"),
   764  		),
   765  	},
   766  	".gs": &Heuristics{
   767  		rule.Or(
   768  			rule.MatchingLanguages("Gosu"),
   769  			regexp.MustCompile(`(?m)^uses java\.`),
   770  		),
   771  	},
   772  	".h": &Heuristics{
   773  		rule.Or(
   774  			rule.MatchingLanguages("Objective-C"),
   775  			regexp.MustCompile(`(?m)^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])`),
   776  		),
   777  		rule.Or(
   778  			rule.MatchingLanguages("C++"),
   779  			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|^[ \t]*catch\s*\(|^[ \t]*(class|(using[ \t]+)?namespace)\s+\w+|^[ \t]*(private|public|protected):$|std::\w+`),
   780  		),
   781  	},
   782  	".hh": &Heuristics{
   783  		rule.Or(
   784  			rule.MatchingLanguages("Hack"),
   785  			regexp.MustCompile(`(?m)<\?hh`),
   786  		),
   787  	},
   788  	".ice": &Heuristics{
   789  		rule.Or(
   790  			rule.MatchingLanguages("JSON"),
   791  			regexp.MustCompile(`(?m)\A\s*[{\[]`),
   792  		),
   793  		rule.Always(
   794  			rule.MatchingLanguages("Slice"),
   795  		),
   796  	},
   797  	".inc": &Heuristics{
   798  		rule.Or(
   799  			rule.MatchingLanguages("PHP"),
   800  			regexp.MustCompile(`(?m)^<\?(?:php)?`),
   801  		),
   802  		rule.Or(
   803  			rule.MatchingLanguages("POV-Ray SDL"),
   804  			regexp.MustCompile(`(?m)^\s*#(declare|local|macro|while)\s`),
   805  		),
   806  	},
   807  	".l": &Heuristics{
   808  		rule.Or(
   809  			rule.MatchingLanguages("Common Lisp"),
   810  			regexp.MustCompile(`(?m)\(def(un|macro)\s`),
   811  		),
   812  		rule.Or(
   813  			rule.MatchingLanguages("Lex"),
   814  			regexp.MustCompile(`(?m)^(%[%{}]xs|<.*>)`),
   815  		),
   816  		rule.Or(
   817  			rule.MatchingLanguages("Roff"),
   818  			regexp.MustCompile(`(?m)^\.[A-Za-z]{2}(\s|$)`),
   819  		),
   820  		rule.Or(
   821  			rule.MatchingLanguages("PicoLisp"),
   822  			regexp.MustCompile(`(?m)^\((de|class|rel|code|data|must)\s`),
   823  		),
   824  	},
   825  	".lisp": &Heuristics{
   826  		rule.Or(
   827  			rule.MatchingLanguages("Common Lisp"),
   828  			regexp.MustCompile(`(?m)^\s*\((?i:defun|in-package|defpackage) `),
   829  		),
   830  		rule.Or(
   831  			rule.MatchingLanguages("NewLisp"),
   832  			regexp.MustCompile(`(?m)^\s*\(define `),
   833  		),
   834  	},
   835  	".ls": &Heuristics{
   836  		rule.Or(
   837  			rule.MatchingLanguages("LoomScript"),
   838  			regexp.MustCompile(`(?m)^\s*package\s*[\w\.\/\*\s]*\s*{`),
   839  		),
   840  		rule.Always(
   841  			rule.MatchingLanguages("LiveScript"),
   842  		),
   843  	},
   844  	".lsp": &Heuristics{
   845  		rule.Or(
   846  			rule.MatchingLanguages("Common Lisp"),
   847  			regexp.MustCompile(`(?m)^\s*\((?i:defun|in-package|defpackage) `),
   848  		),
   849  		rule.Or(
   850  			rule.MatchingLanguages("NewLisp"),
   851  			regexp.MustCompile(`(?m)^\s*\(define `),
   852  		),
   853  	},
   854  	".m": &Heuristics{
   855  		rule.Or(
   856  			rule.MatchingLanguages("Objective-C"),
   857  			regexp.MustCompile(`(?m)^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])`),
   858  		),
   859  		rule.Or(
   860  			rule.MatchingLanguages("Mercury"),
   861  			regexp.MustCompile(`(?m):- module`),
   862  		),
   863  		rule.Or(
   864  			rule.MatchingLanguages("MUF"),
   865  			regexp.MustCompile(`(?m)^: `),
   866  		),
   867  		rule.Or(
   868  			rule.MatchingLanguages("M"),
   869  			regexp.MustCompile(`(?m)^\s*;`),
   870  		),
   871  		rule.Or(
   872  			rule.MatchingLanguages("Mathematica"),
   873  			regexp.MustCompile(`(?m)\*\)$`),
   874  		),
   875  		rule.Or(
   876  			rule.MatchingLanguages("MATLAB"),
   877  			regexp.MustCompile(`(?m)^\s*%`),
   878  		),
   879  		rule.Or(
   880  			rule.MatchingLanguages("Limbo"),
   881  			regexp.MustCompile(`(?m)^\w+\s*:\s*module\s*{`),
   882  		),
   883  	},
   884  	".man": &Heuristics{
   885  		rule.And(
   886  			rule.MatchingLanguages("Roff Manpage"),
   887  			rule.Or(
   888  				rule.MatchingLanguages(""),
   889  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   890  			),
   891  			rule.Or(
   892  				rule.MatchingLanguages(""),
   893  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   894  			),
   895  			rule.Or(
   896  				rule.MatchingLanguages(""),
   897  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   898  			),
   899  		),
   900  		rule.And(
   901  			rule.MatchingLanguages("Roff Manpage"),
   902  			rule.Or(
   903  				rule.MatchingLanguages(""),
   904  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   905  			),
   906  			rule.Or(
   907  				rule.MatchingLanguages(""),
   908  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   909  			),
   910  		),
   911  		rule.Always(
   912  			rule.MatchingLanguages("Roff"),
   913  		),
   914  	},
   915  	".md": &Heuristics{
   916  		rule.Or(
   917  			rule.MatchingLanguages("Markdown"),
   918  			regexp.MustCompile(`(?m)(^[-A-Za-z0-9=#!\*\[|>])|<\/|\A\z`),
   919  		),
   920  		rule.Or(
   921  			rule.MatchingLanguages("GCC Machine Description"),
   922  			regexp.MustCompile(`(?m)^(;;|\(define_)`),
   923  		),
   924  		rule.Always(
   925  			rule.MatchingLanguages("Markdown"),
   926  		),
   927  	},
   928  	".mdoc": &Heuristics{
   929  		rule.And(
   930  			rule.MatchingLanguages("Roff Manpage"),
   931  			rule.Or(
   932  				rule.MatchingLanguages(""),
   933  				regexp.MustCompile(`(?m)^[.'][ \t]*Dd +(?:[^"\s]+|"[^"]+")`),
   934  			),
   935  			rule.Or(
   936  				rule.MatchingLanguages(""),
   937  				regexp.MustCompile(`(?m)^[.'][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   938  			),
   939  			rule.Or(
   940  				rule.MatchingLanguages(""),
   941  				regexp.MustCompile(`(?m)^[.'][ \t]*Sh +(?:[^"\s]|"[^"]+")`),
   942  			),
   943  		),
   944  		rule.And(
   945  			rule.MatchingLanguages("Roff Manpage"),
   946  			rule.Or(
   947  				rule.MatchingLanguages(""),
   948  				regexp.MustCompile(`(?m)^[.'][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)`),
   949  			),
   950  			rule.Or(
   951  				rule.MatchingLanguages(""),
   952  				regexp.MustCompile(`(?m)^[.'][ \t]*SH +(?:[^"\s]+|"[^"\s]+)`),
   953  			),
   954  		),
   955  		rule.Always(
   956  			rule.MatchingLanguages("Roff"),
   957  		),
   958  	},
   959  	".ml": &Heuristics{
   960  		rule.Or(
   961  			rule.MatchingLanguages("OCaml"),
   962  			regexp.MustCompile(`(?m)(^\s*module)|let rec |match\s+(\S+\s)+with`),
   963  		),
   964  		rule.Or(
   965  			rule.MatchingLanguages("Standard ML"),
   966  			regexp.MustCompile(`(?m)=> |case\s+(\S+\s)+of`),
   967  		),
   968  	},
   969  	".mod": &Heuristics{
   970  		rule.Or(
   971  			rule.MatchingLanguages("XML"),
   972  			regexp.MustCompile(`(?m)<!ENTITY `),
   973  		),
   974  		rule.Or(
   975  			rule.MatchingLanguages("Modula-2"),
   976  			regexp.MustCompile(`(?m)^\s*(?i:MODULE|END) [\w\.]+;`),
   977  		),
   978  		rule.Always(
   979  			rule.MatchingLanguages("Linux Kernel Module", "AMPL"),
   980  		),
   981  	},
   982  	".ms": &Heuristics{
   983  		rule.Or(
   984  			rule.MatchingLanguages("Roff"),
   985  			regexp.MustCompile(`(?m)^[.'][A-Za-z]{2}(\s|$)`),
   986  		),
   987  		rule.And(
   988  			rule.MatchingLanguages("Unix Assembly"),
   989  			rule.Not(
   990  				rule.MatchingLanguages(""),
   991  				regexp.MustCompile(`(?m)/\*`),
   992  			),
   993  			rule.Or(
   994  				rule.MatchingLanguages(""),
   995  				regexp.MustCompile(`(?m)^\s*\.(?:include\s|globa?l\s|[A-Za-z][_A-Za-z0-9]*:)`),
   996  			),
   997  		),
   998  		rule.Always(
   999  			rule.MatchingLanguages("MAXScript"),
  1000  		),
  1001  	},
  1002  	".n": &Heuristics{
  1003  		rule.Or(
  1004  			rule.MatchingLanguages("Roff"),
  1005  			regexp.MustCompile(`(?m)^[.']`),
  1006  		),
  1007  		rule.Or(
  1008  			rule.MatchingLanguages("Nemerle"),
  1009  			regexp.MustCompile(`(?m)^(module|namespace|using)\s`),
  1010  		),
  1011  	},
  1012  	".ncl": &Heuristics{
  1013  		rule.Or(
  1014  			rule.MatchingLanguages("XML"),
  1015  			regexp.MustCompile(`(?m)^\s*<\?xml\s+version`),
  1016  		),
  1017  		rule.Or(
  1018  			rule.MatchingLanguages("Text"),
  1019  			regexp.MustCompile(`(?m)THE_TITLE`),
  1020  		),
  1021  	},
  1022  	".nl": &Heuristics{
  1023  		rule.Or(
  1024  			rule.MatchingLanguages("NL"),
  1025  			regexp.MustCompile(`(?m)^(b|g)[0-9]+ `),
  1026  		),
  1027  		rule.Always(
  1028  			rule.MatchingLanguages("NewLisp"),
  1029  		),
  1030  	},
  1031  	".php": &Heuristics{
  1032  		rule.Or(
  1033  			rule.MatchingLanguages("Hack"),
  1034  			regexp.MustCompile(`(?m)<\?hh`),
  1035  		),
  1036  		rule.Or(
  1037  			rule.MatchingLanguages("PHP"),
  1038  			regexp.MustCompile(`(?m)<\?[^h]`),
  1039  		),
  1040  	},
  1041  	".pl": &Heuristics{
  1042  		rule.Or(
  1043  			rule.MatchingLanguages("Prolog"),
  1044  			regexp.MustCompile(`(?m)^[^#]*:-`),
  1045  		),
  1046  		rule.Or(
  1047  			rule.MatchingLanguages("Perl"),
  1048  			regexp.MustCompile(`(?m)\buse\s+(?:strict\b|v?5\.)`),
  1049  		),
  1050  		rule.Or(
  1051  			rule.MatchingLanguages("Perl 6"),
  1052  			regexp.MustCompile(`(?m)^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)`),
  1053  		),
  1054  	},
  1055  	".pm": &Heuristics{
  1056  		rule.Or(
  1057  			rule.MatchingLanguages("Perl"),
  1058  			regexp.MustCompile(`(?m)\buse\s+(?:strict\b|v?5\.)`),
  1059  		),
  1060  		rule.Or(
  1061  			rule.MatchingLanguages("Perl 6"),
  1062  			regexp.MustCompile(`(?m)^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)`),
  1063  		),
  1064  		rule.Or(
  1065  			rule.MatchingLanguages("XPM"),
  1066  			regexp.MustCompile(`(?m)^\s*\/\* XPM \*\/`),
  1067  		),
  1068  	},
  1069  	".pod": &Heuristics{
  1070  		rule.Or(
  1071  			rule.MatchingLanguages("Pod 6"),
  1072  			regexp.MustCompile(`(?m)^[\s&&[^\n]]*=(comment|begin pod|begin para|item\d+)`),
  1073  		),
  1074  		rule.Always(
  1075  			rule.MatchingLanguages("Pod"),
  1076  		),
  1077  	},
  1078  	".pp": &Heuristics{
  1079  		rule.Or(
  1080  			rule.MatchingLanguages("Pascal"),
  1081  			regexp.MustCompile(`(?m)^\s*end[.;]`),
  1082  		),
  1083  		rule.Or(
  1084  			rule.MatchingLanguages("Puppet"),
  1085  			regexp.MustCompile(`(?m)^\s+\w+\s+=>\s`),
  1086  		),
  1087  	},
  1088  	".pro": &Heuristics{
  1089  		rule.Or(
  1090  			rule.MatchingLanguages("Prolog"),
  1091  			regexp.MustCompile(`(?m)^[^\[#]+:-`),
  1092  		),
  1093  		rule.Or(
  1094  			rule.MatchingLanguages("INI"),
  1095  			regexp.MustCompile(`(?m)last_client=`),
  1096  		),
  1097  		rule.And(
  1098  			rule.MatchingLanguages("QMake"),
  1099  			rule.Or(
  1100  				rule.MatchingLanguages(""),
  1101  				regexp.MustCompile(`(?m)HEADERS`),
  1102  			),
  1103  			rule.Or(
  1104  				rule.MatchingLanguages(""),
  1105  				regexp.MustCompile(`(?m)SOURCES`),
  1106  			),
  1107  		),
  1108  		rule.Or(
  1109  			rule.MatchingLanguages("IDL"),
  1110  			regexp.MustCompile(`(?m)^\s*function[ \w,]+$`),
  1111  		),
  1112  	},
  1113  	".properties": &Heuristics{
  1114  		rule.And(
  1115  			rule.MatchingLanguages("INI"),
  1116  			rule.Or(
  1117  				rule.MatchingLanguages(""),
  1118  				regexp.MustCompile(`(?m)^[^#!;][^=]*=`),
  1119  			),
  1120  			rule.Or(
  1121  				rule.MatchingLanguages(""),
  1122  				regexp.MustCompile(`(?m)^[;\[]`),
  1123  			),
  1124  		),
  1125  		rule.And(
  1126  			rule.MatchingLanguages("Java Properties"),
  1127  			rule.Or(
  1128  				rule.MatchingLanguages(""),
  1129  				regexp.MustCompile(`(?m)^[^#!;][^=]*=`),
  1130  			),
  1131  			rule.Or(
  1132  				rule.MatchingLanguages(""),
  1133  				regexp.MustCompile(`(?m)^[#!]`),
  1134  			),
  1135  		),
  1136  		rule.Or(
  1137  			rule.MatchingLanguages("INI"),
  1138  			regexp.MustCompile(`(?m)^[^#!;][^=]*=`),
  1139  		),
  1140  		rule.Or(
  1141  			rule.MatchingLanguages("Java properties"),
  1142  			regexp.MustCompile(`(?m)^[^#!][^:]*:`),
  1143  		),
  1144  	},
  1145  	".props": &Heuristics{
  1146  		rule.Or(
  1147  			rule.MatchingLanguages("XML"),
  1148  			regexp.MustCompile(`(?m)^(\s*)(?i:<Project|<Import|<Property|<?xml|xmlns)`),
  1149  		),
  1150  		rule.Or(
  1151  			rule.MatchingLanguages("INI"),
  1152  			regexp.MustCompile(`(?m)(?i:\w+\s*=\s*)`),
  1153  		),
  1154  	},
  1155  	".q": &Heuristics{
  1156  		rule.Or(
  1157  			rule.MatchingLanguages("q"),
  1158  			regexp.MustCompile(`(?m)((?i:[A-Z.][\w.]*:{)|(^|\n)\\(cd?|d|l|p|ts?) )`),
  1159  		),
  1160  		rule.Or(
  1161  			rule.MatchingLanguages("HiveQL"),
  1162  			regexp.MustCompile(`(?m)(?i:SELECT\s+[\w*,]+\s+FROM|(CREATE|ALTER|DROP)\s(DATABASE|SCHEMA|TABLE))`),
  1163  		),
  1164  	},
  1165  	".r": &Heuristics{
  1166  		rule.Or(
  1167  			rule.MatchingLanguages("Rebol"),
  1168  			regexp.MustCompile(`(?m)(?i:\bRebol\b)`),
  1169  		),
  1170  		rule.Or(
  1171  			rule.MatchingLanguages("R"),
  1172  			regexp.MustCompile(`(?m)<-|^\s*#`),
  1173  		),
  1174  	},
  1175  	".rno": &Heuristics{
  1176  		rule.Or(
  1177  			rule.MatchingLanguages("RUNOFF"),
  1178  			regexp.MustCompile(`(?m)(?i:^\.!|^\.end lit(?:eral)?\b)`),
  1179  		),
  1180  		rule.Or(
  1181  			rule.MatchingLanguages("Roff"),
  1182  			regexp.MustCompile(`(?m)^\.\\" `),
  1183  		),
  1184  	},
  1185  	".rpy": &Heuristics{
  1186  		rule.Or(
  1187  			rule.MatchingLanguages("Python"),
  1188  			regexp.MustCompile(`(?m)(?m:^(import|from|class|def)\s)`),
  1189  		),
  1190  		rule.Always(
  1191  			rule.MatchingLanguages("Ren'Py"),
  1192  		),
  1193  	},
  1194  	".rs": &Heuristics{
  1195  		rule.Or(
  1196  			rule.MatchingLanguages("Rust"),
  1197  			regexp.MustCompile(`(?m)^(use |fn |mod |pub |macro_rules|impl|#!?\[)`),
  1198  		),
  1199  		rule.Or(
  1200  			rule.MatchingLanguages("RenderScript"),
  1201  			regexp.MustCompile(`(?m)#include|#pragma\s+(rs|version)|__attribute__`),
  1202  		),
  1203  	},
  1204  	".sc": &Heuristics{
  1205  		rule.Or(
  1206  			rule.MatchingLanguages("SuperCollider"),
  1207  			regexp.MustCompile(`(?m)(?i:\^(this|super)\.|^\s*~\w+\s*=\.)`),
  1208  		),
  1209  		rule.Or(
  1210  			rule.MatchingLanguages("Scala"),
  1211  			regexp.MustCompile(`(?m)(^\s*import (scala|java)\.|^\s*class\b)`),
  1212  		),
  1213  	},
  1214  	".sql": &Heuristics{
  1215  		rule.Or(
  1216  			rule.MatchingLanguages("PLpgSQL"),
  1217  			regexp.MustCompile(`(?m)(?i:^\\i\b|AS \$\$|LANGUAGE '?plpgsql'?|SECURITY (DEFINER|INVOKER)|BEGIN( WORK| TRANSACTION)?;)`),
  1218  		),
  1219  		rule.Or(
  1220  			rule.MatchingLanguages("SQLPL"),
  1221  			regexp.MustCompile(`(?m)(?i:(alter module)|(language sql)|(begin( NOT)+ atomic)|signal SQLSTATE '[0-9]+')`),
  1222  		),
  1223  		rule.Or(
  1224  			rule.MatchingLanguages("PLSQL"),
  1225  			regexp.MustCompile(`(?m)(?i:\$\$PLSQL_|XMLTYPE|sysdate|systimestamp|\.nextval|connect by|AUTHID (DEFINER|CURRENT_USER)|constructor\W+function)`),
  1226  		),
  1227  		rule.Not(
  1228  			rule.MatchingLanguages("SQL"),
  1229  			regexp.MustCompile(`(?m)(?i:begin|boolean|package|exception)`),
  1230  		),
  1231  	},
  1232  	".srt": &Heuristics{
  1233  		rule.Or(
  1234  			rule.MatchingLanguages("SubRip Text"),
  1235  			regexp.MustCompile(`(?m)^(\d{2}:\d{2}:\d{2},\d{3})\s*(-->)\s*(\d{2}:\d{2}:\d{2},\d{3})$`),
  1236  		),
  1237  	},
  1238  	".t": &Heuristics{
  1239  		rule.Or(
  1240  			rule.MatchingLanguages("Perl"),
  1241  			regexp.MustCompile(`(?m)\buse\s+(?:strict\b|v?5\.)`),
  1242  		),
  1243  		rule.Or(
  1244  			rule.MatchingLanguages("Perl 6"),
  1245  			regexp.MustCompile(`(?m)^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)`),
  1246  		),
  1247  		rule.Or(
  1248  			rule.MatchingLanguages("Turing"),
  1249  			regexp.MustCompile(`(?m)^\s*%[ \t]+|^\s*var\s+\w+(\s*:\s*\w+)?\s*:=\s*\w+`),
  1250  		),
  1251  	},
  1252  	".toc": &Heuristics{
  1253  		rule.Or(
  1254  			rule.MatchingLanguages("World of Warcraft Addon Data"),
  1255  			regexp.MustCompile(`(?m)^## |@no-lib-strip@`),
  1256  		),
  1257  		rule.Or(
  1258  			rule.MatchingLanguages("TeX"),
  1259  			regexp.MustCompile(`(?m)^\\(contentsline|defcounter|beamer|boolfalse)`),
  1260  		),
  1261  	},
  1262  	".ts": &Heuristics{
  1263  		rule.Or(
  1264  			rule.MatchingLanguages("XML"),
  1265  			regexp.MustCompile(`(?m)<TS\b`),
  1266  		),
  1267  		rule.Always(
  1268  			rule.MatchingLanguages("TypeScript"),
  1269  		),
  1270  	},
  1271  	".tst": &Heuristics{
  1272  		rule.Or(
  1273  			rule.MatchingLanguages("GAP"),
  1274  			regexp.MustCompile(`(?m)gap> `),
  1275  		),
  1276  		rule.Always(
  1277  			rule.MatchingLanguages("Scilab"),
  1278  		),
  1279  	},
  1280  	".tsx": &Heuristics{
  1281  		rule.Or(
  1282  			rule.MatchingLanguages("TypeScript"),
  1283  			regexp.MustCompile(`(?m)^\s*(import.+(from\s+|require\()['"]react|\/\/\/\s*<reference\s)`),
  1284  		),
  1285  		rule.Or(
  1286  			rule.MatchingLanguages("XML"),
  1287  			regexp.MustCompile(`(?m)(?i:^\s*<\?xml\s+version)`),
  1288  		),
  1289  	},
  1290  	".w": &Heuristics{
  1291  		rule.Or(
  1292  			rule.MatchingLanguages("OpenEdge ABL"),
  1293  			regexp.MustCompile(`(?m)&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS`),
  1294  		),
  1295  		rule.Or(
  1296  			rule.MatchingLanguages("CWeb"),
  1297  			regexp.MustCompile(`(?m)^@(<|\w+\.)`),
  1298  		),
  1299  	},
  1300  	".x": &Heuristics{
  1301  		rule.Or(
  1302  			rule.MatchingLanguages("RPC"),
  1303  			regexp.MustCompile(`(?m)\b(program|version)\s+\w+\s*{|\bunion\s+\w+\s+switch\s*\(`),
  1304  		),
  1305  		rule.Or(
  1306  			rule.MatchingLanguages("Logos"),
  1307  			regexp.MustCompile(`(?m)^%(end|ctor|hook|group)\b`),
  1308  		),
  1309  		rule.Or(
  1310  			rule.MatchingLanguages("Linked Script"),
  1311  			regexp.MustCompile(`(?m)OUTPUT_ARCH\(|OUTPUT_FORMAT\(|SECTIONS`),
  1312  		),
  1313  	},
  1314  	".yy": &Heuristics{
  1315  		rule.Or(
  1316  			rule.MatchingLanguages("JSON"),
  1317  			regexp.MustCompile(`(?m)\"modelName\"\:\s*\"GM`),
  1318  		),
  1319  		rule.Always(
  1320  			rule.MatchingLanguages("Yacc"),
  1321  		),
  1322  	},
  1323  }