| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 | /** * @param {string} value * @returns {RegExp} * *//** * @param {RegExp | string } re * @returns {string} */function source(re) {  if (!re) return null;  if (typeof re === "string") return re;  return re.source;}/** * @param {...(RegExp | string) } args * @returns {string} */function concat(...args) {  const joined = args.map((x) => source(x)).join("");  return joined;}/*Language: AsciiDocRequires: xml.jsAuthor: Dan Allen <dan.j.allen@gmail.com>Website: http://asciidoc.orgDescription: A semantic, text-based document format that can be exported to HTML, DocBook and other backends.Category: markup*//** @type LanguageFn */function asciidoc(hljs) {  const HORIZONTAL_RULE = {    begin: '^\'{3,}[ \\t]*$',    relevance: 10  };  const ESCAPED_FORMATTING = [    // escaped constrained formatting marks (i.e., \* \_ or \`)    {      begin: /\\[*_`]/    },    // escaped unconstrained formatting marks (i.e., \\** \\__ or \\``)    // must ignore until the next formatting marks    // this rule might not be 100% compliant with Asciidoctor 2.0 but we are entering undefined behavior territory...    {      begin: /\\\\\*{2}[^\n]*?\*{2}/    },    {      begin: /\\\\_{2}[^\n]*_{2}/    },    {      begin: /\\\\`{2}[^\n]*`{2}/    },    // guard: constrained formatting mark may not be preceded by ":", ";" or    // "}". match these so the constrained rule doesn't see them    {      begin: /[:;}][*_`](?![*_`])/    }  ];  const STRONG = [    // inline unconstrained strong (single line)    {      className: 'strong',      begin: /\*{2}([^\n]+?)\*{2}/    },    // inline unconstrained strong (multi-line)    {      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)/    },    // inline constrained strong (multi-line)    {      className: 'strong',      // must not precede or follow a word character      begin: /\*[^\s]([^\n]+\n)+([^\n]+)\*/    }  ];  const EMPHASIS = [    // inline unconstrained emphasis (single line)    {      className: 'emphasis',      begin: /_{2}([^\n]+?)_{2}/    },    // inline unconstrained emphasis (multi-line)    {      className: 'emphasis',      begin: concat(        /__/,        /((_(?!_)|\\[^\n]|[^_\n\\])+\n)+/,        /(_(?!_)|\\[^\n]|[^_\n\\])*/,        /__/      ),      relevance: 0    },    // inline constrained emphasis (single line)    {      className: 'emphasis',      // must not precede or follow a word character      begin: /\b_(\S|\S[^\n]*?\S)_(?!\w)/    },    // inline constrained emphasis (multi-line)    {      className: 'emphasis',      // must not precede or follow a word character      begin: /_[^\s]([^\n]+\n)+([^\n]+)_/    },    // inline constrained emphasis using single quote (legacy)    {      className: 'emphasis',      // must not follow a word character or be followed by a single quote or space      begin: '\\B\'(?![\'\\s])',      end: '(\\n{2}|\')',      // allow escaped single quote followed by word char      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: [      // block comment      hljs.COMMENT(        '^/{4,}\\n',        '\\n/{4,}$',        // can also be done as...        // '^/{4,}$',        // '^/{4,}$',        {          relevance: 10        }      ),      // line comment      hljs.COMMENT(        '^//',        '$',        {          relevance: 0        }      ),      // title      {        className: 'title',        begin: '^\\.\\w.*$'      },      // example, admonition & sidebar blocks      {        begin: '^[=\\*]{4,}\\n',        end: '\\n^[=\\*]{4,}$',        relevance: 10      },      // headings      {        className: 'section',        relevance: 10,        variants: [          {            begin: '^(={1,6})[ \t].+?([ \t]\\1)?$'          },          {            begin: '^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$'          }        ]      },      // document attributes      {        className: 'meta',        begin: '^:.+?:',        end: '\\s',        excludeEnd: true,        relevance: 10      },      // block attributes      {        className: 'meta',        begin: '^\\[.+?\\]$',        relevance: 0      },      // quoteblocks      {        className: 'quote',        begin: '^_{4,}\\n',        end: '\\n_{4,}$',        relevance: 10      },      // listing and literal blocks      {        className: 'code',        begin: '^[\\-\\.]{4,}\\n',        end: '\\n[\\-\\.]{4,}$',        relevance: 10      },      // passthrough blocks      {        begin: '^\\+{4,}\\n',        end: '\\n\\+{4,}$',        contains: [{          begin: '<',          end: '>',          subLanguage: 'xml',          relevance: 0        }],        relevance: 10      },      BULLET_LIST,      ADMONITION,      ...ESCAPED_FORMATTING,      ...STRONG,      ...EMPHASIS,      // inline smart quotes      {        className: 'string',        variants: [          {            begin: "``.+?''"          },          {            begin: "`.+?'"          }        ]      },      // inline unconstrained emphasis      {        className: 'code',        begin: /`{2}/,        end: /(\n{2}|`{2})/      },      // inline code snippets (TODO should get same treatment as strong and emphasis)      {        className: 'code',        begin: '(`.+?`|\\+.+?\\+)',        relevance: 0      },      // indented literal block      {        className: 'code',        begin: '^[ \\t]',        end: '$',        relevance: 0      },      HORIZONTAL_RULE,      // images and links      {        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;
 |