mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-08 08:26:20 +00:00
156 lines
3.3 KiB
JavaScript
156 lines
3.3 KiB
JavaScript
/*
|
|
Language: Markdown
|
|
Requires: xml.js
|
|
Author: John Crepezzi <john.crepezzi@gmail.com>
|
|
Website: https://daringfireball.net/projects/markdown/
|
|
Category: common, markup
|
|
*/
|
|
|
|
export default function(hljs) {
|
|
const INLINE_HTML = {
|
|
begin: '<', end: '>',
|
|
subLanguage: 'xml',
|
|
relevance: 0
|
|
};
|
|
const HORIZONTAL_RULE = {
|
|
begin: '^[-\\*]{3,}', end: '$'
|
|
};
|
|
const CODE = {
|
|
className: 'code',
|
|
variants: [
|
|
// TODO: fix to allow these to work with sublanguage also
|
|
{ begin: '(`{3,})(.|\\n)*?\\1`*[ ]*', },
|
|
{ begin: '(~{3,})(.|\\n)*?\\1~*[ ]*', },
|
|
// needed to allow markdown as a sublanguage to work
|
|
{ begin: '```', end: '```+[ ]*$' },
|
|
{ begin: '~~~', end: '~~~+[ ]*$' },
|
|
{ begin: '`.+?`' },
|
|
{
|
|
begin: '(?=^( {4}|\\t))',
|
|
// use contains to gobble up multiple lines to allow the block to be whatever size
|
|
// but only have a single open/close tag vs one per line
|
|
contains: [
|
|
{ begin: '^( {4}|\\t)', end: '(\\n)$' }
|
|
],
|
|
relevance: 0
|
|
}
|
|
]
|
|
};
|
|
const LIST = {
|
|
className: 'bullet',
|
|
begin: '^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)',
|
|
end: '\\s+',
|
|
excludeEnd: true
|
|
};
|
|
const LINK_REFERENCE = {
|
|
begin: /^\[[^\n]+\]:/,
|
|
returnBegin: true,
|
|
contains: [
|
|
{
|
|
className: 'symbol',
|
|
begin: /\[/, end: /\]/,
|
|
excludeBegin: true, excludeEnd: true
|
|
},
|
|
{
|
|
className: 'link',
|
|
begin: /:\s*/, end: /$/,
|
|
excludeBegin: true
|
|
}
|
|
]
|
|
};
|
|
const LINK = {
|
|
begin: '\\[.+?\\][\\(\\[].*?[\\)\\]]',
|
|
returnBegin: true,
|
|
contains: [
|
|
{
|
|
className: 'string',
|
|
begin: '\\[', end: '\\]',
|
|
excludeBegin: true,
|
|
returnEnd: true,
|
|
relevance: 0
|
|
},
|
|
{
|
|
className: 'link',
|
|
begin: '\\]\\(', end: '\\)',
|
|
excludeBegin: true, excludeEnd: true
|
|
},
|
|
{
|
|
className: 'symbol',
|
|
begin: '\\]\\[', end: '\\]',
|
|
excludeBegin: true, excludeEnd: true
|
|
}
|
|
],
|
|
relevance: 10
|
|
};
|
|
const BOLD = {
|
|
className: 'strong',
|
|
contains: [],
|
|
variants: [
|
|
{begin: /_{2}/, end: /_{2}/ },
|
|
{begin: /\*{2}/, end: /\*{2}/ }
|
|
]
|
|
};
|
|
const ITALIC = {
|
|
className: 'emphasis',
|
|
contains: [],
|
|
variants: [
|
|
{ begin: /\*(?!\*)/, end: /\*/ },
|
|
{ begin: /_(?!_)/, end: /_/, relevance: 0},
|
|
]
|
|
};
|
|
BOLD.contains.push(ITALIC);
|
|
ITALIC.contains.push(BOLD);
|
|
|
|
var CONTAINABLE = [
|
|
INLINE_HTML,
|
|
LINK
|
|
];
|
|
|
|
BOLD.contains = BOLD.contains.concat(CONTAINABLE);
|
|
ITALIC.contains = ITALIC.contains.concat(CONTAINABLE);
|
|
|
|
CONTAINABLE = CONTAINABLE.concat(BOLD,ITALIC);
|
|
|
|
const HEADER = {
|
|
className: 'section',
|
|
variants: [
|
|
{
|
|
begin: '^#{1,6}',
|
|
end: '$',
|
|
contains: CONTAINABLE
|
|
},
|
|
{
|
|
begin: '(?=^.+?\\n[=-]{2,}$)',
|
|
contains: [
|
|
{ begin: '^[=-]*$' },
|
|
{ begin: '^', end: "\\n", contains: CONTAINABLE },
|
|
]
|
|
}
|
|
]
|
|
};
|
|
|
|
const BLOCKQUOTE = {
|
|
className: 'quote',
|
|
begin: '^>\\s+',
|
|
contains: CONTAINABLE,
|
|
end: '$',
|
|
};
|
|
|
|
return {
|
|
name: 'Markdown',
|
|
aliases: ['md', 'mkdown', 'mkd'],
|
|
contains: [
|
|
HEADER,
|
|
INLINE_HTML,
|
|
LIST,
|
|
BOLD,
|
|
ITALIC,
|
|
BLOCKQUOTE,
|
|
CODE,
|
|
HORIZONTAL_RULE,
|
|
LINK,
|
|
LINK_REFERENCE
|
|
]
|
|
};
|
|
}
|