| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 | /** * @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: MarkdownRequires: xml.jsAuthor: John Crepezzi <john.crepezzi@gmail.com>Website: https://daringfireball.net/projects/markdown/Category: common, markup*/function markdown(hljs) {  const INLINE_HTML = {    begin: /<\/?[A-Za-z_]/,    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 URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;  const LINK = {    variants: [      // too much like nested array access in so many languages      // to have any real relevance      {        begin: /\[.+?\]\[.*?\]/,        relevance: 0      },      // popular internet URLs      {        begin: /\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,        relevance: 2      },      {        begin: concat(/\[.+?\]\(/, URL_SCHEME, /:\/\/.*?\)/),        relevance: 2      },      // relative urls      {        begin: /\[.+?\]\([./?&#].*?\)/,        relevance: 1      },      // whatever else, lower relevance (might not be a link at all)      {        begin: /\[.+?\]\(.*?\)/,        relevance: 0      }    ],    returnBegin: true,    contains: [      {        className: 'string',        relevance: 0,        begin: '\\[',        end: '\\]',        excludeBegin: true,        returnEnd: true      },      {        className: 'link',        relevance: 0,        begin: '\\]\\(',        end: '\\)',        excludeBegin: true,        excludeEnd: true      },      {        className: 'symbol',        relevance: 0,        begin: '\\]\\[',        end: '\\]',        excludeBegin: true,        excludeEnd: true      }    ]  };  const BOLD = {    className: 'strong',    contains: [], // defined later    variants: [      {        begin: /_{2}/,        end: /_{2}/      },      {        begin: /\*{2}/,        end: /\*{2}/      }    ]  };  const ITALIC = {    className: 'emphasis',    contains: [], // defined later    variants: [      {        begin: /\*(?!\*)/,        end: /\*/      },      {        begin: /_(?!_)/,        end: /_/,        relevance: 0      }    ]  };  BOLD.contains.push(ITALIC);  ITALIC.contains.push(BOLD);  let 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    ]  };}module.exports = markdown;
 |