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.

dart.go 3.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package d
  2. import (
  3. . "github.com/alecthomas/chroma" // nolint
  4. "github.com/alecthomas/chroma/lexers/internal"
  5. )
  6. // Dart lexer.
  7. var Dart = internal.Register(MustNewLexer(
  8. &Config{
  9. Name: "Dart",
  10. Aliases: []string{"dart"},
  11. Filenames: []string{"*.dart"},
  12. MimeTypes: []string{"text/x-dart"},
  13. DotAll: true,
  14. },
  15. Rules{
  16. "root": {
  17. Include("string_literal"),
  18. {`#!(.*?)$`, CommentPreproc, nil},
  19. {`\b(import|export)\b`, Keyword, Push("import_decl")},
  20. {`\b(library|source|part of|part)\b`, Keyword, nil},
  21. {`[^\S\n]+`, Text, nil},
  22. {`//.*?\n`, CommentSingle, nil},
  23. {`/\*.*?\*/`, CommentMultiline, nil},
  24. {`\b(class)\b(\s+)`, ByGroups(KeywordDeclaration, Text), Push("class")},
  25. {`\b(assert|break|case|catch|continue|default|do|else|finally|for|if|in|is|new|return|super|switch|this|throw|try|while)\b`, Keyword, nil},
  26. {`\b(abstract|async|await|const|extends|factory|final|get|implements|native|operator|set|static|sync|typedef|var|with|yield)\b`, KeywordDeclaration, nil},
  27. {`\b(bool|double|dynamic|int|num|Object|String|void)\b`, KeywordType, nil},
  28. {`\b(false|null|true)\b`, KeywordConstant, nil},
  29. {`[~!%^&*+=|?:<>/-]|as\b`, Operator, nil},
  30. {`[a-zA-Z_$]\w*:`, NameLabel, nil},
  31. {`[a-zA-Z_$]\w*`, Name, nil},
  32. {`[(){}\[\],.;]`, Punctuation, nil},
  33. {`0[xX][0-9a-fA-F]+`, LiteralNumberHex, nil},
  34. {`\d+(\.\d*)?([eE][+-]?\d+)?`, LiteralNumber, nil},
  35. {`\.\d+([eE][+-]?\d+)?`, LiteralNumber, nil},
  36. {`\n`, Text, nil},
  37. },
  38. "class": {
  39. {`[a-zA-Z_$]\w*`, NameClass, Pop(1)},
  40. },
  41. "import_decl": {
  42. Include("string_literal"),
  43. {`\s+`, Text, nil},
  44. {`\b(as|show|hide)\b`, Keyword, nil},
  45. {`[a-zA-Z_$]\w*`, Name, nil},
  46. {`\,`, Punctuation, nil},
  47. {`\;`, Punctuation, Pop(1)},
  48. },
  49. "string_literal": {
  50. {`r"""([\w\W]*?)"""`, LiteralStringDouble, nil},
  51. {`r'''([\w\W]*?)'''`, LiteralStringSingle, nil},
  52. {`r"(.*?)"`, LiteralStringDouble, nil},
  53. {`r'(.*?)'`, LiteralStringSingle, nil},
  54. {`"""`, LiteralStringDouble, Push("string_double_multiline")},
  55. {`'''`, LiteralStringSingle, Push("string_single_multiline")},
  56. {`"`, LiteralStringDouble, Push("string_double")},
  57. {`'`, LiteralStringSingle, Push("string_single")},
  58. },
  59. "string_common": {
  60. {`\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]*\}|[a-z'\"$\\])`, LiteralStringEscape, nil},
  61. {`(\$)([a-zA-Z_]\w*)`, ByGroups(LiteralStringInterpol, Name), nil},
  62. {`(\$\{)(.*?)(\})`, ByGroups(LiteralStringInterpol, UsingSelf("root"), LiteralStringInterpol), nil},
  63. },
  64. "string_double": {
  65. {`"`, LiteralStringDouble, Pop(1)},
  66. {`[^"$\\\n]+`, LiteralStringDouble, nil},
  67. Include("string_common"),
  68. {`\$+`, LiteralStringDouble, nil},
  69. },
  70. "string_double_multiline": {
  71. {`"""`, LiteralStringDouble, Pop(1)},
  72. {`[^"$\\]+`, LiteralStringDouble, nil},
  73. Include("string_common"),
  74. {`(\$|\")+`, LiteralStringDouble, nil},
  75. },
  76. "string_single": {
  77. {`'`, LiteralStringSingle, Pop(1)},
  78. {`[^'$\\\n]+`, LiteralStringSingle, nil},
  79. Include("string_common"),
  80. {`\$+`, LiteralStringSingle, nil},
  81. },
  82. "string_single_multiline": {
  83. {`'''`, LiteralStringSingle, Pop(1)},
  84. {`[^\'$\\]+`, LiteralStringSingle, nil},
  85. Include("string_common"),
  86. {`(\$|\')+`, LiteralStringSingle, nil},
  87. },
  88. },
  89. ))