This commit is contained in:
103
vendor/github.com/alecthomas/chroma/lexers/h/haskell.go
generated
vendored
Normal file
103
vendor/github.com/alecthomas/chroma/lexers/h/haskell.go
generated
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
package h
|
||||
|
||||
import (
|
||||
. "github.com/alecthomas/chroma" // nolint
|
||||
"github.com/alecthomas/chroma/lexers/internal"
|
||||
)
|
||||
|
||||
// Haskell lexer.
|
||||
var Haskell = internal.Register(MustNewLazyLexer(
|
||||
&Config{
|
||||
Name: "Haskell",
|
||||
Aliases: []string{"haskell", "hs"},
|
||||
Filenames: []string{"*.hs"},
|
||||
MimeTypes: []string{"text/x-haskell"},
|
||||
},
|
||||
haskellRules,
|
||||
))
|
||||
|
||||
func haskellRules() Rules {
|
||||
return Rules{
|
||||
"root": {
|
||||
{`\s+`, Text, nil},
|
||||
{`--(?![!#$%&*+./<=>?@^|_~:\\]).*?$`, CommentSingle, nil},
|
||||
{`\{-`, CommentMultiline, Push("comment")},
|
||||
{`\bimport\b`, KeywordReserved, Push("import")},
|
||||
{`\bmodule\b`, KeywordReserved, Push("module")},
|
||||
{`\berror\b`, NameException, nil},
|
||||
{`\b(case|class|data|default|deriving|do|else|family|if|in|infix[lr]?|instance|let|newtype|of|then|type|where|_)(?!\')\b`, KeywordReserved, nil},
|
||||
{`'[^\\]'`, LiteralStringChar, nil},
|
||||
{`^[_\p{Ll}][\w\']*`, NameFunction, nil},
|
||||
{`'?[_\p{Ll}][\w']*`, Name, nil},
|
||||
{`('')?[\p{Lu}][\w\']*`, KeywordType, nil},
|
||||
{`(')[\p{Lu}][\w\']*`, KeywordType, nil},
|
||||
{`(')\[[^\]]*\]`, KeywordType, nil},
|
||||
{`(')\([^)]*\)`, KeywordType, nil},
|
||||
{`\\(?![:!#$%&*+.\\/<=>?@^|~-]+)`, NameFunction, nil},
|
||||
{`(<-|::|->|=>|=)(?![:!#$%&*+.\\/<=>?@^|~-]+)`, OperatorWord, nil},
|
||||
{`:[:!#$%&*+.\\/<=>?@^|~-]*`, KeywordType, nil},
|
||||
{`[:!#$%&*+.\\/<=>?@^|~-]+`, Operator, nil},
|
||||
{`\d+[eE][+-]?\d+`, LiteralNumberFloat, nil},
|
||||
{`\d+\.\d+([eE][+-]?\d+)?`, LiteralNumberFloat, nil},
|
||||
{`0[oO][0-7]+`, LiteralNumberOct, nil},
|
||||
{`0[xX][\da-fA-F]+`, LiteralNumberHex, nil},
|
||||
{`\d+`, LiteralNumberInteger, nil},
|
||||
{`'`, LiteralStringChar, Push("character")},
|
||||
{`"`, LiteralString, Push("string")},
|
||||
{`\[\]`, KeywordType, nil},
|
||||
{`\(\)`, NameBuiltin, nil},
|
||||
{"[][(),;`{}]", Punctuation, nil},
|
||||
},
|
||||
"import": {
|
||||
{`\s+`, Text, nil},
|
||||
{`"`, LiteralString, Push("string")},
|
||||
{`\)`, Punctuation, Pop(1)},
|
||||
{`qualified\b`, Keyword, nil},
|
||||
{`([\p{Lu}][\w.]*)(\s+)(as)(\s+)([\p{Lu}][\w.]*)`, ByGroups(NameNamespace, Text, Keyword, Text, Name), Pop(1)},
|
||||
{`([\p{Lu}][\w.]*)(\s+)(hiding)(\s+)(\()`, ByGroups(NameNamespace, Text, Keyword, Text, Punctuation), Push("funclist")},
|
||||
{`([\p{Lu}][\w.]*)(\s+)(\()`, ByGroups(NameNamespace, Text, Punctuation), Push("funclist")},
|
||||
{`[\w.]+`, NameNamespace, Pop(1)},
|
||||
},
|
||||
"module": {
|
||||
{`\s+`, Text, nil},
|
||||
{`([\p{Lu}][\w.]*)(\s+)(\()`, ByGroups(NameNamespace, Text, Punctuation), Push("funclist")},
|
||||
{`[\p{Lu}][\w.]*`, NameNamespace, Pop(1)},
|
||||
},
|
||||
"funclist": {
|
||||
{`\s+`, Text, nil},
|
||||
{`[\p{Lu}]\w*`, KeywordType, nil},
|
||||
{`(_[\w\']+|[\p{Ll}][\w\']*)`, NameFunction, nil},
|
||||
{`--(?![!#$%&*+./<=>?@^|_~:\\]).*?$`, CommentSingle, nil},
|
||||
{`\{-`, CommentMultiline, Push("comment")},
|
||||
{`,`, Punctuation, nil},
|
||||
{`[:!#$%&*+.\\/<=>?@^|~-]+`, Operator, nil},
|
||||
{`\(`, Punctuation, Push("funclist", "funclist")},
|
||||
{`\)`, Punctuation, Pop(2)},
|
||||
},
|
||||
"comment": {
|
||||
{`[^-{}]+`, CommentMultiline, nil},
|
||||
{`\{-`, CommentMultiline, Push()},
|
||||
{`-\}`, CommentMultiline, Pop(1)},
|
||||
{`[-{}]`, CommentMultiline, nil},
|
||||
},
|
||||
"character": {
|
||||
{`[^\\']'`, LiteralStringChar, Pop(1)},
|
||||
{`\\`, LiteralStringEscape, Push("escape")},
|
||||
{`'`, LiteralStringChar, Pop(1)},
|
||||
},
|
||||
"string": {
|
||||
{`[^\\"]+`, LiteralString, nil},
|
||||
{`\\`, LiteralStringEscape, Push("escape")},
|
||||
{`"`, LiteralString, Pop(1)},
|
||||
},
|
||||
"escape": {
|
||||
{`[abfnrtv"\'&\\]`, LiteralStringEscape, Pop(1)},
|
||||
{`\^[][\p{Lu}@^_]`, LiteralStringEscape, Pop(1)},
|
||||
{`NUL|SOH|[SE]TX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|S[OI]|DLE|DC[1-4]|NAK|SYN|ETB|CAN|EM|SUB|ESC|[FGRU]S|SP|DEL`, LiteralStringEscape, Pop(1)},
|
||||
{`o[0-7]+`, LiteralStringEscape, Pop(1)},
|
||||
{`x[\da-fA-F]+`, LiteralStringEscape, Pop(1)},
|
||||
{`\d+`, LiteralStringEscape, Pop(1)},
|
||||
{`\s+\\`, LiteralStringEscape, Pop(1)},
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user