You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

cql.go 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package c
  2. import (
  3. . "github.com/alecthomas/chroma" // nolint
  4. "github.com/alecthomas/chroma/lexers/internal"
  5. )
  6. // CassandraCQL lexer.
  7. var CassandraCQL = internal.Register(MustNewLexer(
  8. &Config{
  9. Name: "Cassandra CQL",
  10. Aliases: []string{"cassandra", "cql"},
  11. Filenames: []string{"*.cql"},
  12. MimeTypes: []string{"text/x-cql"},
  13. NotMultiline: true,
  14. CaseInsensitive: true,
  15. },
  16. Rules{
  17. "root": {
  18. {`\s+`, TextWhitespace, nil},
  19. {`(--|\/\/).*\n?`, CommentSingle, nil},
  20. {`/\*`, CommentMultiline, Push("multiline-comments")},
  21. {`(ascii|bigint|blob|boolean|counter|date|decimal|double|float|frozen|inet|int|list|map|set|smallint|text|time|timestamp|timeuuid|tinyint|tuple|uuid|varchar|varint)\b`, NameBuiltin, nil},
  22. {Words(``, `\b`, `ADD`, `AGGREGATE`, `ALL`, `ALLOW`, `ALTER`, `AND`, `ANY`, `APPLY`, `AS`, `ASC`, `AUTHORIZE`, `BATCH`, `BEGIN`, `BY`, `CLUSTERING`, `COLUMNFAMILY`, `COMPACT`, `CONSISTENCY`, `COUNT`, `CREATE`, `CUSTOM`, `DELETE`, `DESC`, `DISTINCT`, `DROP`, `EACH_QUORUM`, `ENTRIES`, `EXISTS`, `FILTERING`, `FROM`, `FULL`, `GRANT`, `IF`, `IN`, `INDEX`, `INFINITY`, `INSERT`, `INTO`, `KEY`, `KEYS`, `KEYSPACE`, `KEYSPACES`, `LEVEL`, `LIMIT`, `LOCAL_ONE`, `LOCAL_QUORUM`, `MATERIALIZED`, `MODIFY`, `NAN`, `NORECURSIVE`, `NOSUPERUSER`, `NOT`, `OF`, `ON`, `ONE`, `ORDER`, `PARTITION`, `PASSWORD`, `PER`, `PERMISSION`, `PERMISSIONS`, `PRIMARY`, `QUORUM`, `RENAME`, `REVOKE`, `SCHEMA`, `SELECT`, `STATIC`, `STORAGE`, `SUPERUSER`, `TABLE`, `THREE`, `TO`, `TOKEN`, `TRUNCATE`, `TTL`, `TWO`, `TYPE`, `UNLOGGED`, `UPDATE`, `USE`, `USER`, `USERS`, `USING`, `VALUES`, `VIEW`, `WHERE`, `WITH`, `WRITETIME`, `REPLICATION`, `OR`, `REPLACE`, `FUNCTION`, `CALLED`, `INPUT`, `RETURNS`, `LANGUAGE`, `ROLE`, `ROLES`, `TRIGGER`, `DURABLE_WRITES`, `LOGIN`, `OPTIONS`, `LOGGED`, `SFUNC`, `STYPE`, `FINALFUNC`, `INITCOND`, `IS`, `CONTAINS`, `JSON`, `PAGING`, `OFF`), Keyword, nil},
  23. {"[+*/<>=~!@#%^&|`?-]+", Operator, nil},
  24. {`(?s)(java|javascript)(\s+)(AS)(\s+)('|\$\$)(.*?)(\5)`,
  25. UsingByGroup(
  26. internal.Get,
  27. 1, 6,
  28. NameBuiltin, TextWhitespace, Keyword, TextWhitespace,
  29. LiteralStringHeredoc, LiteralStringHeredoc, LiteralStringHeredoc,
  30. ),
  31. nil,
  32. },
  33. {`(true|false|null)\b`, KeywordConstant, nil},
  34. {`0x[0-9a-f]+`, LiteralNumberHex, nil},
  35. {`[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}`, LiteralNumberHex, nil},
  36. {`\.[0-9]+(e[+-]?[0-9]+)?`, Error, nil},
  37. {`-?[0-9]+(\.[0-9])?(e[+-]?[0-9]+)?`, LiteralNumberFloat, nil},
  38. {`[0-9]+`, LiteralNumberInteger, nil},
  39. {`'`, LiteralStringSingle, Push("string")},
  40. {`"`, LiteralStringName, Push("quoted-ident")},
  41. {`\$\$`, LiteralStringHeredoc, Push("dollar-string")},
  42. {`[a-z_]\w*`, Name, nil},
  43. {`:(['"]?)[a-z]\w*\b\1`, NameVariable, nil},
  44. {`[;:()\[\]\{\},.]`, Punctuation, nil},
  45. },
  46. "multiline-comments": {
  47. {`/\*`, CommentMultiline, Push("multiline-comments")},
  48. {`\*/`, CommentMultiline, Pop(1)},
  49. {`[^/*]+`, CommentMultiline, nil},
  50. {`[/*]`, CommentMultiline, nil},
  51. },
  52. "string": {
  53. {`[^']+`, LiteralStringSingle, nil},
  54. {`''`, LiteralStringSingle, nil},
  55. {`'`, LiteralStringSingle, Pop(1)},
  56. },
  57. "quoted-ident": {
  58. {`[^"]+`, LiteralStringName, nil},
  59. {`""`, LiteralStringName, nil},
  60. {`"`, LiteralStringName, Pop(1)},
  61. },
  62. "dollar-string": {
  63. {`[^\$]+`, LiteralStringHeredoc, nil},
  64. {`\$\$`, LiteralStringHeredoc, Pop(1)},
  65. },
  66. },
  67. ))