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.
191 lines
6.5 KiB
191 lines
6.5 KiB
export var conf = { |
|
comments: { |
|
lineComment: '#' |
|
}, |
|
brackets: [ |
|
['{', '}'], |
|
['[', ']'], |
|
['(', ')'] |
|
], |
|
autoClosingPairs: [ |
|
{ open: '{', close: '}' }, |
|
{ open: '[', close: ']' }, |
|
{ open: '(', close: ')' }, |
|
{ open: '"', close: '"' }, |
|
{ open: '\'', close: '\'' }, |
|
], |
|
surroundingPairs: [ |
|
{ open: '{', close: '}' }, |
|
{ open: '[', close: ']' }, |
|
{ open: '(', close: ')' }, |
|
{ open: '"', close: '"' }, |
|
{ open: '\'', close: '\'' }, |
|
], |
|
folding: { |
|
offSide: true |
|
} |
|
}; |
|
export var language = { |
|
tokenPostfix: '.yaml', |
|
brackets: [ |
|
{ token: 'delimiter.bracket', open: '{', close: '}' }, |
|
{ token: 'delimiter.square', open: '[', close: ']' } |
|
], |
|
keywords: ['true', 'True', 'TRUE', 'false', 'False', 'FALSE', 'null', 'Null', 'Null', '~'], |
|
numberInteger: /(?:0|[+-]?[0-9]+)/, |
|
numberFloat: /(?:0|[+-]?[0-9]+)(?:\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/, |
|
numberOctal: /0o[0-7]+/, |
|
numberHex: /0x[0-9a-fA-F]+/, |
|
numberInfinity: /[+-]?\.(?:inf|Inf|INF)/, |
|
numberNaN: /\.(?:nan|Nan|NAN)/, |
|
numberDate: /\d{4}-\d\d-\d\d([Tt ]\d\d:\d\d:\d\d(\.\d+)?(( ?[+-]\d\d?(:\d\d)?)|Z)?)?/, |
|
escapes: /\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/, |
|
tokenizer: { |
|
root: [ |
|
{ include: '@whitespace' }, |
|
{ include: '@comment' }, |
|
// Directive |
|
[/%[^ ]+.*$/, 'meta.directive'], |
|
// Document Markers |
|
[/---/, 'operators.directivesEnd'], |
|
[/\.{3}/, 'operators.documentEnd'], |
|
// Block Structure Indicators |
|
[/[-?:](?= )/, 'operators'], |
|
{ include: '@anchor' }, |
|
{ include: '@tagHandle' }, |
|
{ include: '@flowCollections' }, |
|
{ include: '@blockStyle' }, |
|
// Numbers |
|
[/@numberInteger(?![ \t]*\S+)/, 'number'], |
|
[/@numberFloat(?![ \t]*\S+)/, 'number.float'], |
|
[/@numberOctal(?![ \t]*\S+)/, 'number.octal'], |
|
[/@numberHex(?![ \t]*\S+)/, 'number.hex'], |
|
[/@numberInfinity(?![ \t]*\S+)/, 'number.infinity'], |
|
[/@numberNaN(?![ \t]*\S+)/, 'number.nan'], |
|
[/@numberDate(?![ \t]*\S+)/, 'number.date'], |
|
// Key:Value pair |
|
[/(".*?"|'.*?'|.*?)([ \t]*)(:)( |$)/, ['type', 'white', 'operators', 'white']], |
|
{ include: '@flowScalars' }, |
|
// String nodes |
|
[/.+$/, { |
|
cases: { |
|
'@keywords': 'keyword', |
|
'@default': 'string' |
|
} |
|
}] |
|
], |
|
// Flow Collection: Flow Mapping |
|
object: [ |
|
{ include: '@whitespace' }, |
|
{ include: '@comment' }, |
|
// Flow Mapping termination |
|
[/\}/, '@brackets', '@pop'], |
|
// Flow Mapping delimiter |
|
[/,/, 'delimiter.comma'], |
|
// Flow Mapping Key:Value delimiter |
|
[/:(?= )/, 'operators'], |
|
// Flow Mapping Key:Value key |
|
[/(?:".*?"|'.*?'|[^,\{\[]+?)(?=: )/, 'type'], |
|
// Start Flow Style |
|
{ include: '@flowCollections' }, |
|
{ include: '@flowScalars' }, |
|
// Scalar Data types |
|
{ include: '@tagHandle' }, |
|
{ include: '@anchor' }, |
|
{ include: '@flowNumber' }, |
|
// Other value (keyword or string) |
|
[/[^\},]+/, { |
|
cases: { |
|
'@keywords': 'keyword', |
|
'@default': 'string' |
|
} |
|
}] |
|
], |
|
// Flow Collection: Flow Sequence |
|
array: [ |
|
{ include: '@whitespace' }, |
|
{ include: '@comment' }, |
|
// Flow Sequence termination |
|
[/\]/, '@brackets', '@pop'], |
|
// Flow Sequence delimiter |
|
[/,/, 'delimiter.comma'], |
|
// Start Flow Style |
|
{ include: '@flowCollections' }, |
|
{ include: '@flowScalars' }, |
|
// Scalar Data types |
|
{ include: '@tagHandle' }, |
|
{ include: '@anchor' }, |
|
{ include: '@flowNumber' }, |
|
// Other value (keyword or string) |
|
[/[^\],]+/, { |
|
cases: { |
|
'@keywords': 'keyword', |
|
'@default': 'string' |
|
} |
|
}] |
|
], |
|
// Flow Scalars (quoted strings) |
|
string: [ |
|
[/[^\\"']+/, 'string'], |
|
[/@escapes/, 'string.escape'], |
|
[/\\./, 'string.escape.invalid'], |
|
[/["']/, { |
|
cases: { |
|
'$#==$S2': { token: 'string', next: '@pop' }, |
|
'@default': 'string' |
|
} |
|
}] |
|
], |
|
// First line of a Block Style |
|
multiString: [ |
|
[/^( +).+$/, 'string', '@multiStringContinued.$1'] |
|
], |
|
// Further lines of a Block Style |
|
// Workaround for indentation detection |
|
multiStringContinued: [ |
|
[/^( *).+$/, { |
|
cases: { |
|
'$1==$S2': 'string', |
|
'@default': { token: '@rematch', next: '@popall' } |
|
} |
|
}] |
|
], |
|
whitespace: [ |
|
[/[ \t\r\n]+/, 'white'] |
|
], |
|
// Only line comments |
|
comment: [ |
|
[/#.*$/, 'comment'] |
|
], |
|
// Start Flow Collections |
|
flowCollections: [ |
|
[/\[/, '@brackets', '@array'], |
|
[/\{/, '@brackets', '@object'] |
|
], |
|
// Start Flow Scalars (quoted strings) |
|
flowScalars: [ |
|
[/"/, 'string', '@string."'], |
|
[/'/, 'string', '@string.\''] |
|
], |
|
// Start Block Scalar |
|
blockStyle: [ |
|
[/[>|][0-9]*[+-]?$/, 'operators', '@multiString'] |
|
], |
|
// Numbers in Flow Collections (terminate with ,]}) |
|
flowNumber: [ |
|
[/@numberInteger(?=[ \t]*[,\]\}])/, 'number'], |
|
[/@numberFloat(?=[ \t]*[,\]\}])/, 'number.float'], |
|
[/@numberOctal(?=[ \t]*[,\]\}])/, 'number.octal'], |
|
[/@numberHex(?=[ \t]*[,\]\}])/, 'number.hex'], |
|
[/@numberInfinity(?=[ \t]*[,\]\}])/, 'number.infinity'], |
|
[/@numberNaN(?=[ \t]*[,\]\}])/, 'number.nan'], |
|
[/@numberDate(?=[ \t]*[,\]\}])/, 'number.date'] |
|
], |
|
tagHandle: [ |
|
[/\![^ ]*/, 'tag'] |
|
], |
|
anchor: [ |
|
[/[&*][^ ]+/, 'namespace'] |
|
] |
|
} |
|
};
|
|
|