...

Source file src/github.com/alecthomas/chroma/lexers/d/dart.go

Documentation: github.com/alecthomas/chroma/lexers/d

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

View as plain text