define(["require", "exports"], function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.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 } }; exports.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'] ] } }; });