99 lines
2.7 KiB
JavaScript
99 lines
2.7 KiB
JavaScript
module.exports = function(hljs) {
|
|
var LITERALS = 'true false yes no null';
|
|
|
|
// Define keys as starting with a word character
|
|
// ...containing word chars, spaces, colons, forward-slashes, hyphens and periods
|
|
// ...and ending with a colon followed immediately by a space, tab or newline.
|
|
// The YAML spec allows for much more than this, but this covers most use-cases.
|
|
var KEY = {
|
|
className: 'attr',
|
|
variants: [
|
|
{ begin: '\\w[\\w :\\/.-]*:(?=[ \t]|$)' },
|
|
{ begin: '"\\w[\\w :\\/.-]*":(?=[ \t]|$)' }, //double quoted keys
|
|
{ begin: '\'\\w[\\w :\\/.-]*\':(?=[ \t]|$)' } //single quoted keys
|
|
]
|
|
};
|
|
|
|
var TEMPLATE_VARIABLES = {
|
|
className: 'template-variable',
|
|
variants: [
|
|
{ begin: '\{\{', end: '\}\}' }, // jinja templates Ansible
|
|
{ begin: '%\{', end: '\}' } // Ruby i18n
|
|
]
|
|
};
|
|
var STRING = {
|
|
className: 'string',
|
|
relevance: 0,
|
|
variants: [
|
|
{begin: /'/, end: /'/},
|
|
{begin: /"/, end: /"/},
|
|
{begin: /\S+/}
|
|
],
|
|
contains: [
|
|
hljs.BACKSLASH_ESCAPE,
|
|
TEMPLATE_VARIABLES
|
|
]
|
|
};
|
|
|
|
return {
|
|
case_insensitive: true,
|
|
aliases: ['yml', 'YAML', 'yaml'],
|
|
contains: [
|
|
KEY,
|
|
{
|
|
className: 'meta',
|
|
begin: '^---\s*$',
|
|
relevance: 10
|
|
},
|
|
{ // multi line string
|
|
// Blocks start with a | or > followed by a newline
|
|
//
|
|
// Indentation of subsequent lines must be the same to
|
|
// be considered part of the block
|
|
className: 'string',
|
|
begin: '[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*',
|
|
},
|
|
{ // Ruby/Rails erb
|
|
begin: '<%[%=-]?', end: '[%-]?%>',
|
|
subLanguage: 'ruby',
|
|
excludeBegin: true,
|
|
excludeEnd: true,
|
|
relevance: 0
|
|
},
|
|
{ // local tags
|
|
className: 'type',
|
|
begin: '!' + hljs.UNDERSCORE_IDENT_RE,
|
|
},
|
|
{ // data type
|
|
className: 'type',
|
|
begin: '!!' + hljs.UNDERSCORE_IDENT_RE,
|
|
},
|
|
{ // fragment id &ref
|
|
className: 'meta',
|
|
begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$',
|
|
},
|
|
{ // fragment reference *ref
|
|
className: 'meta',
|
|
begin: '\\*' + hljs.UNDERSCORE_IDENT_RE + '$'
|
|
},
|
|
{ // array listing
|
|
className: 'bullet',
|
|
// TODO: remove |$ hack when we have proper look-ahead support
|
|
begin: '\\-(?=[ ]|$)',
|
|
relevance: 0
|
|
},
|
|
hljs.HASH_COMMENT_MODE,
|
|
{
|
|
beginKeywords: LITERALS,
|
|
keywords: {literal: LITERALS}
|
|
},
|
|
// numbers are any valid C-style number that
|
|
// sit isolated from other words
|
|
{
|
|
className: 'number',
|
|
begin: hljs.C_NUMBER_RE + '\\b'
|
|
},
|
|
STRING
|
|
]
|
|
};
|
|
}; |