188 lines
6.4 KiB
JavaScript
Executable File
188 lines
6.4 KiB
JavaScript
Executable File
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'
|
|
}
|
|
}]
|
|
],
|
|
// 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.invalid'],
|
|
[/'([^'\\]|\\.)*$/, 'string.invalid'],
|
|
[/'[^']*'/, 'string'],
|
|
[/"/, 'string', '@doubleQuotedString']
|
|
],
|
|
doubleQuotedString: [
|
|
[/[^\\"]+/, 'string'],
|
|
[/@escapes/, 'string.escape'],
|
|
[/\\./, 'string.escape.invalid'],
|
|
[/"/, 'string', '@pop']
|
|
],
|
|
// 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']
|
|
]
|
|
}
|
|
};
|