highlight-ts
Version:
Highlight.JS in TypeScript (and ES6).
172 lines • 4.09 kB
JavaScript
/*
Language: Markdown
Requires: xml.js
Author: John Crepezzi <john.crepezzi@gmail.com>
Website: http://seejohncode.com/
Category: common, markup
*/
// inline links
var INLINE_LINK_MODE = {
begin: '<\\w+:[^>]*>',
returnBegin: true,
contains: [
{
className: 'link',
begin: '<', end: '>',
excludeBegin: true, excludeEnd: true
}
],
relevance: 5
};
// inline html
var INLINE_HTML_MODE = {
begin: '<', end: '>',
subLanguage: 'xml',
relevance: 0
};
// inline code
var INLINE_CODE_MODE = {
className: 'code',
begin: '`.+?`'
};
var STRONG_CONTAINS = [
INLINE_LINK_MODE,
INLINE_HTML_MODE,
INLINE_CODE_MODE,
];
// strong segments
var STRONG_MODE = {
className: 'strong',
variants: [
{
begin: '\\*{2}',
end: '\\*{2}',
contains: STRONG_CONTAINS
},
{
begin: '_{2}',
end: '_{2}',
contains: STRONG_CONTAINS
},
]
};
var EMPHASIS_CONTAINS = [
INLINE_LINK_MODE,
INLINE_HTML_MODE,
INLINE_CODE_MODE,
];
// emphasis segments
var EMPHASIS_MODE = {
className: 'emphasis',
variants: [
{
begin: '\\*(?!\\*)',
end: '\\*(?!\\*)',
contains: EMPHASIS_CONTAINS
},
{
begin: '_(?!_)',
end: '_(?!_)',
contains: EMPHASIS_CONTAINS,
relevance: 0,
},
]
};
var INLINE_CONTAINS = [
INLINE_LINK_MODE,
INLINE_HTML_MODE,
INLINE_CODE_MODE,
];
// using links - title and link
var LINK_MODE = {
begin: '\\!?\\[.+?\\][\\(\\[].*?[\\)\\]]',
returnBegin: true,
contains: [
{
className: 'string',
begin: '\\!?\\[', end: '\\]',
excludeBegin: true,
returnEnd: true,
contains: INLINE_CONTAINS,
relevance: 0
},
{
className: 'link',
begin: '\\]\\(', end: '\\)',
excludeBegin: true, excludeEnd: true
},
{
className: 'symbol',
begin: '\\]\\[', end: '\\]',
excludeBegin: true, excludeEnd: true
}
],
relevance: 10
};
STRONG_CONTAINS.push(EMPHASIS_MODE);
STRONG_CONTAINS.push(LINK_MODE);
EMPHASIS_CONTAINS.push(STRONG_MODE);
EMPHASIS_CONTAINS.push(LINK_MODE);
INLINE_CONTAINS.push(STRONG_MODE);
INLINE_CONTAINS.push(EMPHASIS_MODE);
INLINE_CONTAINS.push(LINK_MODE);
export var Markdown = {
name: 'markdown',
aliases: ['md', 'mkdown', 'mkd'],
contains: [
// highlight headers
{
className: 'section',
variants: [
{ begin: '^#{1,6}', end: '$' },
{ begin: '^.+?\\n[=-]{2,}$' }
],
contains: INLINE_CONTAINS
},
// lists (indicators only)
{
className: 'bullet',
begin: '^\\s*([*+-]|(\\d+\\.))\\s+'
},
// blockquotes
{
className: 'quote',
begin: '^>\\s+', end: '$',
contains: INLINE_CONTAINS
},
// code snippets
{
className: 'code',
variants: [
{
begin: '^```\w*\s*$', end: '^```\s*$'
},
{
begin: '^( {4}|\t)', end: '$',
relevance: 0
}
]
},
// horizontal rules
{
begin: '^[-\\*]{3,}', end: '$'
},
{
begin: /^\s*\[[^\n]+\]:/,
returnBegin: true,
contains: [
{
className: 'symbol',
begin: /\s*\[/, end: /\]/,
excludeBegin: true, excludeEnd: true
},
{
className: 'link',
begin: /:\s*/, end: /$/,
excludeBegin: true
}
]
}
].concat(INLINE_CONTAINS)
};
//# sourceMappingURL=markdown.js.map