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(MustNewLexer( 10 &Config{ 11 Name: "Snobol", 12 Aliases: []string{"snobol"}, 13 Filenames: []string{"*.snobol"}, 14 MimeTypes: []string{"text/x-snobol"}, 15 }, 16 Rules{ 17 "root": { 18 {`\*.*\n`, Comment, nil}, 19 {`[+.] `, Punctuation, Push("statement")}, 20 {`-.*\n`, Comment, nil}, 21 {`END\s*\n`, NameLabel, Push("heredoc")}, 22 {`[A-Za-z$][\w$]*`, NameLabel, Push("statement")}, 23 {`\s+`, Text, Push("statement")}, 24 }, 25 "statement": { 26 {`\s*\n`, Text, Pop(1)}, 27 {`\s+`, Text, nil}, 28 {`(?<=[^\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}, 29 {`[A-Za-z][\w.]*`, Name, nil}, 30 {`\*\*|[?$.!%*/#+\-@|&\\=]`, Operator, nil}, 31 {`"[^"]*"`, LiteralString, nil}, 32 {`'[^']*'`, LiteralString, nil}, 33 {`[0-9]+(?=[^.EeDd])`, LiteralNumberInteger, nil}, 34 {`[0-9]+(\.[0-9]*)?([EDed][-+]?[0-9]+)?`, LiteralNumberFloat, nil}, 35 {`:`, Punctuation, Push("goto")}, 36 {`[()<>,;]`, Punctuation, nil}, 37 }, 38 "goto": { 39 {`\s*\n`, Text, Pop(2)}, 40 {`\s+`, Text, nil}, 41 {`F|S`, Keyword, nil}, 42 {`(\()([A-Za-z][\w.]*)(\))`, ByGroups(Punctuation, NameLabel, Punctuation), nil}, 43 }, 44 "heredoc": { 45 {`.*\n`, LiteralStringHeredoc, nil}, 46 }, 47 }, 48)) 49