/
source.nanorc.js
212 lines (211 loc) · 7.1 KB
/
source.nanorc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/Alhadis/language-etc>
// and licensed `isc`.
// See <https://github.com/wooorm/starry-night> for more info.
/** @type {import('../lib/index.js').Grammar} */
const grammar = {
dependencies: ['injections.etc'],
extensions: ['.nanorc'],
names: ['nanorc'],
patterns: [{include: 'injections.etc#scopeHack'}, {include: '#main'}],
repository: {
colours: {
patterns: [
{
begin: '^\\s*(i?color)(?=\\s|$)',
beginCaptures: {1: {name: 'storage.type.var.colour.name.nanorc'}},
end: '$',
name: 'meta.colour.nanorc',
patterns: [
{
captures: {
1: {name: 'punctuation.separator.delimiter.meta.comma.nanorc'},
2: {name: 'entity.background.colour.name.nanorc'}
},
match: '\\G\\s*(,)(\\S+)'
},
{
captures: {
1: {name: 'entity.foreground.colour.name.nanorc'},
2: {name: 'punctuation.separator.delimiter.meta.comma.nanorc'},
3: {name: 'entity.background.colour.name.nanorc'}
},
match: '\\G\\s*((?!,)\\S+)(,)(\\S+)'
},
{
captures: {
1: {name: 'entity.foreground.colour.name.nanorc'},
2: {name: 'punctuation.separator.delimiter.meta.comma.nanorc'}
},
match: '\\G\\s*([^\\s,]+)(,?)(?=\\s|$)'
},
{
captures: {
1: {name: 'variable.parameter.attribute.nanorc'},
2: {
name: 'punctuation.definition.assignment.equals-sign.nanorc'
}
},
match: '(?<=\\s|\\G)(start|end)(=)(?=\\s|$)',
name: 'meta.$1-pattern.nanorc'
},
{
begin: '(?<=\\s|\\G)(start|end)(=)(?=")',
captures: {
1: {name: 'variable.parameter.attribute.nanorc'},
2: {
name: 'punctuation.definition.assignment.equals-sign.nanorc'
}
},
end: '(?<=")',
name: 'meta.$1-pattern.nanorc',
patterns: [{include: '#regexp'}]
},
{include: '#regexp'}
]
}
]
},
comment: {
begin: '#',
beginCaptures: {0: {name: 'punctuation.definition.comment.nanorc'}},
end: '$',
name: 'comment.line.number-sign.nanorc'
},
main: {
patterns: [
{include: '#comment'},
{include: '#colours'},
{include: '#syntax'},
{include: '#options'}
]
},
options: {
patterns: [
{
begin: '^\\s*(set)\\s+(fill|tabsize)(?=\\s|$)',
beginCaptures: {
1: {name: 'keyword.operator.$1.nanorc'},
2: {name: 'entity.option.name.nanorc'}
},
end: '$',
name: 'meta.option.$2.nanorc',
patterns: [
{
match: '[0-9]+',
name: 'constant.numeric.integer.int.decimal.nanorc'
}
]
},
{
begin:
'(?x) ^ \\s*\n(set|unset) \\s+\n(autoindent|backup|backwards|boldtext|casesensitive|const|cut\n|historylog|morespace|mouse|multibuffer|noconvert|nofollow|nohelp\n|nonewlines|nowrap|preserve|quickblank|rebinddelete|rebindkeypad\n|regexp|smarthome|smooth|suspend|tabstospaces|tempfile|view\n|wordbounds) (?=\\s|$)',
beginCaptures: {
1: {name: 'keyword.operator.$1.nanorc'},
2: {name: 'entity.option.name.nanorc'}
},
end: '$',
name: 'meta.option.$2.nanorc'
},
{
begin:
'(?x) ^ \\s*\n(set) \\s+\n(backupdir|brackets|matchbrackets|operatingdir\n|punct|speller|whitespace) (?=\\s|$)',
beginCaptures: {
1: {name: 'keyword.operator.$1.nanorc'},
2: {name: 'entity.option.name.nanorc'}
},
end: '$',
name: 'meta.option.$2.nanorc',
patterns: [{include: '#string'}]
},
{
begin: '^\\s*(include)(?=\\s|$)\\s*',
beginCaptures: {
1: {name: 'keyword.control.directive.include.nanorc'}
},
contentName: 'storage.modifier.import.file-name.nanorc',
end: '$',
name: 'meta.preprocessor.include.nanorc'
},
{
begin: '^\\s*(set)\\s+(quotestr)(?=\\s|$)',
beginCaptures: {
1: {name: 'keyword.operator.$1.nanorc'},
2: {name: 'entity.option.name.nanorc'}
},
end: '$',
name: 'meta.option.$2.nanorc',
patterns: [{include: '#regexp'}]
},
{
begin: '^\\s*(?:(set|unset)\\s+)?(\\S+)',
beginCaptures: {
1: {name: 'keyword.operator.$1.nanorc'},
2: {name: 'entity.option.name.nanorc'}
},
end: '$',
name: 'meta.option.custom.nanorc',
patterns: [
{
match: '\\b(true|false|on|off|yes|no)\\b',
name: 'constant.logical.boolean.$1.nanorc'
},
{
match: '[-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?=\\s|$)',
name: 'constant.numeric.decimal.nanorc'
},
{include: '#regexp'}
]
}
]
},
quotedString: {
begin: '"',
beginCaptures: {0: {name: 'punctuation.definition.string.begin.nanorc'}},
end: '"(?=[^"]*$)|(?=$)',
endCaptures: {0: {name: 'punctuation.definition.string.end.nanorc'}},
name: 'string.quoted.double.nanorc'
},
regexp: {
begin: '(")"?+',
beginCaptures: {1: {name: 'punctuation.definition.string.begin.nanorc'}},
end: '"(?=\\s|$)|(?=$)',
endCaptures: {0: {name: 'punctuation.definition.string.end.nanorc'}},
name: 'string.regexp.embedded.nanorc',
patterns: [{match: '(?:"(?!\\s|$))+'}, {include: 'source.regexp'}]
},
string: {
patterns: [{include: '#quotedString'}, {include: '#unquotedString'}]
},
syntax: {
patterns: [
{
captures: {
1: {name: 'storage.type.var.syntax.name.nanorc'},
2: {name: 'support.constant.language.$2.nanorc'}
},
match: '^\\s*(syntax)\\s+(none|default)(?=\\s|$)',
name: 'meta.syntax.nanorc'
},
{
begin:
'^\\s*(syntax)(?:\\s+((")[^"]+(")|\\S+)(?:\\s+(.*))?)?\\s*$\\s*',
beginCaptures: {
1: {name: 'storage.type.var.syntax.name.nanorc'},
2: {name: 'entity.syntax.name.nanorc'},
3: {name: 'punctuation.definition.name.begin.nanorc'},
4: {name: 'punctuation.definition.name.end.nanorc'},
5: {patterns: [{include: '#regexp'}]}
},
end: '^(?=\\s*syntax)',
name: 'meta.syntax.nanorc',
patterns: [{include: '#main'}]
}
]
},
unquotedString: {match: '\\S+', name: 'string.unquoted.bareword.nanorc'}
},
scopeName: 'source.nanorc'
}
export default grammar