123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- function source(re) {
- if (!re) return null;
- if (typeof re === "string") return re;
- return re.source;
- }
- function concat(...args) {
- const joined = args.map((x) => source(x)).join("");
- return joined;
- }
- function asciidoc(hljs) {
- const HORIZONTAL_RULE = {
- begin: '^\'{3,}[ \\t]*$',
- relevance: 10
- };
- const ESCAPED_FORMATTING = [
-
- {
- begin: /\\[*_`]/
- },
-
-
-
- {
- begin: /\\\\\*{2}[^\n]*?\*{2}/
- },
- {
- begin: /\\\\_{2}[^\n]*_{2}/
- },
- {
- begin: /\\\\`{2}[^\n]*`{2}/
- },
-
-
- {
- begin: /[:;}][*_`](?![*_`])/
- }
- ];
- const STRONG = [
-
- {
- className: 'strong',
- begin: /\*{2}([^\n]+?)\*{2}/
- },
-
- {
- className: 'strong',
- begin: concat(
- /\*\*/,
- /((\*(?!\*)|\\[^\n]|[^*\n\\])+\n)+/,
- /(\*(?!\*)|\\[^\n]|[^*\n\\])*/,
- /\*\*/
- ),
- relevance: 0
- },
- // inline constrained strong (single line)
- {
- className: 'strong',
- // must not precede or follow a word character
- begin: /\B\*(\S|\S[^\n]*?\S)\*(?!\w)/
- },
-
- {
- className: 'strong',
-
- begin: /\*[^\s]([^\n]+\n)+([^\n]+)\*/
- }
- ];
- const EMPHASIS = [
-
- {
- className: 'emphasis',
- begin: /_{2}([^\n]+?)_{2}/
- },
-
- {
- className: 'emphasis',
- begin: concat(
- /__/,
- /((_(?!_)|\\[^\n]|[^_\n\\])+\n)+/,
- /(_(?!_)|\\[^\n]|[^_\n\\])*/,
- /__/
- ),
- relevance: 0
- },
-
- {
- className: 'emphasis',
-
- begin: /\b_(\S|\S[^\n]*?\S)_(?!\w)/
- },
-
- {
- className: 'emphasis',
-
- begin: /_[^\s]([^\n]+\n)+([^\n]+)_/
- },
-
- {
- className: 'emphasis',
-
- begin: '\\B\'(?![\'\\s])',
- end: '(\\n{2}|\')',
-
- contains: [{
- begin: '\\\\\'\\w',
- relevance: 0
- }],
- relevance: 0
- }
- ];
- const ADMONITION = {
- className: 'symbol',
- begin: '^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+',
- relevance: 10
- };
- const BULLET_LIST = {
- className: 'bullet',
- begin: '^(\\*+|-+|\\.+|[^\\n]+?::)\\s+'
- };
- return {
- name: 'AsciiDoc',
- aliases: ['adoc'],
- contains: [
-
- hljs.COMMENT(
- '^/{4,}\\n',
- '\\n/{4,}$',
-
-
-
- {
- relevance: 10
- }
- ),
-
- hljs.COMMENT(
- '^//',
- '$',
- {
- relevance: 0
- }
- ),
-
- {
- className: 'title',
- begin: '^\\.\\w.*$'
- },
-
- {
- begin: '^[=\\*]{4,}\\n',
- end: '\\n^[=\\*]{4,}$',
- relevance: 10
- },
-
- {
- className: 'section',
- relevance: 10,
- variants: [
- {
- begin: '^(={1,6})[ \t].+?([ \t]\\1)?$'
- },
- {
- begin: '^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$'
- }
- ]
- },
-
- {
- className: 'meta',
- begin: '^:.+?:',
- end: '\\s',
- excludeEnd: true,
- relevance: 10
- },
-
- {
- className: 'meta',
- begin: '^\\[.+?\\]$',
- relevance: 0
- },
-
- {
- className: 'quote',
- begin: '^_{4,}\\n',
- end: '\\n_{4,}$',
- relevance: 10
- },
-
- {
- className: 'code',
- begin: '^[\\-\\.]{4,}\\n',
- end: '\\n[\\-\\.]{4,}$',
- relevance: 10
- },
-
- {
- begin: '^\\+{4,}\\n',
- end: '\\n\\+{4,}$',
- contains: [{
- begin: '<',
- end: '>',
- subLanguage: 'xml',
- relevance: 0
- }],
- relevance: 10
- },
- BULLET_LIST,
- ADMONITION,
- ...ESCAPED_FORMATTING,
- ...STRONG,
- ...EMPHASIS,
-
- {
- className: 'string',
- variants: [
- {
- begin: "``.+?''"
- },
- {
- begin: "`.+?'"
- }
- ]
- },
-
- {
- className: 'code',
- begin: /`{2}/,
- end: /(\n{2}|`{2})/
- },
-
- {
- className: 'code',
- begin: '(`.+?`|\\+.+?\\+)',
- relevance: 0
- },
-
- {
- className: 'code',
- begin: '^[ \\t]',
- end: '$',
- relevance: 0
- },
- HORIZONTAL_RULE,
-
- {
- begin: '(link:)?(http|https|ftp|file|irc|image:?):\\S+?\\[[^[]*?\\]',
- returnBegin: true,
- contains: [
- {
- begin: '(link|image:?):',
- relevance: 0
- },
- {
- className: 'link',
- begin: '\\w',
- end: '[^\\[]+',
- relevance: 0
- },
- {
- className: 'string',
- begin: '\\[',
- end: '\\]',
- excludeBegin: true,
- excludeEnd: true,
- relevance: 0
- }
- ],
- relevance: 10
- }
- ]
- };
- }
- module.exports = asciidoc;
|