1package s 2 3import ( 4 . "github.com/alecthomas/chroma" // nolint 5 "github.com/alecthomas/chroma/lexers/internal" 6) 7 8// Snobol lexer. 9var Snobol = internal.Register(MustNewLazyLexer( 10 &Config{ 11 Name: "Snobol", 12 Aliases: []string{"snobol"}, 13 Filenames: []string{"*.snobol"}, 14 MimeTypes: []string{"text/x-snobol"}, 15 }, 16 snobolRules, 17)) 18 19func snobolRules() Rules { 20 return Rules{ 21 "root": { 22 {`\*.*\n`, Comment, nil}, 23 {`[+.] `, Punctuation, Push("statement")}, 24 {`-.*\n`, Comment, nil}, 25 {`END\s*\n`, NameLabel, Push("heredoc")}, 26 {`[A-Za-z$][\w$]*`, NameLabel, Push("statement")}, 27 {`\s+`, Text, Push("statement")}, 28 }, 29 "statement": { 30 {`\s*\n`, Text, Pop(1)}, 31 {`\s+`, Text, nil}, 32 {`(?<=[^\w.])(LT|LE|EQ|NE|GE|GT|INTEGER|IDENT|DIFFER|LGT|SIZE|REPLACE|TRIM|DUPL|REMDR|DATE|TIME|EVAL|APPLY|OPSYN|LOAD|UNLOAD|LEN|SPAN|BREAK|ANY|NOTANY|TAB|RTAB|REM|POS|RPOS|FAIL|FENCE|ABORT|ARB|ARBNO|BAL|SUCCEED|INPUT|OUTPUT|TERMINAL)(?=[^\w.])`, NameBuiltin, nil}, 33 {`[A-Za-z][\w.]*`, Name, nil}, 34 {`\*\*|[?$.!%*/#+\-@|&\\=]`, Operator, nil}, 35 {`"[^"]*"`, LiteralString, nil}, 36 {`'[^']*'`, LiteralString, nil}, 37 {`[0-9]+(?=[^.EeDd])`, LiteralNumberInteger, nil}, 38 {`[0-9]+(\.[0-9]*)?([EDed][-+]?[0-9]+)?`, LiteralNumberFloat, nil}, 39 {`:`, Punctuation, Push("goto")}, 40 {`[()<>,;]`, Punctuation, nil}, 41 }, 42 "goto": { 43 {`\s*\n`, Text, Pop(2)}, 44 {`\s+`, Text, nil}, 45 {`F|S`, Keyword, nil}, 46 {`(\()([A-Za-z][\w.]*)(\))`, ByGroups(Punctuation, NameLabel, Punctuation), nil}, 47 }, 48 "heredoc": { 49 {`.*\n`, LiteralStringHeredoc, nil}, 50 }, 51 } 52} 53