{"version":3,"sources":["webpack:///./node_modules/showdown/dist/showdown.js"],"names":["getDefaultOpts","simple","defaultOptions","omitExtraWLInCodeBlocks","defaultValue","describe","type","noHeaderId","prefixHeaderId","rawPrefixHeaderId","ghCompatibleHeaderId","rawHeaderId","headerLevelStart","parseImgDimensions","simplifiedAutoLink","excludeTrailingPunctuationFromURLs","literalMidWordUnderscores","literalMidWordAsterisks","strikethrough","tables","tablesHeaderId","ghCodeBlocks","tasklists","smoothLivePreview","smartIndentationFix","description","disableForced4SpacesIndentedSublists","simpleLineBreaks","requireSpaceBeforeHeadingText","ghMentions","ghMentionsLink","encodeEmails","openLinksInNewWindow","backslashEscapesHTMLTags","emoji","underline","completeHTMLDocument","metadata","splitAdjacentBlockquotes","JSON","parse","stringify","ret","opt","hasOwnProperty","showdown","parsers","extensions","globalOptions","setFlavor","flavor","github","original","ghost","vanilla","allOn","options","allOptionsOn","validate","extension","name","errMsg","valid","error","helper","isArray","i","length","baseMsg","ext","isString","toLowerCase","isUndefined","listeners","filter","regex","ln","RegExp","replace","escapeCharactersCallback","wholeMatch","m1","charCodeAt","setOption","key","value","this","getOption","getOptions","resetOptions","Error","preset","option","getFlavor","getFlavorOptions","getDefaultOptions","subParser","func","stdExtName","validExtension","getAllExtensions","removeExtension","resetExtensions","validateExtension","console","warn","a","String","isFunction","toString","call","Array","forEach","obj","callback","prop","s","escapeCharacters","text","charsToEscape","afterBackslash","regexString","unescapeHTMLEntities","txt","rgxFindMatchPos","str","left","right","flags","t","m","start","end","f","g","indexOf","x","l","pos","exec","test","lastIndex","index","match","push","matchRecursiveRegExp","matchPos","results","slice","replaceRecursiveRegExp","replacement","repStr","finalStr","lng","bits","join","regexIndexOf","fromIndex","substring","search","splitAtIndex","encodeEmailAddress","mail","encode","ch","Math","floor","random","r","padEnd","targetLength","padString","repeat","msg","alert","log","regexes","asteriskDashAndColon","emojis","Converter","converterOptions","langExtensions","outputModifiers","setConvFlavor","parsed","raw","format","_parseExtension","legacyExtensionLoading","validExt","listen","gOpt","_constructor","_dispatch","evtName","globals","ei","nText","makeHtml","gHtmlBlocks","gHtmlMdBlocks","gHtmlSpans","gUrls","gTitles","gDimensions","gListLevel","hashLinkCounts","converter","rsp","rgx","rTrimInputText","makeMarkdown","makeMd","src","HTMLParser","window","document","doc","createElement","innerHTML","preList","pres","querySelectorAll","presPH","childElementCount","firstChild","tagName","content","trim","language","getAttribute","classes","className","split","c","matches","outerHTML","setAttribute","substitutePreCodeTags","clean","node","n","childNodes","child","nodeType","nodeValue","removeChild","nodes","mdDoc","addExtension","useExtension","extensionName","splice","output","getMetadata","getMetadataFormat","_setMetadataPair","_setMetadataFormat","_setMetadataRaw","writeAnchorTag","linkText","linkId","url","m5","m6","title","result","wm","st","escape","mentions","username","lnk","target","simpleURLRegex","simpleURLRegex2","delimUrlRegex","simpleMailRegex","delimMailRegex","replaceLink","leadingMagicChars","link","m2","m3","trailingPunctuation","trailingMagicChars","lnkTxt","append","lmc","tmc","replaceMail","b","href","bq","pre","codeblock","nextChar","doctype","doctypeParsed","charset","lang","meta","leadingText","numSpaces","emojiCode","delim","blockText","blockTags","repFunc","inside","opTagPos","rgx1","patLeft","patRight","subTexts","newSubText1","concat","hashHTMLSpan","html","repText","limit","num","$1","isNaN","parseInt","setextRegexH1","setextRegexH2","spanGamut","hID","headerId","hashBlock","matchFound","hLevel","atxStyle","prefix","customizedHeaderId","hText","span","header","writeImageTag","altText","width","height","gDims","parseInside","lead","processListItems","listStr","trimTrailing","isParagraphed","m4","taskbtn","checked","item","bulletStyle","otp","wm2","styleStartNumber","list","listType","res","parseConsecutiveLists","olRgx","ulRgx","counterRxg","parseCL","style","parseMetadataContents","wholematch","grafs","grafsOut","grafsOutIt","codeFlag","$2","re","replaceFunc","blankLines","parseCells","cell","parseTable","rawTable","tableLines","sLine","id","rawHeaders","map","rawStyles","rawCells","headers","styles","cells","shift","tableHeaderId","row","ii","tb","tblLgn","buildTable","charCodeToReplace","fromCharCode","hasChildNodes","children","childrenLength","innerTxt","headerLevel","headerMark","hasAttribute","listItems","listItemsLenght","listNum","listItemTxt","childrenLenght","spansOnly","data","tableArray","headings","rows","headContent","allign","cols","getElementsByTagName","cellContent","cellSpacesCount","strLen"],"mappings":"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","file":"a22cbe4e-e25c9c32fae10e5eeee9.js","sourcesContent":[";\n/*! showdown v 1.9.1 - 02-11-2019 */\n\n(function () {\n /**\n * Created by Tivie on 13-07-2015.\n */\n function getDefaultOpts(simple) {\n 'use strict';\n\n var defaultOptions = {\n omitExtraWLInCodeBlocks: {\n defaultValue: false,\n describe: 'Omit the default extra whiteline added to code blocks',\n type: 'boolean'\n },\n noHeaderId: {\n defaultValue: false,\n describe: 'Turn on/off generated header id',\n type: 'boolean'\n },\n prefixHeaderId: {\n defaultValue: false,\n describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \\'section-\\' prefix',\n type: 'string'\n },\n rawPrefixHeaderId: {\n defaultValue: false,\n describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the \" char is used in the prefix)',\n type: 'boolean'\n },\n ghCompatibleHeaderId: {\n defaultValue: false,\n describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)',\n type: 'boolean'\n },\n rawHeaderId: {\n defaultValue: false,\n describe: 'Remove only spaces, \\' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids',\n type: 'boolean'\n },\n headerLevelStart: {\n defaultValue: false,\n describe: 'The header blocks level start',\n type: 'integer'\n },\n parseImgDimensions: {\n defaultValue: false,\n describe: 'Turn on/off image dimension parsing',\n type: 'boolean'\n },\n simplifiedAutoLink: {\n defaultValue: false,\n describe: 'Turn on/off GFM autolink style',\n type: 'boolean'\n },\n excludeTrailingPunctuationFromURLs: {\n defaultValue: false,\n describe: 'Excludes trailing punctuation from links generated with autoLinking',\n type: 'boolean'\n },\n literalMidWordUnderscores: {\n defaultValue: false,\n describe: 'Parse midword underscores as literal underscores',\n type: 'boolean'\n },\n literalMidWordAsterisks: {\n defaultValue: false,\n describe: 'Parse midword asterisks as literal asterisks',\n type: 'boolean'\n },\n strikethrough: {\n defaultValue: false,\n describe: 'Turn on/off strikethrough support',\n type: 'boolean'\n },\n tables: {\n defaultValue: false,\n describe: 'Turn on/off tables support',\n type: 'boolean'\n },\n tablesHeaderId: {\n defaultValue: false,\n describe: 'Add an id to table headers',\n type: 'boolean'\n },\n ghCodeBlocks: {\n defaultValue: true,\n describe: 'Turn on/off GFM fenced code blocks support',\n type: 'boolean'\n },\n tasklists: {\n defaultValue: false,\n describe: 'Turn on/off GFM tasklist support',\n type: 'boolean'\n },\n smoothLivePreview: {\n defaultValue: false,\n describe: 'Prevents weird effects in live previews due to incomplete input',\n type: 'boolean'\n },\n smartIndentationFix: {\n defaultValue: false,\n description: 'Tries to smartly fix indentation in es6 strings',\n type: 'boolean'\n },\n disableForced4SpacesIndentedSublists: {\n defaultValue: false,\n description: 'Disables the requirement of indenting nested sublists by 4 spaces',\n type: 'boolean'\n },\n simpleLineBreaks: {\n defaultValue: false,\n description: 'Parses simple line breaks as
(GFM Style)',\n type: 'boolean'\n },\n requireSpaceBeforeHeadingText: {\n defaultValue: false,\n description: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',\n type: 'boolean'\n },\n ghMentions: {\n defaultValue: false,\n description: 'Enables github @mentions',\n type: 'boolean'\n },\n ghMentionsLink: {\n defaultValue: 'https://github.com/{u}',\n description: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',\n type: 'string'\n },\n encodeEmails: {\n defaultValue: true,\n description: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',\n type: 'boolean'\n },\n openLinksInNewWindow: {\n defaultValue: false,\n description: 'Open all links in new windows',\n type: 'boolean'\n },\n backslashEscapesHTMLTags: {\n defaultValue: false,\n description: 'Support for HTML Tag escaping. ex: \\
foo\\
',\n type: 'boolean'\n },\n emoji: {\n defaultValue: false,\n description: 'Enable emoji support. Ex: `this is a :smile: emoji`',\n type: 'boolean'\n },\n underline: {\n defaultValue: false,\n description: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``',\n type: 'boolean'\n },\n completeHTMLDocument: {\n defaultValue: false,\n description: 'Outputs a complete html document, including ``, `` and `` tags',\n type: 'boolean'\n },\n metadata: {\n defaultValue: false,\n description: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).',\n type: 'boolean'\n },\n splitAdjacentBlockquotes: {\n defaultValue: false,\n description: 'Split adjacent blockquote blocks',\n type: 'boolean'\n }\n };\n\n if (simple === false) {\n return JSON.parse(JSON.stringify(defaultOptions));\n }\n\n var ret = {};\n\n for (var opt in defaultOptions) {\n if (defaultOptions.hasOwnProperty(opt)) {\n ret[opt] = defaultOptions[opt].defaultValue;\n }\n }\n\n return ret;\n }\n\n function allOptionsOn() {\n 'use strict';\n\n var options = getDefaultOpts(true),\n ret = {};\n\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n ret[opt] = true;\n }\n }\n\n return ret;\n }\n /**\n * Created by Tivie on 06-01-2015.\n */\n // Private properties\n\n\n var showdown = {},\n parsers = {},\n extensions = {},\n globalOptions = getDefaultOpts(true),\n setFlavor = 'vanilla',\n flavor = {\n github: {\n omitExtraWLInCodeBlocks: true,\n simplifiedAutoLink: true,\n excludeTrailingPunctuationFromURLs: true,\n literalMidWordUnderscores: true,\n strikethrough: true,\n tables: true,\n tablesHeaderId: true,\n ghCodeBlocks: true,\n tasklists: true,\n disableForced4SpacesIndentedSublists: true,\n simpleLineBreaks: true,\n requireSpaceBeforeHeadingText: true,\n ghCompatibleHeaderId: true,\n ghMentions: true,\n backslashEscapesHTMLTags: true,\n emoji: true,\n splitAdjacentBlockquotes: true\n },\n original: {\n noHeaderId: true,\n ghCodeBlocks: false\n },\n ghost: {\n omitExtraWLInCodeBlocks: true,\n parseImgDimensions: true,\n simplifiedAutoLink: true,\n excludeTrailingPunctuationFromURLs: true,\n literalMidWordUnderscores: true,\n strikethrough: true,\n tables: true,\n tablesHeaderId: true,\n ghCodeBlocks: true,\n tasklists: true,\n smoothLivePreview: true,\n simpleLineBreaks: true,\n requireSpaceBeforeHeadingText: true,\n ghMentions: false,\n encodeEmails: true\n },\n vanilla: getDefaultOpts(true),\n allOn: allOptionsOn()\n };\n /**\n * helper namespace\n * @type {{}}\n */\n\n showdown.helper = {};\n /**\n * TODO LEGACY SUPPORT CODE\n * @type {{}}\n */\n\n showdown.extensions = {};\n /**\n * Set a global option\n * @static\n * @param {string} key\n * @param {*} value\n * @returns {showdown}\n */\n\n showdown.setOption = function (key, value) {\n 'use strict';\n\n globalOptions[key] = value;\n return this;\n };\n /**\n * Get a global option\n * @static\n * @param {string} key\n * @returns {*}\n */\n\n\n showdown.getOption = function (key) {\n 'use strict';\n\n return globalOptions[key];\n };\n /**\n * Get the global options\n * @static\n * @returns {{}}\n */\n\n\n showdown.getOptions = function () {\n 'use strict';\n\n return globalOptions;\n };\n /**\n * Reset global options to the default values\n * @static\n */\n\n\n showdown.resetOptions = function () {\n 'use strict';\n\n globalOptions = getDefaultOpts(true);\n };\n /**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\n\n\n showdown.setFlavor = function (name) {\n 'use strict';\n\n if (!flavor.hasOwnProperty(name)) {\n throw Error(name + ' flavor was not found');\n }\n\n showdown.resetOptions();\n var preset = flavor[name];\n setFlavor = name;\n\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n globalOptions[option] = preset[option];\n }\n }\n };\n /**\n * Get the currently set flavor\n * @returns {string}\n */\n\n\n showdown.getFlavor = function () {\n 'use strict';\n\n return setFlavor;\n };\n /**\n * Get the options of a specified flavor. Returns undefined if the flavor was not found\n * @param {string} name Name of the flavor\n * @returns {{}|undefined}\n */\n\n\n showdown.getFlavorOptions = function (name) {\n 'use strict';\n\n if (flavor.hasOwnProperty(name)) {\n return flavor[name];\n }\n };\n /**\n * Get the default options\n * @static\n * @param {boolean} [simple=true]\n * @returns {{}}\n */\n\n\n showdown.getDefaultOptions = function (simple) {\n 'use strict';\n\n return getDefaultOpts(simple);\n };\n /**\n * Get or set a subParser\n *\n * subParser(name) - Get a registered subParser\n * subParser(name, func) - Register a subParser\n * @static\n * @param {string} name\n * @param {function} [func]\n * @returns {*}\n */\n\n\n showdown.subParser = function (name, func) {\n 'use strict';\n\n if (showdown.helper.isString(name)) {\n if (typeof func !== 'undefined') {\n parsers[name] = func;\n } else {\n if (parsers.hasOwnProperty(name)) {\n return parsers[name];\n } else {\n throw Error('SubParser named ' + name + ' not registered!');\n }\n }\n }\n };\n /**\n * Gets or registers an extension\n * @static\n * @param {string} name\n * @param {object|function=} ext\n * @returns {*}\n */\n\n\n showdown.extension = function (name, ext) {\n 'use strict';\n\n if (!showdown.helper.isString(name)) {\n throw Error('Extension \\'name\\' must be a string');\n }\n\n name = showdown.helper.stdExtName(name); // Getter\n\n if (showdown.helper.isUndefined(ext)) {\n if (!extensions.hasOwnProperty(name)) {\n throw Error('Extension named ' + name + ' is not registered!');\n }\n\n return extensions[name]; // Setter\n } else {\n // Expand extension if it's wrapped in a function\n if (typeof ext === 'function') {\n ext = ext();\n } // Ensure extension is an array\n\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n var validExtension = validate(ext, name);\n\n if (validExtension.valid) {\n extensions[name] = ext;\n } else {\n throw Error(validExtension.error);\n }\n }\n };\n /**\n * Gets all extensions registered\n * @returns {{}}\n */\n\n\n showdown.getAllExtensions = function () {\n 'use strict';\n\n return extensions;\n };\n /**\n * Remove an extension\n * @param {string} name\n */\n\n\n showdown.removeExtension = function (name) {\n 'use strict';\n\n delete extensions[name];\n };\n /**\n * Removes all extensions\n */\n\n\n showdown.resetExtensions = function () {\n 'use strict';\n\n extensions = {};\n };\n /**\n * Validate extension\n * @param {array} extension\n * @param {string} name\n * @returns {{valid: boolean, error: string}}\n */\n\n\n function validate(extension, name) {\n 'use strict';\n\n var errMsg = name ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension',\n ret = {\n valid: true,\n error: ''\n };\n\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n\n for (var i = 0; i < extension.length; ++i) {\n var baseMsg = errMsg + ' sub-extension ' + i + ': ',\n ext = extension[i];\n\n if (typeof ext !== 'object') {\n ret.valid = false;\n ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';\n return ret;\n }\n\n if (!showdown.helper.isString(ext.type)) {\n ret.valid = false;\n ret.error = baseMsg + 'property \"type\" must be a string, but ' + typeof ext.type + ' given';\n return ret;\n }\n\n var type = ext.type = ext.type.toLowerCase(); // normalize extension type\n\n if (type === 'language') {\n type = ext.type = 'lang';\n }\n\n if (type === 'html') {\n type = ext.type = 'output';\n }\n\n if (type !== 'lang' && type !== 'output' && type !== 'listener') {\n ret.valid = false;\n ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: \"lang/language\", \"output/html\" or \"listener\"';\n return ret;\n }\n\n if (type === 'listener') {\n if (showdown.helper.isUndefined(ext.listeners)) {\n ret.valid = false;\n ret.error = baseMsg + '. Extensions of type \"listener\" must have a property called \"listeners\"';\n return ret;\n }\n } else {\n if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {\n ret.valid = false;\n ret.error = baseMsg + type + ' extensions must define either a \"regex\" property or a \"filter\" method';\n return ret;\n }\n }\n\n if (ext.listeners) {\n if (typeof ext.listeners !== 'object') {\n ret.valid = false;\n ret.error = baseMsg + '\"listeners\" property must be an object but ' + typeof ext.listeners + ' given';\n return ret;\n }\n\n for (var ln in ext.listeners) {\n if (ext.listeners.hasOwnProperty(ln)) {\n if (typeof ext.listeners[ln] !== 'function') {\n ret.valid = false;\n ret.error = baseMsg + '\"listeners\" property must be an hash of [event name]: [callback]. listeners.' + ln + ' must be a function but ' + typeof ext.listeners[ln] + ' given';\n return ret;\n }\n }\n }\n }\n\n if (ext.filter) {\n if (typeof ext.filter !== 'function') {\n ret.valid = false;\n ret.error = baseMsg + '\"filter\" must be a function, but ' + typeof ext.filter + ' given';\n return ret;\n }\n } else if (ext.regex) {\n if (showdown.helper.isString(ext.regex)) {\n ext.regex = new RegExp(ext.regex, 'g');\n }\n\n if (!(ext.regex instanceof RegExp)) {\n ret.valid = false;\n ret.error = baseMsg + '\"regex\" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given';\n return ret;\n }\n\n if (showdown.helper.isUndefined(ext.replace)) {\n ret.valid = false;\n ret.error = baseMsg + '\"regex\" extensions must implement a replace string or function';\n return ret;\n }\n }\n }\n\n return ret;\n }\n /**\n * Validate extension\n * @param {object} ext\n * @returns {boolean}\n */\n\n\n showdown.validateExtension = function (ext) {\n 'use strict';\n\n var validateExtension = validate(ext, null);\n\n if (!validateExtension.valid) {\n console.warn(validateExtension.error);\n return false;\n }\n\n return true;\n };\n /**\n * showdownjs helper functions\n */\n\n\n if (!showdown.hasOwnProperty('helper')) {\n showdown.helper = {};\n }\n /**\n * Check if var is string\n * @static\n * @param {string} a\n * @returns {boolean}\n */\n\n\n showdown.helper.isString = function (a) {\n 'use strict';\n\n return typeof a === 'string' || a instanceof String;\n };\n /**\n * Check if var is a function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\n\n\n showdown.helper.isFunction = function (a) {\n 'use strict';\n\n var getType = {};\n return a && getType.toString.call(a) === '[object Function]';\n };\n /**\n * isArray helper function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\n\n\n showdown.helper.isArray = function (a) {\n 'use strict';\n\n return Array.isArray(a);\n };\n /**\n * Check if value is undefined\n * @static\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n */\n\n\n showdown.helper.isUndefined = function (value) {\n 'use strict';\n\n return typeof value === 'undefined';\n };\n /**\n * ForEach helper function\n * Iterates over Arrays and Objects (own properties only)\n * @static\n * @param {*} obj\n * @param {function} callback Accepts 3 params: 1. value, 2. key, 3. the original array/object\n */\n\n\n showdown.helper.forEach = function (obj, callback) {\n 'use strict'; // check if obj is defined\n\n if (showdown.helper.isUndefined(obj)) {\n throw new Error('obj param is required');\n }\n\n if (showdown.helper.isUndefined(callback)) {\n throw new Error('callback param is required');\n }\n\n if (!showdown.helper.isFunction(callback)) {\n throw new Error('callback param must be a function/closure');\n }\n\n if (typeof obj.forEach === 'function') {\n obj.forEach(callback);\n } else if (showdown.helper.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n callback(obj[i], i, obj);\n }\n } else if (typeof obj === 'object') {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n callback(obj[prop], prop, obj);\n }\n }\n } else {\n throw new Error('obj does not seem to be an array or an iterable object');\n }\n };\n /**\n * Standardidize extension name\n * @static\n * @param {string} s extension name\n * @returns {string}\n */\n\n\n showdown.helper.stdExtName = function (s) {\n 'use strict';\n\n return s.replace(/[_?*+\\/\\\\.^-]/g, '').replace(/\\s/g, '').toLowerCase();\n };\n\n function escapeCharactersCallback(wholeMatch, m1) {\n 'use strict';\n\n var charCodeToEscape = m1.charCodeAt(0);\n return '¨E' + charCodeToEscape + 'E';\n }\n /**\n * Callback used to escape characters when passing through String.replace\n * @static\n * @param {string} wholeMatch\n * @param {string} m1\n * @returns {string}\n */\n\n\n showdown.helper.escapeCharactersCallback = escapeCharactersCallback;\n /**\n * Escape characters in a string\n * @static\n * @param {string} text\n * @param {string} charsToEscape\n * @param {boolean} afterBackslash\n * @returns {XML|string|void|*}\n */\n\n showdown.helper.escapeCharacters = function (text, charsToEscape, afterBackslash) {\n 'use strict'; // First we have to escape the escape characters so that\n // we can build a character class out of them\n\n var regexString = '([' + charsToEscape.replace(/([\\[\\]\\\\])/g, '\\\\$1') + '])';\n\n if (afterBackslash) {\n regexString = '\\\\\\\\' + regexString;\n }\n\n var regex = new RegExp(regexString, 'g');\n text = text.replace(regex, escapeCharactersCallback);\n return text;\n };\n /**\n * Unescape HTML entities\n * @param txt\n * @returns {string}\n */\n\n\n showdown.helper.unescapeHTMLEntities = function (txt) {\n 'use strict';\n\n return txt.replace(/"/g, '\"').replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&');\n };\n\n var rgxFindMatchPos = function rgxFindMatchPos(str, left, right, flags) {\n 'use strict';\n\n var f = flags || '',\n g = f.indexOf('g') > -1,\n x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')),\n l = new RegExp(left, f.replace(/g/g, '')),\n pos = [],\n t,\n s,\n m,\n start,\n end;\n\n do {\n t = 0;\n\n while (m = x.exec(str)) {\n if (l.test(m[0])) {\n if (!t++) {\n s = x.lastIndex;\n start = s - m[0].length;\n }\n } else if (t) {\n if (! --t) {\n end = m.index + m[0].length;\n var obj = {\n left: {\n start: start,\n end: s\n },\n match: {\n start: s,\n end: m.index\n },\n right: {\n start: m.index,\n end: end\n },\n wholeMatch: {\n start: start,\n end: end\n }\n };\n pos.push(obj);\n\n if (!g) {\n return pos;\n }\n }\n }\n }\n } while (t && (x.lastIndex = s));\n\n return pos;\n };\n /**\n * matchRecursiveRegExp\n *\n * (c) 2007 Steven Levithan \n * MIT License\n *\n * Accepts a string to search, a left and right format delimiter\n * as regex patterns, and optional regex flags. Returns an array\n * of matches, allowing nested instances of left/right delimiters.\n * Use the \"g\" flag to return all matches, otherwise only the\n * first is returned. Be careful to ensure that the left and\n * right format delimiters produce mutually exclusive matches.\n * Backreferences are not supported within the right delimiter\n * due to how it is internally combined with the left delimiter.\n * When matching strings whose format delimiters are unbalanced\n * to the left or right, the output is intentionally as a\n * conventional regex library with recursion support would\n * produce, e.g. \"<\" and \">\" both produce [\"x\"] when using\n * \"<\" and \">\" as the delimiters (both strings contain a single,\n * balanced instance of \"\").\n *\n * examples:\n * matchRecursiveRegExp(\"test\", \"\\\\(\", \"\\\\)\")\n * returns: []\n * matchRecursiveRegExp(\">>t<>\", \"<\", \">\", \"g\")\n * returns: [\"t<>\", \"\"]\n * matchRecursiveRegExp(\"
test
\", \"]*>\", \"\", \"gi\")\n * returns: [\"test\"]\n */\n\n\n showdown.helper.matchRecursiveRegExp = function (str, left, right, flags) {\n 'use strict';\n\n var matchPos = rgxFindMatchPos(str, left, right, flags),\n results = [];\n\n for (var i = 0; i < matchPos.length; ++i) {\n results.push([str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end), str.slice(matchPos[i].match.start, matchPos[i].match.end), str.slice(matchPos[i].left.start, matchPos[i].left.end), str.slice(matchPos[i].right.start, matchPos[i].right.end)]);\n }\n\n return results;\n };\n /**\n *\n * @param {string} str\n * @param {string|function} replacement\n * @param {string} left\n * @param {string} right\n * @param {string} flags\n * @returns {string}\n */\n\n\n showdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) {\n 'use strict';\n\n if (!showdown.helper.isFunction(replacement)) {\n var repStr = replacement;\n\n replacement = function replacement() {\n return repStr;\n };\n }\n\n var matchPos = rgxFindMatchPos(str, left, right, flags),\n finalStr = str,\n lng = matchPos.length;\n\n if (lng > 0) {\n var bits = [];\n\n if (matchPos[0].wholeMatch.start !== 0) {\n bits.push(str.slice(0, matchPos[0].wholeMatch.start));\n }\n\n for (var i = 0; i < lng; ++i) {\n bits.push(replacement(str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end), str.slice(matchPos[i].match.start, matchPos[i].match.end), str.slice(matchPos[i].left.start, matchPos[i].left.end), str.slice(matchPos[i].right.start, matchPos[i].right.end)));\n\n if (i < lng - 1) {\n bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start));\n }\n }\n\n if (matchPos[lng - 1].wholeMatch.end < str.length) {\n bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));\n }\n\n finalStr = bits.join('');\n }\n\n return finalStr;\n };\n /**\n * Returns the index within the passed String object of the first occurrence of the specified regex,\n * starting the search at fromIndex. Returns -1 if the value is not found.\n *\n * @param {string} str string to search\n * @param {RegExp} regex Regular expression to search\n * @param {int} [fromIndex = 0] Index to start the search\n * @returns {Number}\n * @throws InvalidArgumentError\n */\n\n\n showdown.helper.regexIndexOf = function (str, regex, fromIndex) {\n 'use strict';\n\n if (!showdown.helper.isString(str)) {\n throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n }\n\n if (regex instanceof RegExp === false) {\n throw 'InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp';\n }\n\n var indexOf = str.substring(fromIndex || 0).search(regex);\n return indexOf >= 0 ? indexOf + (fromIndex || 0) : indexOf;\n };\n /**\n * Splits the passed string object at the defined index, and returns an array composed of the two substrings\n * @param {string} str string to split\n * @param {int} index index to split string at\n * @returns {[string,string]}\n * @throws InvalidArgumentError\n */\n\n\n showdown.helper.splitAtIndex = function (str, index) {\n 'use strict';\n\n if (!showdown.helper.isString(str)) {\n throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n }\n\n return [str.substring(0, index), str.substring(index)];\n };\n /**\n * Obfuscate an e-mail address through the use of Character Entities,\n * transforming ASCII characters into their equivalent decimal or hex entities.\n *\n * Since it has a random component, subsequent calls to this function produce different results\n *\n * @param {string} mail\n * @returns {string}\n */\n\n\n showdown.helper.encodeEmailAddress = function (mail) {\n 'use strict';\n\n var encode = [function (ch) {\n return '&#' + ch.charCodeAt(0) + ';';\n }, function (ch) {\n return '&#x' + ch.charCodeAt(0).toString(16) + ';';\n }, function (ch) {\n return ch;\n }];\n mail = mail.replace(/./g, function (ch) {\n if (ch === '@') {\n // this *must* be encoded. I insist.\n ch = encode[Math.floor(Math.random() * 2)](ch);\n } else {\n var r = Math.random(); // roughly 10% raw, 45% hex, 45% dec\n\n ch = r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch);\n }\n\n return ch;\n });\n return mail;\n };\n /**\n *\n * @param str\n * @param targetLength\n * @param padString\n * @returns {string}\n */\n\n\n showdown.helper.padEnd = function padEnd(str, targetLength, padString) {\n 'use strict';\n /*jshint bitwise: false*/\n // eslint-disable-next-line space-infix-ops\n\n targetLength = targetLength >> 0; //floor if number or convert non-number to 0;\n\n /*jshint bitwise: true*/\n\n padString = String(padString || ' ');\n\n if (str.length > targetLength) {\n return String(str);\n } else {\n targetLength = targetLength - str.length;\n\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed\n }\n\n return String(str) + padString.slice(0, targetLength);\n }\n };\n /**\n * POLYFILLS\n */\n // use this instead of builtin is undefined for IE8 compatibility\n\n\n if (typeof console === 'undefined') {\n console = {\n warn: function warn(msg) {\n 'use strict';\n\n alert(msg);\n },\n log: function log(msg) {\n 'use strict';\n\n alert(msg);\n },\n error: function error(msg) {\n 'use strict';\n\n throw msg;\n }\n };\n }\n /**\n * Common regexes.\n * We declare some common regexes to improve performance\n */\n\n\n showdown.helper.regexes = {\n asteriskDashAndColon: /([*_:~])/g\n };\n /**\n * EMOJIS LIST\n */\n\n showdown.helper.emojis = {\n '+1': \"\\uD83D\\uDC4D\",\n '-1': \"\\uD83D\\uDC4E\",\n '100': \"\\uD83D\\uDCAF\",\n '1234': \"\\uD83D\\uDD22\",\n '1st_place_medal': \"\\uD83E\\uDD47\",\n '2nd_place_medal': \"\\uD83E\\uDD48\",\n '3rd_place_medal': \"\\uD83E\\uDD49\",\n '8ball': \"\\uD83C\\uDFB1\",\n 'a': \"\\uD83C\\uDD70\\uFE0F\",\n 'ab': \"\\uD83C\\uDD8E\",\n 'abc': \"\\uD83D\\uDD24\",\n 'abcd': \"\\uD83D\\uDD21\",\n 'accept': \"\\uD83C\\uDE51\",\n 'aerial_tramway': \"\\uD83D\\uDEA1\",\n 'airplane': \"\\u2708\\uFE0F\",\n 'alarm_clock': \"\\u23F0\",\n 'alembic': \"\\u2697\\uFE0F\",\n 'alien': \"\\uD83D\\uDC7D\",\n 'ambulance': \"\\uD83D\\uDE91\",\n 'amphora': \"\\uD83C\\uDFFA\",\n 'anchor': \"\\u2693\\uFE0F\",\n 'angel': \"\\uD83D\\uDC7C\",\n 'anger': \"\\uD83D\\uDCA2\",\n 'angry': \"\\uD83D\\uDE20\",\n 'anguished': \"\\uD83D\\uDE27\",\n 'ant': \"\\uD83D\\uDC1C\",\n 'apple': \"\\uD83C\\uDF4E\",\n 'aquarius': \"\\u2652\\uFE0F\",\n 'aries': \"\\u2648\\uFE0F\",\n 'arrow_backward': \"\\u25C0\\uFE0F\",\n 'arrow_double_down': \"\\u23EC\",\n 'arrow_double_up': \"\\u23EB\",\n 'arrow_down': \"\\u2B07\\uFE0F\",\n 'arrow_down_small': \"\\uD83D\\uDD3D\",\n 'arrow_forward': \"\\u25B6\\uFE0F\",\n 'arrow_heading_down': \"\\u2935\\uFE0F\",\n 'arrow_heading_up': \"\\u2934\\uFE0F\",\n 'arrow_left': \"\\u2B05\\uFE0F\",\n 'arrow_lower_left': \"\\u2199\\uFE0F\",\n 'arrow_lower_right': \"\\u2198\\uFE0F\",\n 'arrow_right': \"\\u27A1\\uFE0F\",\n 'arrow_right_hook': \"\\u21AA\\uFE0F\",\n 'arrow_up': \"\\u2B06\\uFE0F\",\n 'arrow_up_down': \"\\u2195\\uFE0F\",\n 'arrow_up_small': \"\\uD83D\\uDD3C\",\n 'arrow_upper_left': \"\\u2196\\uFE0F\",\n 'arrow_upper_right': \"\\u2197\\uFE0F\",\n 'arrows_clockwise': \"\\uD83D\\uDD03\",\n 'arrows_counterclockwise': \"\\uD83D\\uDD04\",\n 'art': \"\\uD83C\\uDFA8\",\n 'articulated_lorry': \"\\uD83D\\uDE9B\",\n 'artificial_satellite': \"\\uD83D\\uDEF0\",\n 'astonished': \"\\uD83D\\uDE32\",\n 'athletic_shoe': \"\\uD83D\\uDC5F\",\n 'atm': \"\\uD83C\\uDFE7\",\n 'atom_symbol': \"\\u269B\\uFE0F\",\n 'avocado': \"\\uD83E\\uDD51\",\n 'b': \"\\uD83C\\uDD71\\uFE0F\",\n 'baby': \"\\uD83D\\uDC76\",\n 'baby_bottle': \"\\uD83C\\uDF7C\",\n 'baby_chick': \"\\uD83D\\uDC24\",\n 'baby_symbol': \"\\uD83D\\uDEBC\",\n 'back': \"\\uD83D\\uDD19\",\n 'bacon': \"\\uD83E\\uDD53\",\n 'badminton': \"\\uD83C\\uDFF8\",\n 'baggage_claim': \"\\uD83D\\uDEC4\",\n 'baguette_bread': \"\\uD83E\\uDD56\",\n 'balance_scale': \"\\u2696\\uFE0F\",\n 'balloon': \"\\uD83C\\uDF88\",\n 'ballot_box': \"\\uD83D\\uDDF3\",\n 'ballot_box_with_check': \"\\u2611\\uFE0F\",\n 'bamboo': \"\\uD83C\\uDF8D\",\n 'banana': \"\\uD83C\\uDF4C\",\n 'bangbang': \"\\u203C\\uFE0F\",\n 'bank': \"\\uD83C\\uDFE6\",\n 'bar_chart': \"\\uD83D\\uDCCA\",\n 'barber': \"\\uD83D\\uDC88\",\n 'baseball': \"\\u26BE\\uFE0F\",\n 'basketball': \"\\uD83C\\uDFC0\",\n 'basketball_man': \"\\u26F9\\uFE0F\",\n 'basketball_woman': \"\\u26F9\\uFE0F‍\\u2640\\uFE0F\",\n 'bat': \"\\uD83E\\uDD87\",\n 'bath': \"\\uD83D\\uDEC0\",\n 'bathtub': \"\\uD83D\\uDEC1\",\n 'battery': \"\\uD83D\\uDD0B\",\n 'beach_umbrella': \"\\uD83C\\uDFD6\",\n 'bear': \"\\uD83D\\uDC3B\",\n 'bed': \"\\uD83D\\uDECF\",\n 'bee': \"\\uD83D\\uDC1D\",\n 'beer': \"\\uD83C\\uDF7A\",\n 'beers': \"\\uD83C\\uDF7B\",\n 'beetle': \"\\uD83D\\uDC1E\",\n 'beginner': \"\\uD83D\\uDD30\",\n 'bell': \"\\uD83D\\uDD14\",\n 'bellhop_bell': \"\\uD83D\\uDECE\",\n 'bento': \"\\uD83C\\uDF71\",\n 'biking_man': \"\\uD83D\\uDEB4\",\n 'bike': \"\\uD83D\\uDEB2\",\n 'biking_woman': \"\\uD83D\\uDEB4‍\\u2640\\uFE0F\",\n 'bikini': \"\\uD83D\\uDC59\",\n 'biohazard': \"\\u2623\\uFE0F\",\n 'bird': \"\\uD83D\\uDC26\",\n 'birthday': \"\\uD83C\\uDF82\",\n 'black_circle': \"\\u26AB\\uFE0F\",\n 'black_flag': \"\\uD83C\\uDFF4\",\n 'black_heart': \"\\uD83D\\uDDA4\",\n 'black_joker': \"\\uD83C\\uDCCF\",\n 'black_large_square': \"\\u2B1B\\uFE0F\",\n 'black_medium_small_square': \"\\u25FE\\uFE0F\",\n 'black_medium_square': \"\\u25FC\\uFE0F\",\n 'black_nib': \"\\u2712\\uFE0F\",\n 'black_small_square': \"\\u25AA\\uFE0F\",\n 'black_square_button': \"\\uD83D\\uDD32\",\n 'blonde_man': \"\\uD83D\\uDC71\",\n 'blonde_woman': \"\\uD83D\\uDC71‍\\u2640\\uFE0F\",\n 'blossom': \"\\uD83C\\uDF3C\",\n 'blowfish': \"\\uD83D\\uDC21\",\n 'blue_book': \"\\uD83D\\uDCD8\",\n 'blue_car': \"\\uD83D\\uDE99\",\n 'blue_heart': \"\\uD83D\\uDC99\",\n 'blush': \"\\uD83D\\uDE0A\",\n 'boar': \"\\uD83D\\uDC17\",\n 'boat': \"\\u26F5\\uFE0F\",\n 'bomb': \"\\uD83D\\uDCA3\",\n 'book': \"\\uD83D\\uDCD6\",\n 'bookmark': \"\\uD83D\\uDD16\",\n 'bookmark_tabs': \"\\uD83D\\uDCD1\",\n 'books': \"\\uD83D\\uDCDA\",\n 'boom': \"\\uD83D\\uDCA5\",\n 'boot': \"\\uD83D\\uDC62\",\n 'bouquet': \"\\uD83D\\uDC90\",\n 'bowing_man': \"\\uD83D\\uDE47\",\n 'bow_and_arrow': \"\\uD83C\\uDFF9\",\n 'bowing_woman': \"\\uD83D\\uDE47‍\\u2640\\uFE0F\",\n 'bowling': \"\\uD83C\\uDFB3\",\n 'boxing_glove': \"\\uD83E\\uDD4A\",\n 'boy': \"\\uD83D\\uDC66\",\n 'bread': \"\\uD83C\\uDF5E\",\n 'bride_with_veil': \"\\uD83D\\uDC70\",\n 'bridge_at_night': \"\\uD83C\\uDF09\",\n 'briefcase': \"\\uD83D\\uDCBC\",\n 'broken_heart': \"\\uD83D\\uDC94\",\n 'bug': \"\\uD83D\\uDC1B\",\n 'building_construction': \"\\uD83C\\uDFD7\",\n 'bulb': \"\\uD83D\\uDCA1\",\n 'bullettrain_front': \"\\uD83D\\uDE85\",\n 'bullettrain_side': \"\\uD83D\\uDE84\",\n 'burrito': \"\\uD83C\\uDF2F\",\n 'bus': \"\\uD83D\\uDE8C\",\n 'business_suit_levitating': \"\\uD83D\\uDD74\",\n 'busstop': \"\\uD83D\\uDE8F\",\n 'bust_in_silhouette': \"\\uD83D\\uDC64\",\n 'busts_in_silhouette': \"\\uD83D\\uDC65\",\n 'butterfly': \"\\uD83E\\uDD8B\",\n 'cactus': \"\\uD83C\\uDF35\",\n 'cake': \"\\uD83C\\uDF70\",\n 'calendar': \"\\uD83D\\uDCC6\",\n 'call_me_hand': \"\\uD83E\\uDD19\",\n 'calling': \"\\uD83D\\uDCF2\",\n 'camel': \"\\uD83D\\uDC2B\",\n 'camera': \"\\uD83D\\uDCF7\",\n 'camera_flash': \"\\uD83D\\uDCF8\",\n 'camping': \"\\uD83C\\uDFD5\",\n 'cancer': \"\\u264B\\uFE0F\",\n 'candle': \"\\uD83D\\uDD6F\",\n 'candy': \"\\uD83C\\uDF6C\",\n 'canoe': \"\\uD83D\\uDEF6\",\n 'capital_abcd': \"\\uD83D\\uDD20\",\n 'capricorn': \"\\u2651\\uFE0F\",\n 'car': \"\\uD83D\\uDE97\",\n 'card_file_box': \"\\uD83D\\uDDC3\",\n 'card_index': \"\\uD83D\\uDCC7\",\n 'card_index_dividers': \"\\uD83D\\uDDC2\",\n 'carousel_horse': \"\\uD83C\\uDFA0\",\n 'carrot': \"\\uD83E\\uDD55\",\n 'cat': \"\\uD83D\\uDC31\",\n 'cat2': \"\\uD83D\\uDC08\",\n 'cd': \"\\uD83D\\uDCBF\",\n 'chains': \"\\u26D3\",\n 'champagne': \"\\uD83C\\uDF7E\",\n 'chart': \"\\uD83D\\uDCB9\",\n 'chart_with_downwards_trend': \"\\uD83D\\uDCC9\",\n 'chart_with_upwards_trend': \"\\uD83D\\uDCC8\",\n 'checkered_flag': \"\\uD83C\\uDFC1\",\n 'cheese': \"\\uD83E\\uDDC0\",\n 'cherries': \"\\uD83C\\uDF52\",\n 'cherry_blossom': \"\\uD83C\\uDF38\",\n 'chestnut': \"\\uD83C\\uDF30\",\n 'chicken': \"\\uD83D\\uDC14\",\n 'children_crossing': \"\\uD83D\\uDEB8\",\n 'chipmunk': \"\\uD83D\\uDC3F\",\n 'chocolate_bar': \"\\uD83C\\uDF6B\",\n 'christmas_tree': \"\\uD83C\\uDF84\",\n 'church': \"\\u26EA\\uFE0F\",\n 'cinema': \"\\uD83C\\uDFA6\",\n 'circus_tent': \"\\uD83C\\uDFAA\",\n 'city_sunrise': \"\\uD83C\\uDF07\",\n 'city_sunset': \"\\uD83C\\uDF06\",\n 'cityscape': \"\\uD83C\\uDFD9\",\n 'cl': \"\\uD83C\\uDD91\",\n 'clamp': \"\\uD83D\\uDDDC\",\n 'clap': \"\\uD83D\\uDC4F\",\n 'clapper': \"\\uD83C\\uDFAC\",\n 'classical_building': \"\\uD83C\\uDFDB\",\n 'clinking_glasses': \"\\uD83E\\uDD42\",\n 'clipboard': \"\\uD83D\\uDCCB\",\n 'clock1': \"\\uD83D\\uDD50\",\n 'clock10': \"\\uD83D\\uDD59\",\n 'clock1030': \"\\uD83D\\uDD65\",\n 'clock11': \"\\uD83D\\uDD5A\",\n 'clock1130': \"\\uD83D\\uDD66\",\n 'clock12': \"\\uD83D\\uDD5B\",\n 'clock1230': \"\\uD83D\\uDD67\",\n 'clock130': \"\\uD83D\\uDD5C\",\n 'clock2': \"\\uD83D\\uDD51\",\n 'clock230': \"\\uD83D\\uDD5D\",\n 'clock3': \"\\uD83D\\uDD52\",\n 'clock330': \"\\uD83D\\uDD5E\",\n 'clock4': \"\\uD83D\\uDD53\",\n 'clock430': \"\\uD83D\\uDD5F\",\n 'clock5': \"\\uD83D\\uDD54\",\n 'clock530': \"\\uD83D\\uDD60\",\n 'clock6': \"\\uD83D\\uDD55\",\n 'clock630': \"\\uD83D\\uDD61\",\n 'clock7': \"\\uD83D\\uDD56\",\n 'clock730': \"\\uD83D\\uDD62\",\n 'clock8': \"\\uD83D\\uDD57\",\n 'clock830': \"\\uD83D\\uDD63\",\n 'clock9': \"\\uD83D\\uDD58\",\n 'clock930': \"\\uD83D\\uDD64\",\n 'closed_book': \"\\uD83D\\uDCD5\",\n 'closed_lock_with_key': \"\\uD83D\\uDD10\",\n 'closed_umbrella': \"\\uD83C\\uDF02\",\n 'cloud': \"\\u2601\\uFE0F\",\n 'cloud_with_lightning': \"\\uD83C\\uDF29\",\n 'cloud_with_lightning_and_rain': \"\\u26C8\",\n 'cloud_with_rain': \"\\uD83C\\uDF27\",\n 'cloud_with_snow': \"\\uD83C\\uDF28\",\n 'clown_face': \"\\uD83E\\uDD21\",\n 'clubs': \"\\u2663\\uFE0F\",\n 'cocktail': \"\\uD83C\\uDF78\",\n 'coffee': \"\\u2615\\uFE0F\",\n 'coffin': \"\\u26B0\\uFE0F\",\n 'cold_sweat': \"\\uD83D\\uDE30\",\n 'comet': \"\\u2604\\uFE0F\",\n 'computer': \"\\uD83D\\uDCBB\",\n 'computer_mouse': \"\\uD83D\\uDDB1\",\n 'confetti_ball': \"\\uD83C\\uDF8A\",\n 'confounded': \"\\uD83D\\uDE16\",\n 'confused': \"\\uD83D\\uDE15\",\n 'congratulations': \"\\u3297\\uFE0F\",\n 'construction': \"\\uD83D\\uDEA7\",\n 'construction_worker_man': \"\\uD83D\\uDC77\",\n 'construction_worker_woman': \"\\uD83D\\uDC77‍\\u2640\\uFE0F\",\n 'control_knobs': \"\\uD83C\\uDF9B\",\n 'convenience_store': \"\\uD83C\\uDFEA\",\n 'cookie': \"\\uD83C\\uDF6A\",\n 'cool': \"\\uD83C\\uDD92\",\n 'policeman': \"\\uD83D\\uDC6E\",\n 'copyright': \"\\xA9\\uFE0F\",\n 'corn': \"\\uD83C\\uDF3D\",\n 'couch_and_lamp': \"\\uD83D\\uDECB\",\n 'couple': \"\\uD83D\\uDC6B\",\n 'couple_with_heart_woman_man': \"\\uD83D\\uDC91\",\n 'couple_with_heart_man_man': \"\\uD83D\\uDC68‍\\u2764\\uFE0F‍\\uD83D\\uDC68\",\n 'couple_with_heart_woman_woman': \"\\uD83D\\uDC69‍\\u2764\\uFE0F‍\\uD83D\\uDC69\",\n 'couplekiss_man_man': \"\\uD83D\\uDC68‍\\u2764\\uFE0F‍\\uD83D\\uDC8B‍\\uD83D\\uDC68\",\n 'couplekiss_man_woman': \"\\uD83D\\uDC8F\",\n 'couplekiss_woman_woman': \"\\uD83D\\uDC69‍\\u2764\\uFE0F‍\\uD83D\\uDC8B‍\\uD83D\\uDC69\",\n 'cow': \"\\uD83D\\uDC2E\",\n 'cow2': \"\\uD83D\\uDC04\",\n 'cowboy_hat_face': \"\\uD83E\\uDD20\",\n 'crab': \"\\uD83E\\uDD80\",\n 'crayon': \"\\uD83D\\uDD8D\",\n 'credit_card': \"\\uD83D\\uDCB3\",\n 'crescent_moon': \"\\uD83C\\uDF19\",\n 'cricket': \"\\uD83C\\uDFCF\",\n 'crocodile': \"\\uD83D\\uDC0A\",\n 'croissant': \"\\uD83E\\uDD50\",\n 'crossed_fingers': \"\\uD83E\\uDD1E\",\n 'crossed_flags': \"\\uD83C\\uDF8C\",\n 'crossed_swords': \"\\u2694\\uFE0F\",\n 'crown': \"\\uD83D\\uDC51\",\n 'cry': \"\\uD83D\\uDE22\",\n 'crying_cat_face': \"\\uD83D\\uDE3F\",\n 'crystal_ball': \"\\uD83D\\uDD2E\",\n 'cucumber': \"\\uD83E\\uDD52\",\n 'cupid': \"\\uD83D\\uDC98\",\n 'curly_loop': \"\\u27B0\",\n 'currency_exchange': \"\\uD83D\\uDCB1\",\n 'curry': \"\\uD83C\\uDF5B\",\n 'custard': \"\\uD83C\\uDF6E\",\n 'customs': \"\\uD83D\\uDEC3\",\n 'cyclone': \"\\uD83C\\uDF00\",\n 'dagger': \"\\uD83D\\uDDE1\",\n 'dancer': \"\\uD83D\\uDC83\",\n 'dancing_women': \"\\uD83D\\uDC6F\",\n 'dancing_men': \"\\uD83D\\uDC6F‍\\u2642\\uFE0F\",\n 'dango': \"\\uD83C\\uDF61\",\n 'dark_sunglasses': \"\\uD83D\\uDD76\",\n 'dart': \"\\uD83C\\uDFAF\",\n 'dash': \"\\uD83D\\uDCA8\",\n 'date': \"\\uD83D\\uDCC5\",\n 'deciduous_tree': \"\\uD83C\\uDF33\",\n 'deer': \"\\uD83E\\uDD8C\",\n 'department_store': \"\\uD83C\\uDFEC\",\n 'derelict_house': \"\\uD83C\\uDFDA\",\n 'desert': \"\\uD83C\\uDFDC\",\n 'desert_island': \"\\uD83C\\uDFDD\",\n 'desktop_computer': \"\\uD83D\\uDDA5\",\n 'male_detective': \"\\uD83D\\uDD75\\uFE0F\",\n 'diamond_shape_with_a_dot_inside': \"\\uD83D\\uDCA0\",\n 'diamonds': \"\\u2666\\uFE0F\",\n 'disappointed': \"\\uD83D\\uDE1E\",\n 'disappointed_relieved': \"\\uD83D\\uDE25\",\n 'dizzy': \"\\uD83D\\uDCAB\",\n 'dizzy_face': \"\\uD83D\\uDE35\",\n 'do_not_litter': \"\\uD83D\\uDEAF\",\n 'dog': \"\\uD83D\\uDC36\",\n 'dog2': \"\\uD83D\\uDC15\",\n 'dollar': \"\\uD83D\\uDCB5\",\n 'dolls': \"\\uD83C\\uDF8E\",\n 'dolphin': \"\\uD83D\\uDC2C\",\n 'door': \"\\uD83D\\uDEAA\",\n 'doughnut': \"\\uD83C\\uDF69\",\n 'dove': \"\\uD83D\\uDD4A\",\n 'dragon': \"\\uD83D\\uDC09\",\n 'dragon_face': \"\\uD83D\\uDC32\",\n 'dress': \"\\uD83D\\uDC57\",\n 'dromedary_camel': \"\\uD83D\\uDC2A\",\n 'drooling_face': \"\\uD83E\\uDD24\",\n 'droplet': \"\\uD83D\\uDCA7\",\n 'drum': \"\\uD83E\\uDD41\",\n 'duck': \"\\uD83E\\uDD86\",\n 'dvd': \"\\uD83D\\uDCC0\",\n 'e-mail': \"\\uD83D\\uDCE7\",\n 'eagle': \"\\uD83E\\uDD85\",\n 'ear': \"\\uD83D\\uDC42\",\n 'ear_of_rice': \"\\uD83C\\uDF3E\",\n 'earth_africa': \"\\uD83C\\uDF0D\",\n 'earth_americas': \"\\uD83C\\uDF0E\",\n 'earth_asia': \"\\uD83C\\uDF0F\",\n 'egg': \"\\uD83E\\uDD5A\",\n 'eggplant': \"\\uD83C\\uDF46\",\n 'eight_pointed_black_star': \"\\u2734\\uFE0F\",\n 'eight_spoked_asterisk': \"\\u2733\\uFE0F\",\n 'electric_plug': \"\\uD83D\\uDD0C\",\n 'elephant': \"\\uD83D\\uDC18\",\n 'email': \"\\u2709\\uFE0F\",\n 'end': \"\\uD83D\\uDD1A\",\n 'envelope_with_arrow': \"\\uD83D\\uDCE9\",\n 'euro': \"\\uD83D\\uDCB6\",\n 'european_castle': \"\\uD83C\\uDFF0\",\n 'european_post_office': \"\\uD83C\\uDFE4\",\n 'evergreen_tree': \"\\uD83C\\uDF32\",\n 'exclamation': \"\\u2757\\uFE0F\",\n 'expressionless': \"\\uD83D\\uDE11\",\n 'eye': \"\\uD83D\\uDC41\",\n 'eye_speech_bubble': \"\\uD83D\\uDC41‍\\uD83D\\uDDE8\",\n 'eyeglasses': \"\\uD83D\\uDC53\",\n 'eyes': \"\\uD83D\\uDC40\",\n 'face_with_head_bandage': \"\\uD83E\\uDD15\",\n 'face_with_thermometer': \"\\uD83E\\uDD12\",\n 'fist_oncoming': \"\\uD83D\\uDC4A\",\n 'factory': \"\\uD83C\\uDFED\",\n 'fallen_leaf': \"\\uD83C\\uDF42\",\n 'family_man_woman_boy': \"\\uD83D\\uDC6A\",\n 'family_man_boy': \"\\uD83D\\uDC68‍\\uD83D\\uDC66\",\n 'family_man_boy_boy': \"\\uD83D\\uDC68‍\\uD83D\\uDC66‍\\uD83D\\uDC66\",\n 'family_man_girl': \"\\uD83D\\uDC68‍\\uD83D\\uDC67\",\n 'family_man_girl_boy': \"\\uD83D\\uDC68‍\\uD83D\\uDC67‍\\uD83D\\uDC66\",\n 'family_man_girl_girl': \"\\uD83D\\uDC68‍\\uD83D\\uDC67‍\\uD83D\\uDC67\",\n 'family_man_man_boy': \"\\uD83D\\uDC68‍\\uD83D\\uDC68‍\\uD83D\\uDC66\",\n 'family_man_man_boy_boy': \"\\uD83D\\uDC68‍\\uD83D\\uDC68‍\\uD83D\\uDC66‍\\uD83D\\uDC66\",\n 'family_man_man_girl': \"\\uD83D\\uDC68‍\\uD83D\\uDC68‍\\uD83D\\uDC67\",\n 'family_man_man_girl_boy': \"\\uD83D\\uDC68‍\\uD83D\\uDC68‍\\uD83D\\uDC67‍\\uD83D\\uDC66\",\n 'family_man_man_girl_girl': \"\\uD83D\\uDC68‍\\uD83D\\uDC68‍\\uD83D\\uDC67‍\\uD83D\\uDC67\",\n 'family_man_woman_boy_boy': \"\\uD83D\\uDC68‍\\uD83D\\uDC69‍\\uD83D\\uDC66‍\\uD83D\\uDC66\",\n 'family_man_woman_girl': \"\\uD83D\\uDC68‍\\uD83D\\uDC69‍\\uD83D\\uDC67\",\n 'family_man_woman_girl_boy': \"\\uD83D\\uDC68‍\\uD83D\\uDC69‍\\uD83D\\uDC67‍\\uD83D\\uDC66\",\n 'family_man_woman_girl_girl': \"\\uD83D\\uDC68‍\\uD83D\\uDC69‍\\uD83D\\uDC67‍\\uD83D\\uDC67\",\n 'family_woman_boy': \"\\uD83D\\uDC69‍\\uD83D\\uDC66\",\n 'family_woman_boy_boy': \"\\uD83D\\uDC69‍\\uD83D\\uDC66‍\\uD83D\\uDC66\",\n 'family_woman_girl': \"\\uD83D\\uDC69‍\\uD83D\\uDC67\",\n 'family_woman_girl_boy': \"\\uD83D\\uDC69‍\\uD83D\\uDC67‍\\uD83D\\uDC66\",\n 'family_woman_girl_girl': \"\\uD83D\\uDC69‍\\uD83D\\uDC67‍\\uD83D\\uDC67\",\n 'family_woman_woman_boy': \"\\uD83D\\uDC69‍\\uD83D\\uDC69‍\\uD83D\\uDC66\",\n 'family_woman_woman_boy_boy': \"\\uD83D\\uDC69‍\\uD83D\\uDC69‍\\uD83D\\uDC66‍\\uD83D\\uDC66\",\n 'family_woman_woman_girl': \"\\uD83D\\uDC69‍\\uD83D\\uDC69‍\\uD83D\\uDC67\",\n 'family_woman_woman_girl_boy': \"\\uD83D\\uDC69‍\\uD83D\\uDC69‍\\uD83D\\uDC67‍\\uD83D\\uDC66\",\n 'family_woman_woman_girl_girl': \"\\uD83D\\uDC69‍\\uD83D\\uDC69‍\\uD83D\\uDC67‍\\uD83D\\uDC67\",\n 'fast_forward': \"\\u23E9\",\n 'fax': \"\\uD83D\\uDCE0\",\n 'fearful': \"\\uD83D\\uDE28\",\n 'feet': \"\\uD83D\\uDC3E\",\n 'female_detective': \"\\uD83D\\uDD75\\uFE0F‍\\u2640\\uFE0F\",\n 'ferris_wheel': \"\\uD83C\\uDFA1\",\n 'ferry': \"\\u26F4\",\n 'field_hockey': \"\\uD83C\\uDFD1\",\n 'file_cabinet': \"\\uD83D\\uDDC4\",\n 'file_folder': \"\\uD83D\\uDCC1\",\n 'film_projector': \"\\uD83D\\uDCFD\",\n 'film_strip': \"\\uD83C\\uDF9E\",\n 'fire': \"\\uD83D\\uDD25\",\n 'fire_engine': \"\\uD83D\\uDE92\",\n 'fireworks': \"\\uD83C\\uDF86\",\n 'first_quarter_moon': \"\\uD83C\\uDF13\",\n 'first_quarter_moon_with_face': \"\\uD83C\\uDF1B\",\n 'fish': \"\\uD83D\\uDC1F\",\n 'fish_cake': \"\\uD83C\\uDF65\",\n 'fishing_pole_and_fish': \"\\uD83C\\uDFA3\",\n 'fist_raised': \"\\u270A\",\n 'fist_left': \"\\uD83E\\uDD1B\",\n 'fist_right': \"\\uD83E\\uDD1C\",\n 'flags': \"\\uD83C\\uDF8F\",\n 'flashlight': \"\\uD83D\\uDD26\",\n 'fleur_de_lis': \"\\u269C\\uFE0F\",\n 'flight_arrival': \"\\uD83D\\uDEEC\",\n 'flight_departure': \"\\uD83D\\uDEEB\",\n 'floppy_disk': \"\\uD83D\\uDCBE\",\n 'flower_playing_cards': \"\\uD83C\\uDFB4\",\n 'flushed': \"\\uD83D\\uDE33\",\n 'fog': \"\\uD83C\\uDF2B\",\n 'foggy': \"\\uD83C\\uDF01\",\n 'football': \"\\uD83C\\uDFC8\",\n 'footprints': \"\\uD83D\\uDC63\",\n 'fork_and_knife': \"\\uD83C\\uDF74\",\n 'fountain': \"\\u26F2\\uFE0F\",\n 'fountain_pen': \"\\uD83D\\uDD8B\",\n 'four_leaf_clover': \"\\uD83C\\uDF40\",\n 'fox_face': \"\\uD83E\\uDD8A\",\n 'framed_picture': \"\\uD83D\\uDDBC\",\n 'free': \"\\uD83C\\uDD93\",\n 'fried_egg': \"\\uD83C\\uDF73\",\n 'fried_shrimp': \"\\uD83C\\uDF64\",\n 'fries': \"\\uD83C\\uDF5F\",\n 'frog': \"\\uD83D\\uDC38\",\n 'frowning': \"\\uD83D\\uDE26\",\n 'frowning_face': \"\\u2639\\uFE0F\",\n 'frowning_man': \"\\uD83D\\uDE4D‍\\u2642\\uFE0F\",\n 'frowning_woman': \"\\uD83D\\uDE4D\",\n 'middle_finger': \"\\uD83D\\uDD95\",\n 'fuelpump': \"\\u26FD\\uFE0F\",\n 'full_moon': \"\\uD83C\\uDF15\",\n 'full_moon_with_face': \"\\uD83C\\uDF1D\",\n 'funeral_urn': \"\\u26B1\\uFE0F\",\n 'game_die': \"\\uD83C\\uDFB2\",\n 'gear': \"\\u2699\\uFE0F\",\n 'gem': \"\\uD83D\\uDC8E\",\n 'gemini': \"\\u264A\\uFE0F\",\n 'ghost': \"\\uD83D\\uDC7B\",\n 'gift': \"\\uD83C\\uDF81\",\n 'gift_heart': \"\\uD83D\\uDC9D\",\n 'girl': \"\\uD83D\\uDC67\",\n 'globe_with_meridians': \"\\uD83C\\uDF10\",\n 'goal_net': \"\\uD83E\\uDD45\",\n 'goat': \"\\uD83D\\uDC10\",\n 'golf': \"\\u26F3\\uFE0F\",\n 'golfing_man': \"\\uD83C\\uDFCC\\uFE0F\",\n 'golfing_woman': \"\\uD83C\\uDFCC\\uFE0F‍\\u2640\\uFE0F\",\n 'gorilla': \"\\uD83E\\uDD8D\",\n 'grapes': \"\\uD83C\\uDF47\",\n 'green_apple': \"\\uD83C\\uDF4F\",\n 'green_book': \"\\uD83D\\uDCD7\",\n 'green_heart': \"\\uD83D\\uDC9A\",\n 'green_salad': \"\\uD83E\\uDD57\",\n 'grey_exclamation': \"\\u2755\",\n 'grey_question': \"\\u2754\",\n 'grimacing': \"\\uD83D\\uDE2C\",\n 'grin': \"\\uD83D\\uDE01\",\n 'grinning': \"\\uD83D\\uDE00\",\n 'guardsman': \"\\uD83D\\uDC82\",\n 'guardswoman': \"\\uD83D\\uDC82‍\\u2640\\uFE0F\",\n 'guitar': \"\\uD83C\\uDFB8\",\n 'gun': \"\\uD83D\\uDD2B\",\n 'haircut_woman': \"\\uD83D\\uDC87\",\n 'haircut_man': \"\\uD83D\\uDC87‍\\u2642\\uFE0F\",\n 'hamburger': \"\\uD83C\\uDF54\",\n 'hammer': \"\\uD83D\\uDD28\",\n 'hammer_and_pick': \"\\u2692\",\n 'hammer_and_wrench': \"\\uD83D\\uDEE0\",\n 'hamster': \"\\uD83D\\uDC39\",\n 'hand': \"\\u270B\",\n 'handbag': \"\\uD83D\\uDC5C\",\n 'handshake': \"\\uD83E\\uDD1D\",\n 'hankey': \"\\uD83D\\uDCA9\",\n 'hatched_chick': \"\\uD83D\\uDC25\",\n 'hatching_chick': \"\\uD83D\\uDC23\",\n 'headphones': \"\\uD83C\\uDFA7\",\n 'hear_no_evil': \"\\uD83D\\uDE49\",\n 'heart': \"\\u2764\\uFE0F\",\n 'heart_decoration': \"\\uD83D\\uDC9F\",\n 'heart_eyes': \"\\uD83D\\uDE0D\",\n 'heart_eyes_cat': \"\\uD83D\\uDE3B\",\n 'heartbeat': \"\\uD83D\\uDC93\",\n 'heartpulse': \"\\uD83D\\uDC97\",\n 'hearts': \"\\u2665\\uFE0F\",\n 'heavy_check_mark': \"\\u2714\\uFE0F\",\n 'heavy_division_sign': \"\\u2797\",\n 'heavy_dollar_sign': \"\\uD83D\\uDCB2\",\n 'heavy_heart_exclamation': \"\\u2763\\uFE0F\",\n 'heavy_minus_sign': \"\\u2796\",\n 'heavy_multiplication_x': \"\\u2716\\uFE0F\",\n 'heavy_plus_sign': \"\\u2795\",\n 'helicopter': \"\\uD83D\\uDE81\",\n 'herb': \"\\uD83C\\uDF3F\",\n 'hibiscus': \"\\uD83C\\uDF3A\",\n 'high_brightness': \"\\uD83D\\uDD06\",\n 'high_heel': \"\\uD83D\\uDC60\",\n 'hocho': \"\\uD83D\\uDD2A\",\n 'hole': \"\\uD83D\\uDD73\",\n 'honey_pot': \"\\uD83C\\uDF6F\",\n 'horse': \"\\uD83D\\uDC34\",\n 'horse_racing': \"\\uD83C\\uDFC7\",\n 'hospital': \"\\uD83C\\uDFE5\",\n 'hot_pepper': \"\\uD83C\\uDF36\",\n 'hotdog': \"\\uD83C\\uDF2D\",\n 'hotel': \"\\uD83C\\uDFE8\",\n 'hotsprings': \"\\u2668\\uFE0F\",\n 'hourglass': \"\\u231B\\uFE0F\",\n 'hourglass_flowing_sand': \"\\u23F3\",\n 'house': \"\\uD83C\\uDFE0\",\n 'house_with_garden': \"\\uD83C\\uDFE1\",\n 'houses': \"\\uD83C\\uDFD8\",\n 'hugs': \"\\uD83E\\uDD17\",\n 'hushed': \"\\uD83D\\uDE2F\",\n 'ice_cream': \"\\uD83C\\uDF68\",\n 'ice_hockey': \"\\uD83C\\uDFD2\",\n 'ice_skate': \"\\u26F8\",\n 'icecream': \"\\uD83C\\uDF66\",\n 'id': \"\\uD83C\\uDD94\",\n 'ideograph_advantage': \"\\uD83C\\uDE50\",\n 'imp': \"\\uD83D\\uDC7F\",\n 'inbox_tray': \"\\uD83D\\uDCE5\",\n 'incoming_envelope': \"\\uD83D\\uDCE8\",\n 'tipping_hand_woman': \"\\uD83D\\uDC81\",\n 'information_source': \"\\u2139\\uFE0F\",\n 'innocent': \"\\uD83D\\uDE07\",\n 'interrobang': \"\\u2049\\uFE0F\",\n 'iphone': \"\\uD83D\\uDCF1\",\n 'izakaya_lantern': \"\\uD83C\\uDFEE\",\n 'jack_o_lantern': \"\\uD83C\\uDF83\",\n 'japan': \"\\uD83D\\uDDFE\",\n 'japanese_castle': \"\\uD83C\\uDFEF\",\n 'japanese_goblin': \"\\uD83D\\uDC7A\",\n 'japanese_ogre': \"\\uD83D\\uDC79\",\n 'jeans': \"\\uD83D\\uDC56\",\n 'joy': \"\\uD83D\\uDE02\",\n 'joy_cat': \"\\uD83D\\uDE39\",\n 'joystick': \"\\uD83D\\uDD79\",\n 'kaaba': \"\\uD83D\\uDD4B\",\n 'key': \"\\uD83D\\uDD11\",\n 'keyboard': \"\\u2328\\uFE0F\",\n 'keycap_ten': \"\\uD83D\\uDD1F\",\n 'kick_scooter': \"\\uD83D\\uDEF4\",\n 'kimono': \"\\uD83D\\uDC58\",\n 'kiss': \"\\uD83D\\uDC8B\",\n 'kissing': \"\\uD83D\\uDE17\",\n 'kissing_cat': \"\\uD83D\\uDE3D\",\n 'kissing_closed_eyes': \"\\uD83D\\uDE1A\",\n 'kissing_heart': \"\\uD83D\\uDE18\",\n 'kissing_smiling_eyes': \"\\uD83D\\uDE19\",\n 'kiwi_fruit': \"\\uD83E\\uDD5D\",\n 'koala': \"\\uD83D\\uDC28\",\n 'koko': \"\\uD83C\\uDE01\",\n 'label': \"\\uD83C\\uDFF7\",\n 'large_blue_circle': \"\\uD83D\\uDD35\",\n 'large_blue_diamond': \"\\uD83D\\uDD37\",\n 'large_orange_diamond': \"\\uD83D\\uDD36\",\n 'last_quarter_moon': \"\\uD83C\\uDF17\",\n 'last_quarter_moon_with_face': \"\\uD83C\\uDF1C\",\n 'latin_cross': \"\\u271D\\uFE0F\",\n 'laughing': \"\\uD83D\\uDE06\",\n 'leaves': \"\\uD83C\\uDF43\",\n 'ledger': \"\\uD83D\\uDCD2\",\n 'left_luggage': \"\\uD83D\\uDEC5\",\n 'left_right_arrow': \"\\u2194\\uFE0F\",\n 'leftwards_arrow_with_hook': \"\\u21A9\\uFE0F\",\n 'lemon': \"\\uD83C\\uDF4B\",\n 'leo': \"\\u264C\\uFE0F\",\n 'leopard': \"\\uD83D\\uDC06\",\n 'level_slider': \"\\uD83C\\uDF9A\",\n 'libra': \"\\u264E\\uFE0F\",\n 'light_rail': \"\\uD83D\\uDE88\",\n 'link': \"\\uD83D\\uDD17\",\n 'lion': \"\\uD83E\\uDD81\",\n 'lips': \"\\uD83D\\uDC44\",\n 'lipstick': \"\\uD83D\\uDC84\",\n 'lizard': \"\\uD83E\\uDD8E\",\n 'lock': \"\\uD83D\\uDD12\",\n 'lock_with_ink_pen': \"\\uD83D\\uDD0F\",\n 'lollipop': \"\\uD83C\\uDF6D\",\n 'loop': \"\\u27BF\",\n 'loud_sound': \"\\uD83D\\uDD0A\",\n 'loudspeaker': \"\\uD83D\\uDCE2\",\n 'love_hotel': \"\\uD83C\\uDFE9\",\n 'love_letter': \"\\uD83D\\uDC8C\",\n 'low_brightness': \"\\uD83D\\uDD05\",\n 'lying_face': \"\\uD83E\\uDD25\",\n 'm': \"\\u24C2\\uFE0F\",\n 'mag': \"\\uD83D\\uDD0D\",\n 'mag_right': \"\\uD83D\\uDD0E\",\n 'mahjong': \"\\uD83C\\uDC04\\uFE0F\",\n 'mailbox': \"\\uD83D\\uDCEB\",\n 'mailbox_closed': \"\\uD83D\\uDCEA\",\n 'mailbox_with_mail': \"\\uD83D\\uDCEC\",\n 'mailbox_with_no_mail': \"\\uD83D\\uDCED\",\n 'man': \"\\uD83D\\uDC68\",\n 'man_artist': \"\\uD83D\\uDC68‍\\uD83C\\uDFA8\",\n 'man_astronaut': \"\\uD83D\\uDC68‍\\uD83D\\uDE80\",\n 'man_cartwheeling': \"\\uD83E\\uDD38‍\\u2642\\uFE0F\",\n 'man_cook': \"\\uD83D\\uDC68‍\\uD83C\\uDF73\",\n 'man_dancing': \"\\uD83D\\uDD7A\",\n 'man_facepalming': \"\\uD83E\\uDD26‍\\u2642\\uFE0F\",\n 'man_factory_worker': \"\\uD83D\\uDC68‍\\uD83C\\uDFED\",\n 'man_farmer': \"\\uD83D\\uDC68‍\\uD83C\\uDF3E\",\n 'man_firefighter': \"\\uD83D\\uDC68‍\\uD83D\\uDE92\",\n 'man_health_worker': \"\\uD83D\\uDC68‍\\u2695\\uFE0F\",\n 'man_in_tuxedo': \"\\uD83E\\uDD35\",\n 'man_judge': \"\\uD83D\\uDC68‍\\u2696\\uFE0F\",\n 'man_juggling': \"\\uD83E\\uDD39‍\\u2642\\uFE0F\",\n 'man_mechanic': \"\\uD83D\\uDC68‍\\uD83D\\uDD27\",\n 'man_office_worker': \"\\uD83D\\uDC68‍\\uD83D\\uDCBC\",\n 'man_pilot': \"\\uD83D\\uDC68‍\\u2708\\uFE0F\",\n 'man_playing_handball': \"\\uD83E\\uDD3E‍\\u2642\\uFE0F\",\n 'man_playing_water_polo': \"\\uD83E\\uDD3D‍\\u2642\\uFE0F\",\n 'man_scientist': \"\\uD83D\\uDC68‍\\uD83D\\uDD2C\",\n 'man_shrugging': \"\\uD83E\\uDD37‍\\u2642\\uFE0F\",\n 'man_singer': \"\\uD83D\\uDC68‍\\uD83C\\uDFA4\",\n 'man_student': \"\\uD83D\\uDC68‍\\uD83C\\uDF93\",\n 'man_teacher': \"\\uD83D\\uDC68‍\\uD83C\\uDFEB\",\n 'man_technologist': \"\\uD83D\\uDC68‍\\uD83D\\uDCBB\",\n 'man_with_gua_pi_mao': \"\\uD83D\\uDC72\",\n 'man_with_turban': \"\\uD83D\\uDC73\",\n 'tangerine': \"\\uD83C\\uDF4A\",\n 'mans_shoe': \"\\uD83D\\uDC5E\",\n 'mantelpiece_clock': \"\\uD83D\\uDD70\",\n 'maple_leaf': \"\\uD83C\\uDF41\",\n 'martial_arts_uniform': \"\\uD83E\\uDD4B\",\n 'mask': \"\\uD83D\\uDE37\",\n 'massage_woman': \"\\uD83D\\uDC86\",\n 'massage_man': \"\\uD83D\\uDC86‍\\u2642\\uFE0F\",\n 'meat_on_bone': \"\\uD83C\\uDF56\",\n 'medal_military': \"\\uD83C\\uDF96\",\n 'medal_sports': \"\\uD83C\\uDFC5\",\n 'mega': \"\\uD83D\\uDCE3\",\n 'melon': \"\\uD83C\\uDF48\",\n 'memo': \"\\uD83D\\uDCDD\",\n 'men_wrestling': \"\\uD83E\\uDD3C‍\\u2642\\uFE0F\",\n 'menorah': \"\\uD83D\\uDD4E\",\n 'mens': \"\\uD83D\\uDEB9\",\n 'metal': \"\\uD83E\\uDD18\",\n 'metro': \"\\uD83D\\uDE87\",\n 'microphone': \"\\uD83C\\uDFA4\",\n 'microscope': \"\\uD83D\\uDD2C\",\n 'milk_glass': \"\\uD83E\\uDD5B\",\n 'milky_way': \"\\uD83C\\uDF0C\",\n 'minibus': \"\\uD83D\\uDE90\",\n 'minidisc': \"\\uD83D\\uDCBD\",\n 'mobile_phone_off': \"\\uD83D\\uDCF4\",\n 'money_mouth_face': \"\\uD83E\\uDD11\",\n 'money_with_wings': \"\\uD83D\\uDCB8\",\n 'moneybag': \"\\uD83D\\uDCB0\",\n 'monkey': \"\\uD83D\\uDC12\",\n 'monkey_face': \"\\uD83D\\uDC35\",\n 'monorail': \"\\uD83D\\uDE9D\",\n 'moon': \"\\uD83C\\uDF14\",\n 'mortar_board': \"\\uD83C\\uDF93\",\n 'mosque': \"\\uD83D\\uDD4C\",\n 'motor_boat': \"\\uD83D\\uDEE5\",\n 'motor_scooter': \"\\uD83D\\uDEF5\",\n 'motorcycle': \"\\uD83C\\uDFCD\",\n 'motorway': \"\\uD83D\\uDEE3\",\n 'mount_fuji': \"\\uD83D\\uDDFB\",\n 'mountain': \"\\u26F0\",\n 'mountain_biking_man': \"\\uD83D\\uDEB5\",\n 'mountain_biking_woman': \"\\uD83D\\uDEB5‍\\u2640\\uFE0F\",\n 'mountain_cableway': \"\\uD83D\\uDEA0\",\n 'mountain_railway': \"\\uD83D\\uDE9E\",\n 'mountain_snow': \"\\uD83C\\uDFD4\",\n 'mouse': \"\\uD83D\\uDC2D\",\n 'mouse2': \"\\uD83D\\uDC01\",\n 'movie_camera': \"\\uD83C\\uDFA5\",\n 'moyai': \"\\uD83D\\uDDFF\",\n 'mrs_claus': \"\\uD83E\\uDD36\",\n 'muscle': \"\\uD83D\\uDCAA\",\n 'mushroom': \"\\uD83C\\uDF44\",\n 'musical_keyboard': \"\\uD83C\\uDFB9\",\n 'musical_note': \"\\uD83C\\uDFB5\",\n 'musical_score': \"\\uD83C\\uDFBC\",\n 'mute': \"\\uD83D\\uDD07\",\n 'nail_care': \"\\uD83D\\uDC85\",\n 'name_badge': \"\\uD83D\\uDCDB\",\n 'national_park': \"\\uD83C\\uDFDE\",\n 'nauseated_face': \"\\uD83E\\uDD22\",\n 'necktie': \"\\uD83D\\uDC54\",\n 'negative_squared_cross_mark': \"\\u274E\",\n 'nerd_face': \"\\uD83E\\uDD13\",\n 'neutral_face': \"\\uD83D\\uDE10\",\n 'new': \"\\uD83C\\uDD95\",\n 'new_moon': \"\\uD83C\\uDF11\",\n 'new_moon_with_face': \"\\uD83C\\uDF1A\",\n 'newspaper': \"\\uD83D\\uDCF0\",\n 'newspaper_roll': \"\\uD83D\\uDDDE\",\n 'next_track_button': \"\\u23ED\",\n 'ng': \"\\uD83C\\uDD96\",\n 'no_good_man': \"\\uD83D\\uDE45‍\\u2642\\uFE0F\",\n 'no_good_woman': \"\\uD83D\\uDE45\",\n 'night_with_stars': \"\\uD83C\\uDF03\",\n 'no_bell': \"\\uD83D\\uDD15\",\n 'no_bicycles': \"\\uD83D\\uDEB3\",\n 'no_entry': \"\\u26D4\\uFE0F\",\n 'no_entry_sign': \"\\uD83D\\uDEAB\",\n 'no_mobile_phones': \"\\uD83D\\uDCF5\",\n 'no_mouth': \"\\uD83D\\uDE36\",\n 'no_pedestrians': \"\\uD83D\\uDEB7\",\n 'no_smoking': \"\\uD83D\\uDEAD\",\n 'non-potable_water': \"\\uD83D\\uDEB1\",\n 'nose': \"\\uD83D\\uDC43\",\n 'notebook': \"\\uD83D\\uDCD3\",\n 'notebook_with_decorative_cover': \"\\uD83D\\uDCD4\",\n 'notes': \"\\uD83C\\uDFB6\",\n 'nut_and_bolt': \"\\uD83D\\uDD29\",\n 'o': \"\\u2B55\\uFE0F\",\n 'o2': \"\\uD83C\\uDD7E\\uFE0F\",\n 'ocean': \"\\uD83C\\uDF0A\",\n 'octopus': \"\\uD83D\\uDC19\",\n 'oden': \"\\uD83C\\uDF62\",\n 'office': \"\\uD83C\\uDFE2\",\n 'oil_drum': \"\\uD83D\\uDEE2\",\n 'ok': \"\\uD83C\\uDD97\",\n 'ok_hand': \"\\uD83D\\uDC4C\",\n 'ok_man': \"\\uD83D\\uDE46‍\\u2642\\uFE0F\",\n 'ok_woman': \"\\uD83D\\uDE46\",\n 'old_key': \"\\uD83D\\uDDDD\",\n 'older_man': \"\\uD83D\\uDC74\",\n 'older_woman': \"\\uD83D\\uDC75\",\n 'om': \"\\uD83D\\uDD49\",\n 'on': \"\\uD83D\\uDD1B\",\n 'oncoming_automobile': \"\\uD83D\\uDE98\",\n 'oncoming_bus': \"\\uD83D\\uDE8D\",\n 'oncoming_police_car': \"\\uD83D\\uDE94\",\n 'oncoming_taxi': \"\\uD83D\\uDE96\",\n 'open_file_folder': \"\\uD83D\\uDCC2\",\n 'open_hands': \"\\uD83D\\uDC50\",\n 'open_mouth': \"\\uD83D\\uDE2E\",\n 'open_umbrella': \"\\u2602\\uFE0F\",\n 'ophiuchus': \"\\u26CE\",\n 'orange_book': \"\\uD83D\\uDCD9\",\n 'orthodox_cross': \"\\u2626\\uFE0F\",\n 'outbox_tray': \"\\uD83D\\uDCE4\",\n 'owl': \"\\uD83E\\uDD89\",\n 'ox': \"\\uD83D\\uDC02\",\n 'package': \"\\uD83D\\uDCE6\",\n 'page_facing_up': \"\\uD83D\\uDCC4\",\n 'page_with_curl': \"\\uD83D\\uDCC3\",\n 'pager': \"\\uD83D\\uDCDF\",\n 'paintbrush': \"\\uD83D\\uDD8C\",\n 'palm_tree': \"\\uD83C\\uDF34\",\n 'pancakes': \"\\uD83E\\uDD5E\",\n 'panda_face': \"\\uD83D\\uDC3C\",\n 'paperclip': \"\\uD83D\\uDCCE\",\n 'paperclips': \"\\uD83D\\uDD87\",\n 'parasol_on_ground': \"\\u26F1\",\n 'parking': \"\\uD83C\\uDD7F\\uFE0F\",\n 'part_alternation_mark': \"\\u303D\\uFE0F\",\n 'partly_sunny': \"\\u26C5\\uFE0F\",\n 'passenger_ship': \"\\uD83D\\uDEF3\",\n 'passport_control': \"\\uD83D\\uDEC2\",\n 'pause_button': \"\\u23F8\",\n 'peace_symbol': \"\\u262E\\uFE0F\",\n 'peach': \"\\uD83C\\uDF51\",\n 'peanuts': \"\\uD83E\\uDD5C\",\n 'pear': \"\\uD83C\\uDF50\",\n 'pen': \"\\uD83D\\uDD8A\",\n 'pencil2': \"\\u270F\\uFE0F\",\n 'penguin': \"\\uD83D\\uDC27\",\n 'pensive': \"\\uD83D\\uDE14\",\n 'performing_arts': \"\\uD83C\\uDFAD\",\n 'persevere': \"\\uD83D\\uDE23\",\n 'person_fencing': \"\\uD83E\\uDD3A\",\n 'pouting_woman': \"\\uD83D\\uDE4E\",\n 'phone': \"\\u260E\\uFE0F\",\n 'pick': \"\\u26CF\",\n 'pig': \"\\uD83D\\uDC37\",\n 'pig2': \"\\uD83D\\uDC16\",\n 'pig_nose': \"\\uD83D\\uDC3D\",\n 'pill': \"\\uD83D\\uDC8A\",\n 'pineapple': \"\\uD83C\\uDF4D\",\n 'ping_pong': \"\\uD83C\\uDFD3\",\n 'pisces': \"\\u2653\\uFE0F\",\n 'pizza': \"\\uD83C\\uDF55\",\n 'place_of_worship': \"\\uD83D\\uDED0\",\n 'plate_with_cutlery': \"\\uD83C\\uDF7D\",\n 'play_or_pause_button': \"\\u23EF\",\n 'point_down': \"\\uD83D\\uDC47\",\n 'point_left': \"\\uD83D\\uDC48\",\n 'point_right': \"\\uD83D\\uDC49\",\n 'point_up': \"\\u261D\\uFE0F\",\n 'point_up_2': \"\\uD83D\\uDC46\",\n 'police_car': \"\\uD83D\\uDE93\",\n 'policewoman': \"\\uD83D\\uDC6E‍\\u2640\\uFE0F\",\n 'poodle': \"\\uD83D\\uDC29\",\n 'popcorn': \"\\uD83C\\uDF7F\",\n 'post_office': \"\\uD83C\\uDFE3\",\n 'postal_horn': \"\\uD83D\\uDCEF\",\n 'postbox': \"\\uD83D\\uDCEE\",\n 'potable_water': \"\\uD83D\\uDEB0\",\n 'potato': \"\\uD83E\\uDD54\",\n 'pouch': \"\\uD83D\\uDC5D\",\n 'poultry_leg': \"\\uD83C\\uDF57\",\n 'pound': \"\\uD83D\\uDCB7\",\n 'rage': \"\\uD83D\\uDE21\",\n 'pouting_cat': \"\\uD83D\\uDE3E\",\n 'pouting_man': \"\\uD83D\\uDE4E‍\\u2642\\uFE0F\",\n 'pray': \"\\uD83D\\uDE4F\",\n 'prayer_beads': \"\\uD83D\\uDCFF\",\n 'pregnant_woman': \"\\uD83E\\uDD30\",\n 'previous_track_button': \"\\u23EE\",\n 'prince': \"\\uD83E\\uDD34\",\n 'princess': \"\\uD83D\\uDC78\",\n 'printer': \"\\uD83D\\uDDA8\",\n 'purple_heart': \"\\uD83D\\uDC9C\",\n 'purse': \"\\uD83D\\uDC5B\",\n 'pushpin': \"\\uD83D\\uDCCC\",\n 'put_litter_in_its_place': \"\\uD83D\\uDEAE\",\n 'question': \"\\u2753\",\n 'rabbit': \"\\uD83D\\uDC30\",\n 'rabbit2': \"\\uD83D\\uDC07\",\n 'racehorse': \"\\uD83D\\uDC0E\",\n 'racing_car': \"\\uD83C\\uDFCE\",\n 'radio': \"\\uD83D\\uDCFB\",\n 'radio_button': \"\\uD83D\\uDD18\",\n 'radioactive': \"\\u2622\\uFE0F\",\n 'railway_car': \"\\uD83D\\uDE83\",\n 'railway_track': \"\\uD83D\\uDEE4\",\n 'rainbow': \"\\uD83C\\uDF08\",\n 'rainbow_flag': \"\\uD83C\\uDFF3\\uFE0F‍\\uD83C\\uDF08\",\n 'raised_back_of_hand': \"\\uD83E\\uDD1A\",\n 'raised_hand_with_fingers_splayed': \"\\uD83D\\uDD90\",\n 'raised_hands': \"\\uD83D\\uDE4C\",\n 'raising_hand_woman': \"\\uD83D\\uDE4B\",\n 'raising_hand_man': \"\\uD83D\\uDE4B‍\\u2642\\uFE0F\",\n 'ram': \"\\uD83D\\uDC0F\",\n 'ramen': \"\\uD83C\\uDF5C\",\n 'rat': \"\\uD83D\\uDC00\",\n 'record_button': \"\\u23FA\",\n 'recycle': \"\\u267B\\uFE0F\",\n 'red_circle': \"\\uD83D\\uDD34\",\n 'registered': \"\\xAE\\uFE0F\",\n 'relaxed': \"\\u263A\\uFE0F\",\n 'relieved': \"\\uD83D\\uDE0C\",\n 'reminder_ribbon': \"\\uD83C\\uDF97\",\n 'repeat': \"\\uD83D\\uDD01\",\n 'repeat_one': \"\\uD83D\\uDD02\",\n 'rescue_worker_helmet': \"\\u26D1\",\n 'restroom': \"\\uD83D\\uDEBB\",\n 'revolving_hearts': \"\\uD83D\\uDC9E\",\n 'rewind': \"\\u23EA\",\n 'rhinoceros': \"\\uD83E\\uDD8F\",\n 'ribbon': \"\\uD83C\\uDF80\",\n 'rice': \"\\uD83C\\uDF5A\",\n 'rice_ball': \"\\uD83C\\uDF59\",\n 'rice_cracker': \"\\uD83C\\uDF58\",\n 'rice_scene': \"\\uD83C\\uDF91\",\n 'right_anger_bubble': \"\\uD83D\\uDDEF\",\n 'ring': \"\\uD83D\\uDC8D\",\n 'robot': \"\\uD83E\\uDD16\",\n 'rocket': \"\\uD83D\\uDE80\",\n 'rofl': \"\\uD83E\\uDD23\",\n 'roll_eyes': \"\\uD83D\\uDE44\",\n 'roller_coaster': \"\\uD83C\\uDFA2\",\n 'rooster': \"\\uD83D\\uDC13\",\n 'rose': \"\\uD83C\\uDF39\",\n 'rosette': \"\\uD83C\\uDFF5\",\n 'rotating_light': \"\\uD83D\\uDEA8\",\n 'round_pushpin': \"\\uD83D\\uDCCD\",\n 'rowing_man': \"\\uD83D\\uDEA3\",\n 'rowing_woman': \"\\uD83D\\uDEA3‍\\u2640\\uFE0F\",\n 'rugby_football': \"\\uD83C\\uDFC9\",\n 'running_man': \"\\uD83C\\uDFC3\",\n 'running_shirt_with_sash': \"\\uD83C\\uDFBD\",\n 'running_woman': \"\\uD83C\\uDFC3‍\\u2640\\uFE0F\",\n 'sa': \"\\uD83C\\uDE02\\uFE0F\",\n 'sagittarius': \"\\u2650\\uFE0F\",\n 'sake': \"\\uD83C\\uDF76\",\n 'sandal': \"\\uD83D\\uDC61\",\n 'santa': \"\\uD83C\\uDF85\",\n 'satellite': \"\\uD83D\\uDCE1\",\n 'saxophone': \"\\uD83C\\uDFB7\",\n 'school': \"\\uD83C\\uDFEB\",\n 'school_satchel': \"\\uD83C\\uDF92\",\n 'scissors': \"\\u2702\\uFE0F\",\n 'scorpion': \"\\uD83E\\uDD82\",\n 'scorpius': \"\\u264F\\uFE0F\",\n 'scream': \"\\uD83D\\uDE31\",\n 'scream_cat': \"\\uD83D\\uDE40\",\n 'scroll': \"\\uD83D\\uDCDC\",\n 'seat': \"\\uD83D\\uDCBA\",\n 'secret': \"\\u3299\\uFE0F\",\n 'see_no_evil': \"\\uD83D\\uDE48\",\n 'seedling': \"\\uD83C\\uDF31\",\n 'selfie': \"\\uD83E\\uDD33\",\n 'shallow_pan_of_food': \"\\uD83E\\uDD58\",\n 'shamrock': \"\\u2618\\uFE0F\",\n 'shark': \"\\uD83E\\uDD88\",\n 'shaved_ice': \"\\uD83C\\uDF67\",\n 'sheep': \"\\uD83D\\uDC11\",\n 'shell': \"\\uD83D\\uDC1A\",\n 'shield': \"\\uD83D\\uDEE1\",\n 'shinto_shrine': \"\\u26E9\",\n 'ship': \"\\uD83D\\uDEA2\",\n 'shirt': \"\\uD83D\\uDC55\",\n 'shopping': \"\\uD83D\\uDECD\",\n 'shopping_cart': \"\\uD83D\\uDED2\",\n 'shower': \"\\uD83D\\uDEBF\",\n 'shrimp': \"\\uD83E\\uDD90\",\n 'signal_strength': \"\\uD83D\\uDCF6\",\n 'six_pointed_star': \"\\uD83D\\uDD2F\",\n 'ski': \"\\uD83C\\uDFBF\",\n 'skier': \"\\u26F7\",\n 'skull': \"\\uD83D\\uDC80\",\n 'skull_and_crossbones': \"\\u2620\\uFE0F\",\n 'sleeping': \"\\uD83D\\uDE34\",\n 'sleeping_bed': \"\\uD83D\\uDECC\",\n 'sleepy': \"\\uD83D\\uDE2A\",\n 'slightly_frowning_face': \"\\uD83D\\uDE41\",\n 'slightly_smiling_face': \"\\uD83D\\uDE42\",\n 'slot_machine': \"\\uD83C\\uDFB0\",\n 'small_airplane': \"\\uD83D\\uDEE9\",\n 'small_blue_diamond': \"\\uD83D\\uDD39\",\n 'small_orange_diamond': \"\\uD83D\\uDD38\",\n 'small_red_triangle': \"\\uD83D\\uDD3A\",\n 'small_red_triangle_down': \"\\uD83D\\uDD3B\",\n 'smile': \"\\uD83D\\uDE04\",\n 'smile_cat': \"\\uD83D\\uDE38\",\n 'smiley': \"\\uD83D\\uDE03\",\n 'smiley_cat': \"\\uD83D\\uDE3A\",\n 'smiling_imp': \"\\uD83D\\uDE08\",\n 'smirk': \"\\uD83D\\uDE0F\",\n 'smirk_cat': \"\\uD83D\\uDE3C\",\n 'smoking': \"\\uD83D\\uDEAC\",\n 'snail': \"\\uD83D\\uDC0C\",\n 'snake': \"\\uD83D\\uDC0D\",\n 'sneezing_face': \"\\uD83E\\uDD27\",\n 'snowboarder': \"\\uD83C\\uDFC2\",\n 'snowflake': \"\\u2744\\uFE0F\",\n 'snowman': \"\\u26C4\\uFE0F\",\n 'snowman_with_snow': \"\\u2603\\uFE0F\",\n 'sob': \"\\uD83D\\uDE2D\",\n 'soccer': \"\\u26BD\\uFE0F\",\n 'soon': \"\\uD83D\\uDD1C\",\n 'sos': \"\\uD83C\\uDD98\",\n 'sound': \"\\uD83D\\uDD09\",\n 'space_invader': \"\\uD83D\\uDC7E\",\n 'spades': \"\\u2660\\uFE0F\",\n 'spaghetti': \"\\uD83C\\uDF5D\",\n 'sparkle': \"\\u2747\\uFE0F\",\n 'sparkler': \"\\uD83C\\uDF87\",\n 'sparkles': \"\\u2728\",\n 'sparkling_heart': \"\\uD83D\\uDC96\",\n 'speak_no_evil': \"\\uD83D\\uDE4A\",\n 'speaker': \"\\uD83D\\uDD08\",\n 'speaking_head': \"\\uD83D\\uDDE3\",\n 'speech_balloon': \"\\uD83D\\uDCAC\",\n 'speedboat': \"\\uD83D\\uDEA4\",\n 'spider': \"\\uD83D\\uDD77\",\n 'spider_web': \"\\uD83D\\uDD78\",\n 'spiral_calendar': \"\\uD83D\\uDDD3\",\n 'spiral_notepad': \"\\uD83D\\uDDD2\",\n 'spoon': \"\\uD83E\\uDD44\",\n 'squid': \"\\uD83E\\uDD91\",\n 'stadium': \"\\uD83C\\uDFDF\",\n 'star': \"\\u2B50\\uFE0F\",\n 'star2': \"\\uD83C\\uDF1F\",\n 'star_and_crescent': \"\\u262A\\uFE0F\",\n 'star_of_david': \"\\u2721\\uFE0F\",\n 'stars': \"\\uD83C\\uDF20\",\n 'station': \"\\uD83D\\uDE89\",\n 'statue_of_liberty': \"\\uD83D\\uDDFD\",\n 'steam_locomotive': \"\\uD83D\\uDE82\",\n 'stew': \"\\uD83C\\uDF72\",\n 'stop_button': \"\\u23F9\",\n 'stop_sign': \"\\uD83D\\uDED1\",\n 'stopwatch': \"\\u23F1\",\n 'straight_ruler': \"\\uD83D\\uDCCF\",\n 'strawberry': \"\\uD83C\\uDF53\",\n 'stuck_out_tongue': \"\\uD83D\\uDE1B\",\n 'stuck_out_tongue_closed_eyes': \"\\uD83D\\uDE1D\",\n 'stuck_out_tongue_winking_eye': \"\\uD83D\\uDE1C\",\n 'studio_microphone': \"\\uD83C\\uDF99\",\n 'stuffed_flatbread': \"\\uD83E\\uDD59\",\n 'sun_behind_large_cloud': \"\\uD83C\\uDF25\",\n 'sun_behind_rain_cloud': \"\\uD83C\\uDF26\",\n 'sun_behind_small_cloud': \"\\uD83C\\uDF24\",\n 'sun_with_face': \"\\uD83C\\uDF1E\",\n 'sunflower': \"\\uD83C\\uDF3B\",\n 'sunglasses': \"\\uD83D\\uDE0E\",\n 'sunny': \"\\u2600\\uFE0F\",\n 'sunrise': \"\\uD83C\\uDF05\",\n 'sunrise_over_mountains': \"\\uD83C\\uDF04\",\n 'surfing_man': \"\\uD83C\\uDFC4\",\n 'surfing_woman': \"\\uD83C\\uDFC4‍\\u2640\\uFE0F\",\n 'sushi': \"\\uD83C\\uDF63\",\n 'suspension_railway': \"\\uD83D\\uDE9F\",\n 'sweat': \"\\uD83D\\uDE13\",\n 'sweat_drops': \"\\uD83D\\uDCA6\",\n 'sweat_smile': \"\\uD83D\\uDE05\",\n 'sweet_potato': \"\\uD83C\\uDF60\",\n 'swimming_man': \"\\uD83C\\uDFCA\",\n 'swimming_woman': \"\\uD83C\\uDFCA‍\\u2640\\uFE0F\",\n 'symbols': \"\\uD83D\\uDD23\",\n 'synagogue': \"\\uD83D\\uDD4D\",\n 'syringe': \"\\uD83D\\uDC89\",\n 'taco': \"\\uD83C\\uDF2E\",\n 'tada': \"\\uD83C\\uDF89\",\n 'tanabata_tree': \"\\uD83C\\uDF8B\",\n 'taurus': \"\\u2649\\uFE0F\",\n 'taxi': \"\\uD83D\\uDE95\",\n 'tea': \"\\uD83C\\uDF75\",\n 'telephone_receiver': \"\\uD83D\\uDCDE\",\n 'telescope': \"\\uD83D\\uDD2D\",\n 'tennis': \"\\uD83C\\uDFBE\",\n 'tent': \"\\u26FA\\uFE0F\",\n 'thermometer': \"\\uD83C\\uDF21\",\n 'thinking': \"\\uD83E\\uDD14\",\n 'thought_balloon': \"\\uD83D\\uDCAD\",\n 'ticket': \"\\uD83C\\uDFAB\",\n 'tickets': \"\\uD83C\\uDF9F\",\n 'tiger': \"\\uD83D\\uDC2F\",\n 'tiger2': \"\\uD83D\\uDC05\",\n 'timer_clock': \"\\u23F2\",\n 'tipping_hand_man': \"\\uD83D\\uDC81‍\\u2642\\uFE0F\",\n 'tired_face': \"\\uD83D\\uDE2B\",\n 'tm': \"\\u2122\\uFE0F\",\n 'toilet': \"\\uD83D\\uDEBD\",\n 'tokyo_tower': \"\\uD83D\\uDDFC\",\n 'tomato': \"\\uD83C\\uDF45\",\n 'tongue': \"\\uD83D\\uDC45\",\n 'top': \"\\uD83D\\uDD1D\",\n 'tophat': \"\\uD83C\\uDFA9\",\n 'tornado': \"\\uD83C\\uDF2A\",\n 'trackball': \"\\uD83D\\uDDB2\",\n 'tractor': \"\\uD83D\\uDE9C\",\n 'traffic_light': \"\\uD83D\\uDEA5\",\n 'train': \"\\uD83D\\uDE8B\",\n 'train2': \"\\uD83D\\uDE86\",\n 'tram': \"\\uD83D\\uDE8A\",\n 'triangular_flag_on_post': \"\\uD83D\\uDEA9\",\n 'triangular_ruler': \"\\uD83D\\uDCD0\",\n 'trident': \"\\uD83D\\uDD31\",\n 'triumph': \"\\uD83D\\uDE24\",\n 'trolleybus': \"\\uD83D\\uDE8E\",\n 'trophy': \"\\uD83C\\uDFC6\",\n 'tropical_drink': \"\\uD83C\\uDF79\",\n 'tropical_fish': \"\\uD83D\\uDC20\",\n 'truck': \"\\uD83D\\uDE9A\",\n 'trumpet': \"\\uD83C\\uDFBA\",\n 'tulip': \"\\uD83C\\uDF37\",\n 'tumbler_glass': \"\\uD83E\\uDD43\",\n 'turkey': \"\\uD83E\\uDD83\",\n 'turtle': \"\\uD83D\\uDC22\",\n 'tv': \"\\uD83D\\uDCFA\",\n 'twisted_rightwards_arrows': \"\\uD83D\\uDD00\",\n 'two_hearts': \"\\uD83D\\uDC95\",\n 'two_men_holding_hands': \"\\uD83D\\uDC6C\",\n 'two_women_holding_hands': \"\\uD83D\\uDC6D\",\n 'u5272': \"\\uD83C\\uDE39\",\n 'u5408': \"\\uD83C\\uDE34\",\n 'u55b6': \"\\uD83C\\uDE3A\",\n 'u6307': \"\\uD83C\\uDE2F\\uFE0F\",\n 'u6708': \"\\uD83C\\uDE37\\uFE0F\",\n 'u6709': \"\\uD83C\\uDE36\",\n 'u6e80': \"\\uD83C\\uDE35\",\n 'u7121': \"\\uD83C\\uDE1A\\uFE0F\",\n 'u7533': \"\\uD83C\\uDE38\",\n 'u7981': \"\\uD83C\\uDE32\",\n 'u7a7a': \"\\uD83C\\uDE33\",\n 'umbrella': \"\\u2614\\uFE0F\",\n 'unamused': \"\\uD83D\\uDE12\",\n 'underage': \"\\uD83D\\uDD1E\",\n 'unicorn': \"\\uD83E\\uDD84\",\n 'unlock': \"\\uD83D\\uDD13\",\n 'up': \"\\uD83C\\uDD99\",\n 'upside_down_face': \"\\uD83D\\uDE43\",\n 'v': \"\\u270C\\uFE0F\",\n 'vertical_traffic_light': \"\\uD83D\\uDEA6\",\n 'vhs': \"\\uD83D\\uDCFC\",\n 'vibration_mode': \"\\uD83D\\uDCF3\",\n 'video_camera': \"\\uD83D\\uDCF9\",\n 'video_game': \"\\uD83C\\uDFAE\",\n 'violin': \"\\uD83C\\uDFBB\",\n 'virgo': \"\\u264D\\uFE0F\",\n 'volcano': \"\\uD83C\\uDF0B\",\n 'volleyball': \"\\uD83C\\uDFD0\",\n 'vs': \"\\uD83C\\uDD9A\",\n 'vulcan_salute': \"\\uD83D\\uDD96\",\n 'walking_man': \"\\uD83D\\uDEB6\",\n 'walking_woman': \"\\uD83D\\uDEB6‍\\u2640\\uFE0F\",\n 'waning_crescent_moon': \"\\uD83C\\uDF18\",\n 'waning_gibbous_moon': \"\\uD83C\\uDF16\",\n 'warning': \"\\u26A0\\uFE0F\",\n 'wastebasket': \"\\uD83D\\uDDD1\",\n 'watch': \"\\u231A\\uFE0F\",\n 'water_buffalo': \"\\uD83D\\uDC03\",\n 'watermelon': \"\\uD83C\\uDF49\",\n 'wave': \"\\uD83D\\uDC4B\",\n 'wavy_dash': \"\\u3030\\uFE0F\",\n 'waxing_crescent_moon': \"\\uD83C\\uDF12\",\n 'wc': \"\\uD83D\\uDEBE\",\n 'weary': \"\\uD83D\\uDE29\",\n 'wedding': \"\\uD83D\\uDC92\",\n 'weight_lifting_man': \"\\uD83C\\uDFCB\\uFE0F\",\n 'weight_lifting_woman': \"\\uD83C\\uDFCB\\uFE0F‍\\u2640\\uFE0F\",\n 'whale': \"\\uD83D\\uDC33\",\n 'whale2': \"\\uD83D\\uDC0B\",\n 'wheel_of_dharma': \"\\u2638\\uFE0F\",\n 'wheelchair': \"\\u267F\\uFE0F\",\n 'white_check_mark': \"\\u2705\",\n 'white_circle': \"\\u26AA\\uFE0F\",\n 'white_flag': \"\\uD83C\\uDFF3\\uFE0F\",\n 'white_flower': \"\\uD83D\\uDCAE\",\n 'white_large_square': \"\\u2B1C\\uFE0F\",\n 'white_medium_small_square': \"\\u25FD\\uFE0F\",\n 'white_medium_square': \"\\u25FB\\uFE0F\",\n 'white_small_square': \"\\u25AB\\uFE0F\",\n 'white_square_button': \"\\uD83D\\uDD33\",\n 'wilted_flower': \"\\uD83E\\uDD40\",\n 'wind_chime': \"\\uD83C\\uDF90\",\n 'wind_face': \"\\uD83C\\uDF2C\",\n 'wine_glass': \"\\uD83C\\uDF77\",\n 'wink': \"\\uD83D\\uDE09\",\n 'wolf': \"\\uD83D\\uDC3A\",\n 'woman': \"\\uD83D\\uDC69\",\n 'woman_artist': \"\\uD83D\\uDC69‍\\uD83C\\uDFA8\",\n 'woman_astronaut': \"\\uD83D\\uDC69‍\\uD83D\\uDE80\",\n 'woman_cartwheeling': \"\\uD83E\\uDD38‍\\u2640\\uFE0F\",\n 'woman_cook': \"\\uD83D\\uDC69‍\\uD83C\\uDF73\",\n 'woman_facepalming': \"\\uD83E\\uDD26‍\\u2640\\uFE0F\",\n 'woman_factory_worker': \"\\uD83D\\uDC69‍\\uD83C\\uDFED\",\n 'woman_farmer': \"\\uD83D\\uDC69‍\\uD83C\\uDF3E\",\n 'woman_firefighter': \"\\uD83D\\uDC69‍\\uD83D\\uDE92\",\n 'woman_health_worker': \"\\uD83D\\uDC69‍\\u2695\\uFE0F\",\n 'woman_judge': \"\\uD83D\\uDC69‍\\u2696\\uFE0F\",\n 'woman_juggling': \"\\uD83E\\uDD39‍\\u2640\\uFE0F\",\n 'woman_mechanic': \"\\uD83D\\uDC69‍\\uD83D\\uDD27\",\n 'woman_office_worker': \"\\uD83D\\uDC69‍\\uD83D\\uDCBC\",\n 'woman_pilot': \"\\uD83D\\uDC69‍\\u2708\\uFE0F\",\n 'woman_playing_handball': \"\\uD83E\\uDD3E‍\\u2640\\uFE0F\",\n 'woman_playing_water_polo': \"\\uD83E\\uDD3D‍\\u2640\\uFE0F\",\n 'woman_scientist': \"\\uD83D\\uDC69‍\\uD83D\\uDD2C\",\n 'woman_shrugging': \"\\uD83E\\uDD37‍\\u2640\\uFE0F\",\n 'woman_singer': \"\\uD83D\\uDC69‍\\uD83C\\uDFA4\",\n 'woman_student': \"\\uD83D\\uDC69‍\\uD83C\\uDF93\",\n 'woman_teacher': \"\\uD83D\\uDC69‍\\uD83C\\uDFEB\",\n 'woman_technologist': \"\\uD83D\\uDC69‍\\uD83D\\uDCBB\",\n 'woman_with_turban': \"\\uD83D\\uDC73‍\\u2640\\uFE0F\",\n 'womans_clothes': \"\\uD83D\\uDC5A\",\n 'womans_hat': \"\\uD83D\\uDC52\",\n 'women_wrestling': \"\\uD83E\\uDD3C‍\\u2640\\uFE0F\",\n 'womens': \"\\uD83D\\uDEBA\",\n 'world_map': \"\\uD83D\\uDDFA\",\n 'worried': \"\\uD83D\\uDE1F\",\n 'wrench': \"\\uD83D\\uDD27\",\n 'writing_hand': \"\\u270D\\uFE0F\",\n 'x': \"\\u274C\",\n 'yellow_heart': \"\\uD83D\\uDC9B\",\n 'yen': \"\\uD83D\\uDCB4\",\n 'yin_yang': \"\\u262F\\uFE0F\",\n 'yum': \"\\uD83D\\uDE0B\",\n 'zap': \"\\u26A1\\uFE0F\",\n 'zipper_mouth_face': \"\\uD83E\\uDD10\",\n 'zzz': \"\\uD83D\\uDCA4\",\n\n /* special emojis :P */\n 'octocat': '\":octocat:\"',\n 'showdown': 'S'\n };\n /**\n * Created by Estevao on 31-05-2015.\n */\n\n /**\n * Showdown Converter class\n * @class\n * @param {object} [converterOptions]\n * @returns {Converter}\n */\n\n showdown.Converter = function (converterOptions) {\n 'use strict';\n\n var\n /**\n * Options used by this converter\n * @private\n * @type {{}}\n */\n options = {},\n\n /**\n * Language extensions used by this converter\n * @private\n * @type {Array}\n */\n langExtensions = [],\n\n /**\n * Output modifiers extensions used by this converter\n * @private\n * @type {Array}\n */\n outputModifiers = [],\n\n /**\n * Event listeners\n * @private\n * @type {{}}\n */\n listeners = {},\n\n /**\n * The flavor set in this converter\n */\n setConvFlavor = setFlavor,\n\n /**\n * Metadata of the document\n * @type {{parsed: {}, raw: string, format: string}}\n */\n metadata = {\n parsed: {},\n raw: '',\n format: ''\n };\n\n _constructor();\n /**\n * Converter constructor\n * @private\n */\n\n\n function _constructor() {\n converterOptions = converterOptions || {};\n\n for (var gOpt in globalOptions) {\n if (globalOptions.hasOwnProperty(gOpt)) {\n options[gOpt] = globalOptions[gOpt];\n }\n } // Merge options\n\n\n if (typeof converterOptions === 'object') {\n for (var opt in converterOptions) {\n if (converterOptions.hasOwnProperty(opt)) {\n options[opt] = converterOptions[opt];\n }\n }\n } else {\n throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions + ' was passed instead.');\n }\n\n if (options.extensions) {\n showdown.helper.forEach(options.extensions, _parseExtension);\n }\n }\n /**\n * Parse extension\n * @param {*} ext\n * @param {string} [name='']\n * @private\n */\n\n\n function _parseExtension(ext, name) {\n name = name || null; // If it's a string, the extension was previously loaded\n\n if (showdown.helper.isString(ext)) {\n ext = showdown.helper.stdExtName(ext);\n name = ext; // LEGACY_SUPPORT CODE\n\n if (showdown.extensions[ext]) {\n console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' + 'Please inform the developer that the extension should be updated!');\n legacyExtensionLoading(showdown.extensions[ext], ext);\n return; // END LEGACY SUPPORT CODE\n } else if (!showdown.helper.isUndefined(extensions[ext])) {\n ext = extensions[ext];\n } else {\n throw Error('Extension \"' + ext + '\" could not be loaded. It was either not found or is not a valid extension.');\n }\n }\n\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n var validExt = validate(ext, name);\n\n if (!validExt.valid) {\n throw Error(validExt.error);\n }\n\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n case 'lang':\n langExtensions.push(ext[i]);\n break;\n\n case 'output':\n outputModifiers.push(ext[i]);\n break;\n }\n\n if (ext[i].hasOwnProperty('listeners')) {\n for (var ln in ext[i].listeners) {\n if (ext[i].listeners.hasOwnProperty(ln)) {\n listen(ln, ext[i].listeners[ln]);\n }\n }\n }\n }\n }\n /**\n * LEGACY_SUPPORT\n * @param {*} ext\n * @param {string} name\n */\n\n\n function legacyExtensionLoading(ext, name) {\n if (typeof ext === 'function') {\n ext = ext(new showdown.Converter());\n }\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n var valid = validate(ext, name);\n\n if (!valid.valid) {\n throw Error(valid.error);\n }\n\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n case 'lang':\n langExtensions.push(ext[i]);\n break;\n\n case 'output':\n outputModifiers.push(ext[i]);\n break;\n\n default:\n // should never reach here\n throw Error('Extension loader error: Type unrecognized!!!');\n }\n }\n }\n /**\n * Listen to an event\n * @param {string} name\n * @param {function} callback\n */\n\n\n function listen(name, callback) {\n if (!showdown.helper.isString(name)) {\n throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given');\n }\n\n if (typeof callback !== 'function') {\n throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given');\n }\n\n if (!listeners.hasOwnProperty(name)) {\n listeners[name] = [];\n }\n\n listeners[name].push(callback);\n }\n\n function rTrimInputText(text) {\n var rsp = text.match(/^\\s*/)[0].length,\n rgx = new RegExp('^\\\\s{0,' + rsp + '}', 'gm');\n return text.replace(rgx, '');\n }\n /**\n * Dispatch an event\n * @private\n * @param {string} evtName Event name\n * @param {string} text Text\n * @param {{}} options Converter Options\n * @param {{}} globals\n * @returns {string}\n */\n\n\n this._dispatch = function dispatch(evtName, text, options, globals) {\n if (listeners.hasOwnProperty(evtName)) {\n for (var ei = 0; ei < listeners[evtName].length; ++ei) {\n var nText = listeners[evtName][ei](evtName, text, this, options, globals);\n\n if (nText && typeof nText !== 'undefined') {\n text = nText;\n }\n }\n }\n\n return text;\n };\n /**\n * Listen to an event\n * @param {string} name\n * @param {function} callback\n * @returns {showdown.Converter}\n */\n\n\n this.listen = function (name, callback) {\n listen(name, callback);\n return this;\n };\n /**\n * Converts a markdown string into HTML\n * @param {string} text\n * @returns {*}\n */\n\n\n this.makeHtml = function (text) {\n //check if text is not falsy\n if (!text) {\n return text;\n }\n\n var globals = {\n gHtmlBlocks: [],\n gHtmlMdBlocks: [],\n gHtmlSpans: [],\n gUrls: {},\n gTitles: {},\n gDimensions: {},\n gListLevel: 0,\n hashLinkCounts: {},\n langExtensions: langExtensions,\n outputModifiers: outputModifiers,\n converter: this,\n ghCodeBlocks: [],\n metadata: {\n parsed: {},\n raw: '',\n format: ''\n }\n }; // This lets us use ¨ trema as an escape char to avoid md5 hashes\n // The choice of character is arbitrary; anything that isn't\n // magic in Markdown will work.\n\n text = text.replace(/¨/g, '¨T'); // Replace $ with ¨D\n // RegExp interprets $ as a special character\n // when it's in a replacement string\n\n text = text.replace(/\\$/g, '¨D'); // Standardize line endings\n\n text = text.replace(/\\r\\n/g, '\\n'); // DOS to Unix\n\n text = text.replace(/\\r/g, '\\n'); // Mac to Unix\n // Stardardize line spaces\n\n text = text.replace(/\\u00A0/g, ' ');\n\n if (options.smartIndentationFix) {\n text = rTrimInputText(text);\n } // Make sure text begins and ends with a couple of newlines:\n\n\n text = '\\n\\n' + text + '\\n\\n'; // detab\n\n text = showdown.subParser('detab')(text, options, globals);\n /**\n * Strip any lines consisting only of spaces and tabs.\n * This makes subsequent regexs easier to write, because we can\n * match consecutive blank lines with /\\n+/ instead of something\n * contorted like /[ \\t]*\\n+/\n */\n\n text = text.replace(/^[ \\t]+$/mg, ''); //run languageExtensions\n\n showdown.helper.forEach(langExtensions, function (ext) {\n text = showdown.subParser('runExtension')(ext, text, options, globals);\n }); // run the sub parsers\n\n text = showdown.subParser('metadata')(text, options, globals);\n text = showdown.subParser('hashPreCodeTags')(text, options, globals);\n text = showdown.subParser('githubCodeBlocks')(text, options, globals);\n text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n text = showdown.subParser('hashCodeTags')(text, options, globals);\n text = showdown.subParser('stripLinkDefinitions')(text, options, globals);\n text = showdown.subParser('blockGamut')(text, options, globals);\n text = showdown.subParser('unhashHTMLSpans')(text, options, globals);\n text = showdown.subParser('unescapeSpecialChars')(text, options, globals); // attacklab: Restore dollar signs\n\n text = text.replace(/¨D/g, '$$'); // attacklab: Restore tremas\n\n text = text.replace(/¨T/g, '¨'); // render a complete html document instead of a partial if the option is enabled\n\n text = showdown.subParser('completeHTMLDocument')(text, options, globals); // Run output modifiers\n\n showdown.helper.forEach(outputModifiers, function (ext) {\n text = showdown.subParser('runExtension')(ext, text, options, globals);\n }); // update metadata\n\n metadata = globals.metadata;\n return text;\n };\n /**\n * Converts an HTML string into a markdown string\n * @param src\n * @param [HTMLParser] A WHATWG DOM and HTML parser, such as JSDOM. If none is supplied, window.document will be used.\n * @returns {string}\n */\n\n\n this.makeMarkdown = this.makeMd = function (src, HTMLParser) {\n // replace \\r\\n with \\n\n src = src.replace(/\\r\\n/g, '\\n');\n src = src.replace(/\\r/g, '\\n'); // old macs\n // due to an edge case, we need to find this: > <\n // to prevent removing of non silent white spaces\n // ex: this is sparta\n\n src = src.replace(/>[ \\t]+¨NBSP;<');\n\n if (!HTMLParser) {\n if (window && window.document) {\n HTMLParser = window.document;\n } else {\n throw new Error('HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM');\n }\n }\n\n var doc = HTMLParser.createElement('div');\n doc.innerHTML = src;\n var globals = {\n preList: substitutePreCodeTags(doc)\n }; // remove all newlines and collapse spaces\n\n clean(doc); // some stuff, like accidental reference links must now be escaped\n // TODO\n // doc.innerHTML = doc.innerHTML.replace(/\\[[\\S\\t ]]/);\n\n var nodes = doc.childNodes,\n mdDoc = '';\n\n for (var i = 0; i < nodes.length; i++) {\n mdDoc += showdown.subParser('makeMarkdown.node')(nodes[i], globals);\n }\n\n function clean(node) {\n for (var n = 0; n < node.childNodes.length; ++n) {\n var child = node.childNodes[n];\n\n if (child.nodeType === 3) {\n if (!/\\S/.test(child.nodeValue)) {\n node.removeChild(child);\n --n;\n } else {\n child.nodeValue = child.nodeValue.split('\\n').join(' ');\n child.nodeValue = child.nodeValue.replace(/(\\s)+/g, '$1');\n }\n } else if (child.nodeType === 1) {\n clean(child);\n }\n }\n } // find all pre tags and replace contents with placeholder\n // we need this so that we can remove all indentation from html\n // to ease up parsing\n\n\n function substitutePreCodeTags(doc) {\n var pres = doc.querySelectorAll('pre'),\n presPH = [];\n\n for (var i = 0; i < pres.length; ++i) {\n if (pres[i].childElementCount === 1 && pres[i].firstChild.tagName.toLowerCase() === 'code') {\n var content = pres[i].firstChild.innerHTML.trim(),\n language = pres[i].firstChild.getAttribute('data-language') || ''; // if data-language attribute is not defined, then we look for class language-*\n\n if (language === '') {\n var classes = pres[i].firstChild.className.split(' ');\n\n for (var c = 0; c < classes.length; ++c) {\n var matches = classes[c].match(/^language-(.+)$/);\n\n if (matches !== null) {\n language = matches[1];\n break;\n }\n }\n } // unescape html entities in content\n\n\n content = showdown.helper.unescapeHTMLEntities(content);\n presPH.push(content);\n pres[i].outerHTML = '';\n } else {\n presPH.push(pres[i].innerHTML);\n pres[i].innerHTML = '';\n pres[i].setAttribute('prenum', i.toString());\n }\n }\n\n return presPH;\n }\n\n return mdDoc;\n };\n /**\n * Set an option of this Converter instance\n * @param {string} key\n * @param {*} value\n */\n\n\n this.setOption = function (key, value) {\n options[key] = value;\n };\n /**\n * Get the option of this Converter instance\n * @param {string} key\n * @returns {*}\n */\n\n\n this.getOption = function (key) {\n return options[key];\n };\n /**\n * Get the options of this Converter instance\n * @returns {{}}\n */\n\n\n this.getOptions = function () {\n return options;\n };\n /**\n * Add extension to THIS converter\n * @param {{}} extension\n * @param {string} [name=null]\n */\n\n\n this.addExtension = function (extension, name) {\n name = name || null;\n\n _parseExtension(extension, name);\n };\n /**\n * Use a global registered extension with THIS converter\n * @param {string} extensionName Name of the previously registered extension\n */\n\n\n this.useExtension = function (extensionName) {\n _parseExtension(extensionName);\n };\n /**\n * Set the flavor THIS converter should use\n * @param {string} name\n */\n\n\n this.setFlavor = function (name) {\n if (!flavor.hasOwnProperty(name)) {\n throw Error(name + ' flavor was not found');\n }\n\n var preset = flavor[name];\n setConvFlavor = name;\n\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n options[option] = preset[option];\n }\n }\n };\n /**\n * Get the currently set flavor of this converter\n * @returns {string}\n */\n\n\n this.getFlavor = function () {\n return setConvFlavor;\n };\n /**\n * Remove an extension from THIS converter.\n * Note: This is a costly operation. It's better to initialize a new converter\n * and specify the extensions you wish to use\n * @param {Array} extension\n */\n\n\n this.removeExtension = function (extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n\n for (var a = 0; a < extension.length; ++a) {\n var ext = extension[a];\n\n for (var i = 0; i < langExtensions.length; ++i) {\n if (langExtensions[i] === ext) {\n langExtensions[i].splice(i, 1);\n }\n }\n\n for (var ii = 0; ii < outputModifiers.length; ++i) {\n if (outputModifiers[ii] === ext) {\n outputModifiers[ii].splice(i, 1);\n }\n }\n }\n };\n /**\n * Get all extension of THIS converter\n * @returns {{language: Array, output: Array}}\n */\n\n\n this.getAllExtensions = function () {\n return {\n language: langExtensions,\n output: outputModifiers\n };\n };\n /**\n * Get the metadata of the previously parsed document\n * @param raw\n * @returns {string|{}}\n */\n\n\n this.getMetadata = function (raw) {\n if (raw) {\n return metadata.raw;\n } else {\n return metadata.parsed;\n }\n };\n /**\n * Get the metadata format of the previously parsed document\n * @returns {string}\n */\n\n\n this.getMetadataFormat = function () {\n return metadata.format;\n };\n /**\n * Private: set a single key, value metadata pair\n * @param {string} key\n * @param {string} value\n */\n\n\n this._setMetadataPair = function (key, value) {\n metadata.parsed[key] = value;\n };\n /**\n * Private: set metadata format\n * @param {string} format\n */\n\n\n this._setMetadataFormat = function (format) {\n metadata.format = format;\n };\n /**\n * Private: set metadata raw text\n * @param {string} raw\n */\n\n\n this._setMetadataRaw = function (raw) {\n metadata.raw = raw;\n };\n };\n /**\n * Turn Markdown link shortcuts into XHTML tags.\n */\n\n\n showdown.subParser('anchors', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('anchors.before', text, options, globals);\n\n var writeAnchorTag = function writeAnchorTag(wholeMatch, linkText, linkId, url, m5, m6, title) {\n if (showdown.helper.isUndefined(title)) {\n title = '';\n }\n\n linkId = linkId.toLowerCase(); // Special case for explicit empty url\n\n if (wholeMatch.search(/\\(? ?(['\"].*['\"])?\\)$/m) > -1) {\n url = '';\n } else if (!url) {\n if (!linkId) {\n // lower-case and turn embedded newlines into spaces\n linkId = linkText.toLowerCase().replace(/ ?\\n/g, ' ');\n }\n\n url = '#' + linkId;\n\n if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {\n url = globals.gUrls[linkId];\n\n if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {\n title = globals.gTitles[linkId];\n }\n } else {\n return wholeMatch;\n }\n } //url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance\n\n\n url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var result = '';\n return result;\n }; // First, handle reference-style links: [link text] [id]\n\n\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)] ?(?:\\n *)?\\[(.*?)]()()()()/g, writeAnchorTag); // Next, inline-style links: [link text](url \"optional title\")\n // cases with crazy urls like ./image/cat1).png\n\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<([^>]*)>(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g, writeAnchorTag); // normal cases\n\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]??(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g, writeAnchorTag); // handle reference-style shortcuts: [link text]\n // These must come last in case you've also got [link test][1]\n // or [link test](/foo)\n\n text = text.replace(/\\[([^\\[\\]]+)]()()()()()/g, writeAnchorTag); // Lastly handle GithubMentions if option is enabled\n\n if (options.ghMentions) {\n text = text.replace(/(^|\\s)(\\\\)?(@([a-z\\d]+(?:[a-z\\d.-]+?[a-z\\d]+)*))/gmi, function (wm, st, escape, mentions, username) {\n if (escape === '\\\\') {\n return st + mentions;\n } //check if options.ghMentionsLink is a string\n\n\n if (!showdown.helper.isString(options.ghMentionsLink)) {\n throw new Error('ghMentionsLink option must be a string');\n }\n\n var lnk = options.ghMentionsLink.replace(/\\{u}/g, username),\n target = '';\n\n if (options.openLinksInNewWindow) {\n target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n }\n\n return st + '' + mentions + '';\n });\n }\n\n text = globals.converter._dispatch('anchors.after', text, options, globals);\n return text;\n }); // url allowed chars [a-z\\d_.~:/?#[]@!$&'()*+,;=-]\n\n var simpleURLRegex = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+?\\.[^'\">\\s]+?)()(\\1)?(?=\\s|$)(?![\"<>])/gi,\n simpleURLRegex2 = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+\\.[^'\">\\s]+?)([.!?,()\\[\\]])?(\\1)?(?=\\s|$)(?![\"<>])/gi,\n delimUrlRegex = /()<(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+)()>()/gi,\n simpleMailRegex = /(^|\\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)(?=$|\\s)/gmi,\n delimMailRegex = /<()(?:mailto:)?([-.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi,\n replaceLink = function replaceLink(options) {\n 'use strict';\n\n return function (wm, leadingMagicChars, link, m2, m3, trailingPunctuation, trailingMagicChars) {\n link = link.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var lnkTxt = link,\n append = '',\n target = '',\n lmc = leadingMagicChars || '',\n tmc = trailingMagicChars || '';\n\n if (/^www\\./i.test(link)) {\n link = link.replace(/^www\\./i, 'http://www.');\n }\n\n if (options.excludeTrailingPunctuationFromURLs && trailingPunctuation) {\n append = trailingPunctuation;\n }\n\n if (options.openLinksInNewWindow) {\n target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n }\n\n return lmc + '' + lnkTxt + '' + append + tmc;\n };\n },\n replaceMail = function replaceMail(options, globals) {\n 'use strict';\n\n return function (wholeMatch, b, mail) {\n var href = 'mailto:';\n b = b || '';\n mail = showdown.subParser('unescapeSpecialChars')(mail, options, globals);\n\n if (options.encodeEmails) {\n href = showdown.helper.encodeEmailAddress(href + mail);\n mail = showdown.helper.encodeEmailAddress(mail);\n } else {\n href = href + mail;\n }\n\n return b + '' + mail + '';\n };\n };\n\n showdown.subParser('autoLinks', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('autoLinks.before', text, options, globals);\n text = text.replace(delimUrlRegex, replaceLink(options));\n text = text.replace(delimMailRegex, replaceMail(options, globals));\n text = globals.converter._dispatch('autoLinks.after', text, options, globals);\n return text;\n });\n showdown.subParser('simplifiedAutoLinks', function (text, options, globals) {\n 'use strict';\n\n if (!options.simplifiedAutoLink) {\n return text;\n }\n\n text = globals.converter._dispatch('simplifiedAutoLinks.before', text, options, globals);\n\n if (options.excludeTrailingPunctuationFromURLs) {\n text = text.replace(simpleURLRegex2, replaceLink(options));\n } else {\n text = text.replace(simpleURLRegex, replaceLink(options));\n }\n\n text = text.replace(simpleMailRegex, replaceMail(options, globals));\n text = globals.converter._dispatch('simplifiedAutoLinks.after', text, options, globals);\n return text;\n });\n /**\n * These are all the transformations that form block-level\n * tags like paragraphs, headers, and list items.\n */\n\n showdown.subParser('blockGamut', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('blockGamut.before', text, options, globals); // we parse blockquotes first so that we can have headings and hrs\n // inside blockquotes\n\n text = showdown.subParser('blockQuotes')(text, options, globals);\n text = showdown.subParser('headers')(text, options, globals); // Do Horizontal Rules:\n\n text = showdown.subParser('horizontalRule')(text, options, globals);\n text = showdown.subParser('lists')(text, options, globals);\n text = showdown.subParser('codeBlocks')(text, options, globals);\n text = showdown.subParser('tables')(text, options, globals); // We already ran _HashHTMLBlocks() before, in Markdown(), but that\n // was to escape raw HTML in the original Markdown source. This time,\n // we're escaping the markup we've just created, so that we don't wrap\n //

tags around block-level tags.\n\n text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n text = showdown.subParser('paragraphs')(text, options, globals);\n text = globals.converter._dispatch('blockGamut.after', text, options, globals);\n return text;\n });\n showdown.subParser('blockQuotes', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('blockQuotes.before', text, options, globals); // add a couple extra lines after the text and endtext mark\n\n text = text + '\\n\\n';\n var rgx = /(^ {0,3}>[ \\t]?.+\\n(.+\\n)*\\n*)+/gm;\n\n if (options.splitAdjacentBlockquotes) {\n rgx = /^ {0,3}>[\\s\\S]*?(?:\\n\\n)/gm;\n }\n\n text = text.replace(rgx, function (bq) {\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n bq = bq.replace(/^[ \\t]*>[ \\t]?/gm, ''); // trim one level of quoting\n // attacklab: clean up hack\n\n bq = bq.replace(/¨0/g, '');\n bq = bq.replace(/^[ \\t]+$/gm, ''); // trim whitespace-only lines\n\n bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);\n bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse\n\n bq = bq.replace(/(^|\\n)/g, '$1 '); // These leading spaces screw with

 content, so we need to fix that:\n\n      bq = bq.replace(/(\\s*
[^\\r]+?<\\/pre>)/gm, function (wholeMatch, m1) {\n        var pre = m1; // attacklab: hack around Konqueror 3.5.4 bug:\n\n        pre = pre.replace(/^  /mg, '¨0');\n        pre = pre.replace(/¨0/g, '');\n        return pre;\n      });\n      return showdown.subParser('hashBlock')('
\\n' + bq + '\\n
', options, globals);\n });\n text = globals.converter._dispatch('blockQuotes.after', text, options, globals);\n return text;\n });\n /**\n * Process Markdown `
` blocks.\n   */\n\n  showdown.subParser('codeBlocks', function (text, options, globals) {\n    'use strict';\n\n    text = globals.converter._dispatch('codeBlocks.before', text, options, globals); // sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n\n    text += '¨0';\n    var pattern = /(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=¨0))/g;\n    text = text.replace(pattern, function (wholeMatch, m1, m2) {\n      var codeblock = m1,\n          nextChar = m2,\n          end = '\\n';\n      codeblock = showdown.subParser('outdent')(codeblock, options, globals);\n      codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n      codeblock = showdown.subParser('detab')(codeblock, options, globals);\n      codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n\n      codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing newlines\n\n      if (options.omitExtraWLInCodeBlocks) {\n        end = '';\n      }\n\n      codeblock = '
' + codeblock + end + '
';\n return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;\n }); // strip sentinel\n\n text = text.replace(/¨0/, '');\n text = globals.converter._dispatch('codeBlocks.after', text, options, globals);\n return text;\n });\n /**\n *\n * * Backtick quotes are used for spans.\n *\n * * You can use multiple backticks as the delimiters if you want to\n * include literal backticks in the code span. So, this input:\n *\n * Just type ``foo `bar` baz`` at the prompt.\n *\n * Will translate to:\n *\n *

Just type foo `bar` baz at the prompt.

\n *\n * There's no arbitrary limit to the number of backticks you\n * can use as delimters. If you need three consecutive backticks\n * in your code, use four for delimiters, etc.\n *\n * * You can use spaces to get literal backticks at the edges:\n *\n * ... type `` `bar` `` ...\n *\n * Turns to:\n *\n * ... type `bar` ...\n */\n\n showdown.subParser('codeSpans', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('codeSpans.before', text, options, globals);\n\n if (typeof text === 'undefined') {\n text = '';\n }\n\n text = text.replace(/(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm, function (wholeMatch, m1, m2, m3) {\n var c = m3;\n c = c.replace(/^([ \\t]*)/g, ''); // leading whitespace\n\n c = c.replace(/[ \\t]*$/g, ''); // trailing whitespace\n\n c = showdown.subParser('encodeCode')(c, options, globals);\n c = m1 + '' + c + '';\n c = showdown.subParser('hashHTMLSpans')(c, options, globals);\n return c;\n });\n text = globals.converter._dispatch('codeSpans.after', text, options, globals);\n return text;\n });\n /**\n * Create a full HTML document from the processed markdown\n */\n\n showdown.subParser('completeHTMLDocument', function (text, options, globals) {\n 'use strict';\n\n if (!options.completeHTMLDocument) {\n return text;\n }\n\n text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);\n var doctype = 'html',\n doctypeParsed = '\\n',\n title = '',\n charset = '\\n',\n lang = '',\n metadata = '';\n\n if (typeof globals.metadata.parsed.doctype !== 'undefined') {\n doctypeParsed = '\\n';\n doctype = globals.metadata.parsed.doctype.toString().toLowerCase();\n\n if (doctype === 'html' || doctype === 'html5') {\n charset = '';\n }\n }\n\n for (var meta in globals.metadata.parsed) {\n if (globals.metadata.parsed.hasOwnProperty(meta)) {\n switch (meta.toLowerCase()) {\n case 'doctype':\n break;\n\n case 'title':\n title = '' + globals.metadata.parsed.title + '\\n';\n break;\n\n case 'charset':\n if (doctype === 'html' || doctype === 'html5') {\n charset = '\\n';\n } else {\n charset = '\\n';\n }\n\n break;\n\n case 'language':\n case 'lang':\n lang = ' lang=\"' + globals.metadata.parsed[meta] + '\"';\n metadata += '\\n';\n break;\n\n default:\n metadata += '\\n';\n }\n }\n }\n\n text = doctypeParsed + '\\n\\n' + title + charset + metadata + '\\n\\n' + text.trim() + '\\n\\n';\n text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals);\n return text;\n });\n /**\n * Convert all tabs to spaces\n */\n\n showdown.subParser('detab', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('detab.before', text, options, globals); // expand first n-1 tabs\n\n text = text.replace(/\\t(?=\\t)/g, ' '); // g_tab_width\n // replace the nth with two sentinels\n\n text = text.replace(/\\t/g, '¨A¨B'); // use the sentinel to anchor our regex so it doesn't explode\n\n text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) {\n var leadingText = m1,\n numSpaces = 4 - leadingText.length % 4; // g_tab_width\n // there *must* be a better way to do this:\n\n for (var i = 0; i < numSpaces; i++) {\n leadingText += ' ';\n }\n\n return leadingText;\n }); // clean up sentinels\n\n text = text.replace(/¨A/g, ' '); // g_tab_width\n\n text = text.replace(/¨B/g, '');\n text = globals.converter._dispatch('detab.after', text, options, globals);\n return text;\n });\n showdown.subParser('ellipsis', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('ellipsis.before', text, options, globals);\n text = text.replace(/\\.\\.\\./g, '…');\n text = globals.converter._dispatch('ellipsis.after', text, options, globals);\n return text;\n });\n /**\n * Turn emoji codes into emojis\n *\n * List of supported emojis: https://github.com/showdownjs/showdown/wiki/Emojis\n */\n\n showdown.subParser('emoji', function (text, options, globals) {\n 'use strict';\n\n if (!options.emoji) {\n return text;\n }\n\n text = globals.converter._dispatch('emoji.before', text, options, globals);\n var emojiRgx = /:([\\S]+?):/g;\n text = text.replace(emojiRgx, function (wm, emojiCode) {\n if (showdown.helper.emojis.hasOwnProperty(emojiCode)) {\n return showdown.helper.emojis[emojiCode];\n }\n\n return wm;\n });\n text = globals.converter._dispatch('emoji.after', text, options, globals);\n return text;\n });\n /**\n * Smart processing for ampersands and angle brackets that need to be encoded.\n */\n\n showdown.subParser('encodeAmpsAndAngles', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('encodeAmpsAndAngles.before', text, options, globals); // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:\n // http://bumppo.net/projects/amputator/\n\n text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g, '&'); // Encode naked <'s\n\n text = text.replace(/<(?![a-z\\/?$!])/gi, '<'); // Encode <\n\n text = text.replace(/\n\n text = text.replace(/>/g, '>');\n text = globals.converter._dispatch('encodeAmpsAndAngles.after', text, options, globals);\n return text;\n });\n /**\n * Returns the string, with after processing the following backslash escape sequences.\n *\n * attacklab: The polite way to do this is with the new escapeCharacters() function:\n *\n * text = escapeCharacters(text,\"\\\\\",true);\n * text = escapeCharacters(text,\"`*_{}[]()>#+-.!\",true);\n *\n * ...but we're sidestepping its use of the (slow) RegExp constructor\n * as an optimization for Firefox. This function gets called a LOT.\n */\n\n showdown.subParser('encodeBackslashEscapes', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('encodeBackslashEscapes.before', text, options, globals);\n text = text.replace(/\\\\(\\\\)/g, showdown.helper.escapeCharactersCallback);\n text = text.replace(/\\\\([`*_{}\\[\\]()>#+.!~=|-])/g, showdown.helper.escapeCharactersCallback);\n text = globals.converter._dispatch('encodeBackslashEscapes.after', text, options, globals);\n return text;\n });\n /**\n * Encode/escape certain characters inside Markdown code runs.\n * The point is that in code, these characters are literals,\n * and lose their special Markdown meanings.\n */\n\n showdown.subParser('encodeCode', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('encodeCode.before', text, options, globals); // Encode all ampersands; HTML entities are not\n // entities within a Markdown code span.\n\n text = text.replace(/&/g, '&') // Do the angle bracket song and dance:\n .replace(//g, '>') // Now, escape characters that are magic in Markdown:\n .replace(/([*_{}\\[\\]\\\\=~-])/g, showdown.helper.escapeCharactersCallback);\n text = globals.converter._dispatch('encodeCode.after', text, options, globals);\n return text;\n });\n /**\n * Within tags -- meaning between < and > -- encode [\\ ` * _ ~ =] so they\n * don't conflict with their use in Markdown for code, italics and strong.\n */\n\n showdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.before', text, options, globals); // Build a regex to find HTML tags.\n\n var tags = /<\\/?[a-z\\d_:-]+(?:[\\s]+[\\s\\S]+?)?>/gi,\n comments = /-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;\n text = text.replace(tags, function (wholeMatch) {\n return wholeMatch.replace(/(.)<\\/?code>(?=.)/g, '$1`').replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n });\n text = text.replace(comments, function (wholeMatch) {\n return wholeMatch.replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n });\n text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.after', text, options, globals);\n return text;\n });\n /**\n * Handle github codeblocks prior to running HashHTML so that\n * HTML contained within the codeblock gets escaped properly\n * Example:\n * ```ruby\n * def hello_world(x)\n * puts \"Hello, #{x}\"\n * end\n * ```\n */\n\n showdown.subParser('githubCodeBlocks', function (text, options, globals) {\n 'use strict'; // early exit if option is not enabled\n\n if (!options.ghCodeBlocks) {\n return text;\n }\n\n text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n text += '¨0';\n text = text.replace(/(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g, function (wholeMatch, delim, language, codeblock) {\n var end = options.omitExtraWLInCodeBlocks ? '' : '\\n'; // First parse the github code block\n\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n codeblock = '
' + codeblock + end + '
';\n codeblock = showdown.subParser('hashBlock')(codeblock, options, globals); // Since GHCodeblocks can be false positives, we need to\n // store the primitive text and the parsed text in a global var,\n // and then return a token\n\n return '\\n\\n¨G' + (globals.ghCodeBlocks.push({\n text: wholeMatch,\n codeblock: codeblock\n }) - 1) + 'G\\n\\n';\n }); // attacklab: strip sentinel\n\n text = text.replace(/¨0/, '');\n return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n });\n showdown.subParser('hashBlock', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('hashBlock.before', text, options, globals);\n text = text.replace(/(^\\n+|\\n+$)/g, '');\n text = '\\n\\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\\n\\n';\n text = globals.converter._dispatch('hashBlock.after', text, options, globals);\n return text;\n });\n /**\n * Hash and escape elements that should not be parsed as markdown\n */\n\n showdown.subParser('hashCodeTags', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);\n\n var repFunc = function repFunc(wholeMatch, match, left, right) {\n var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';\n }; // Hash naked \n\n\n text = showdown.helper.replaceRecursiveRegExp(text, repFunc, ']*>', '', 'gim');\n text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);\n return text;\n });\n showdown.subParser('hashElement', function (text, options, globals) {\n 'use strict';\n\n return function (wholeMatch, m1) {\n var blockText = m1; // Undo double lines\n\n blockText = blockText.replace(/\\n\\n/g, '\\n');\n blockText = blockText.replace(/^\\n/, ''); // strip trailing blank lines\n\n blockText = blockText.replace(/\\n+$/g, ''); // Replace the element text with a marker (\"¨KxK\" where x is its key)\n\n blockText = '\\n\\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\\n\\n';\n return blockText;\n };\n });\n showdown.subParser('hashHTMLBlocks', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);\n\n var blockTags = ['pre', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'table', 'dl', 'ol', 'ul', 'script', 'noscript', 'form', 'fieldset', 'iframe', 'math', 'style', 'section', 'header', 'footer', 'nav', 'article', 'aside', 'address', 'audio', 'canvas', 'figure', 'hgroup', 'output', 'video', 'p'],\n repFunc = function repFunc(wholeMatch, match, left, right) {\n var txt = wholeMatch; // check if this html element is marked as markdown\n // if so, it's contents should be parsed as markdown\n\n if (left.search(/\\bmarkdown\\b/) !== -1) {\n txt = left + globals.converter.makeHtml(match) + right;\n }\n\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n };\n\n if (options.backslashEscapesHTMLTags) {\n // encode backslash escaped HTML tags\n text = text.replace(/\\\\<(\\/?[^>]+?)>/g, function (wm, inside) {\n return '<' + inside + '>';\n });\n } // hash HTML Blocks\n\n\n for (var i = 0; i < blockTags.length; ++i) {\n var opTagPos,\n rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\\\b[^>]*>)', 'im'),\n patLeft = '<' + blockTags[i] + '\\\\b[^>]*>',\n patRight = ''; // 1. Look for the first position of the first opening HTML tag in the text\n\n while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {\n // if the HTML tag is \\ escaped, we need to escape it and break\n //2. Split the text in that position\n var subTexts = showdown.helper.splitAtIndex(text, opTagPos),\n //3. Match recursively\n newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im'); // prevent an infinite loop\n\n if (newSubText1 === subTexts[1]) {\n break;\n }\n\n text = subTexts[0].concat(newSubText1);\n }\n } // HR SPECIAL CASE\n\n\n text = text.replace(/(\\n {0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g, showdown.subParser('hashElement')(text, options, globals)); // Special case for standalone HTML comments\n\n text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n }, '^ {0,3}', 'gm'); // PHP and ASP-style processor instructions ( and <%...%>)\n\n text = text.replace(/(?:\\n\\n)( {0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g, showdown.subParser('hashElement')(text, options, globals));\n text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);\n return text;\n });\n /**\n * Hash span elements that should not be parsed as markdown\n */\n\n showdown.subParser('hashHTMLSpans', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);\n\n function hashHTMLSpan(html) {\n return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';\n } // Hash Self Closing tags\n\n\n text = text.replace(/<[^>]+?\\/>/gi, function (wm) {\n return hashHTMLSpan(wm);\n }); // Hash tags without properties\n\n text = text.replace(/<([^>]+?)>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n }); // Hash tags with properties\n\n text = text.replace(/<([^>]+?)\\s[^>]+?>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n }); // Hash self closing tags without />\n\n text = text.replace(/<[^>]+?>/gi, function (wm) {\n return hashHTMLSpan(wm);\n });\n /*showdown.helper.matchRecursiveRegExp(text, ']*>', '', 'gi');*/\n\n text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);\n return text;\n });\n /**\n * Unhash HTML spans\n */\n\n showdown.subParser('unhashHTMLSpans', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);\n\n for (var i = 0; i < globals.gHtmlSpans.length; ++i) {\n var repText = globals.gHtmlSpans[i],\n // limiter to prevent infinite loop (assume 10 as limit for recurse)\n limit = 0;\n\n while (/¨C(\\d+)C/.test(repText)) {\n var num = RegExp.$1;\n repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);\n\n if (limit === 10) {\n console.error('maximum nesting of 10 spans reached!!!');\n break;\n }\n\n ++limit;\n }\n\n text = text.replace('¨C' + i + 'C', repText);\n }\n\n text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);\n return text;\n });\n /**\n * Hash and escape
 elements that should not be parsed as markdown\n   */\n\n  showdown.subParser('hashPreCodeTags', function (text, options, globals) {\n    'use strict';\n\n    text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);\n\n    var repFunc = function repFunc(wholeMatch, match, left, right) {\n      // encode html entities\n      var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n      return '\\n\\n¨G' + (globals.ghCodeBlocks.push({\n        text: wholeMatch,\n        codeblock: codeblock\n      }) - 1) + 'G\\n\\n';\n    }; // Hash 
\n\n\n    text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}]*>\\\\s*]*>', '^ {0,3}\\\\s*
', 'gim');\n text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);\n return text;\n });\n showdown.subParser('headers', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('headers.before', text, options, globals);\n var headerLevelStart = isNaN(parseInt(options.headerLevelStart)) ? 1 : parseInt(options.headerLevelStart),\n // Set text-style headers:\n //\tHeader 1\n //\t========\n //\n //\tHeader 2\n //\t--------\n //\n setextRegexH1 = options.smoothLivePreview ? /^(.+)[ \\t]*\\n={2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,\n setextRegexH2 = options.smoothLivePreview ? /^(.+)[ \\t]*\\n-{2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm;\n text = text.replace(setextRegexH1, function (wholeMatch, m1) {\n var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n hID = options.noHeaderId ? '' : ' id=\"' + headerId(m1) + '\"',\n hLevel = headerLevelStart,\n hashBlock = '' + spanGamut + '';\n return showdown.subParser('hashBlock')(hashBlock, options, globals);\n });\n text = text.replace(setextRegexH2, function (matchFound, m1) {\n var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n hID = options.noHeaderId ? '' : ' id=\"' + headerId(m1) + '\"',\n hLevel = headerLevelStart + 1,\n hashBlock = '' + spanGamut + '';\n return showdown.subParser('hashBlock')(hashBlock, options, globals);\n }); // atx-style headers:\n // # Header 1\n // ## Header 2\n // ## Header 2 with closing hashes ##\n // ...\n // ###### Header 6\n //\n\n var atxStyle = options.requireSpaceBeforeHeadingText ? /^(#{1,6})[ \\t]+(.+?)[ \\t]*#*\\n+/gm : /^(#{1,6})[ \\t]*(.+?)[ \\t]*#*\\n+/gm;\n text = text.replace(atxStyle, function (wholeMatch, m1, m2) {\n var hText = m2;\n\n if (options.customizedHeaderId) {\n hText = m2.replace(/\\s?\\{([^{]+?)}\\s*$/, '');\n }\n\n var span = showdown.subParser('spanGamut')(hText, options, globals),\n hID = options.noHeaderId ? '' : ' id=\"' + headerId(m2) + '\"',\n hLevel = headerLevelStart - 1 + m1.length,\n header = '' + span + '';\n return showdown.subParser('hashBlock')(header, options, globals);\n });\n\n function headerId(m) {\n var title, prefix; // It is separate from other options to allow combining prefix and customized\n\n if (options.customizedHeaderId) {\n var match = m.match(/\\{([^{]+?)}\\s*$/);\n\n if (match && match[1]) {\n m = match[1];\n }\n }\n\n title = m; // Prefix id to prevent causing inadvertent pre-existing style matches.\n\n if (showdown.helper.isString(options.prefixHeaderId)) {\n prefix = options.prefixHeaderId;\n } else if (options.prefixHeaderId === true) {\n prefix = 'section-';\n } else {\n prefix = '';\n }\n\n if (!options.rawPrefixHeaderId) {\n title = prefix + title;\n }\n\n if (options.ghCompatibleHeaderId) {\n title = title.replace(/ /g, '-') // replace previously escaped chars (&, ¨ and $)\n .replace(/&/g, '').replace(/¨T/g, '').replace(/¨D/g, '') // replace rest of the chars (&~$ are repeated as they might have been escaped)\n // borrowed from github's redcarpet (some they should produce similar results)\n .replace(/[&+$,\\/:;=?@\"#{}|^¨~\\[\\]`\\\\*)(%.!'<>]/g, '').toLowerCase();\n } else if (options.rawHeaderId) {\n title = title.replace(/ /g, '-') // replace previously escaped chars (&, ¨ and $)\n .replace(/&/g, '&').replace(/¨T/g, '¨').replace(/¨D/g, '$') // replace \" and '\n .replace(/[\"']/g, '-').toLowerCase();\n } else {\n title = title.replace(/[^\\w]/g, '').toLowerCase();\n }\n\n if (options.rawPrefixHeaderId) {\n title = prefix + title;\n }\n\n if (globals.hashLinkCounts[title]) {\n title = title + '-' + globals.hashLinkCounts[title]++;\n } else {\n globals.hashLinkCounts[title] = 1;\n }\n\n return title;\n }\n\n text = globals.converter._dispatch('headers.after', text, options, globals);\n return text;\n });\n /**\n * Turn Markdown link shortcuts into XHTML tags.\n */\n\n showdown.subParser('horizontalRule', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('horizontalRule.before', text, options, globals);\n var key = showdown.subParser('hashBlock')('
', options, globals);\n text = text.replace(/^ {0,2}( ?-){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?\\*){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?_){3,}[ \\t]*$/gm, key);\n text = globals.converter._dispatch('horizontalRule.after', text, options, globals);\n return text;\n });\n /**\n * Turn Markdown image shortcuts into tags.\n */\n\n showdown.subParser('images', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('images.before', text, options, globals);\n var inlineRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]??(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n crazyRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<([^>]*)>(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:(?:([\"'])([^\"]*?)\\6))?[ \\t]?\\)/g,\n base64RegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]??(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n referenceRegExp = /!\\[([^\\]]*?)] ?(?:\\n *)?\\[([\\s\\S]*?)]()()()()()/g,\n refShortcutRegExp = /!\\[([^\\[\\]]+)]()()()()()/g;\n\n function writeImageTagBase64(wholeMatch, altText, linkId, url, width, height, m5, title) {\n url = url.replace(/\\s/g, '');\n return writeImageTag(wholeMatch, altText, linkId, url, width, height, m5, title);\n }\n\n function writeImageTag(wholeMatch, altText, linkId, url, width, height, m5, title) {\n var gUrls = globals.gUrls,\n gTitles = globals.gTitles,\n gDims = globals.gDimensions;\n linkId = linkId.toLowerCase();\n\n if (!title) {\n title = '';\n } // Special case for explicit empty url\n\n\n if (wholeMatch.search(/\\(? ?(['\"].*['\"])?\\)$/m) > -1) {\n url = '';\n } else if (url === '' || url === null) {\n if (linkId === '' || linkId === null) {\n // lower-case and turn embedded newlines into spaces\n linkId = altText.toLowerCase().replace(/ ?\\n/g, ' ');\n }\n\n url = '#' + linkId;\n\n if (!showdown.helper.isUndefined(gUrls[linkId])) {\n url = gUrls[linkId];\n\n if (!showdown.helper.isUndefined(gTitles[linkId])) {\n title = gTitles[linkId];\n }\n\n if (!showdown.helper.isUndefined(gDims[linkId])) {\n width = gDims[linkId].width;\n height = gDims[linkId].height;\n }\n } else {\n return wholeMatch;\n }\n }\n\n altText = altText.replace(/\"/g, '"') //altText = showdown.helper.escapeCharacters(altText, '*_', false);\n .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback); //url = showdown.helper.escapeCharacters(url, '*_', false);\n\n url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var result = '\"'x \"optional title\")\n // base64 encoded images\n\n text = text.replace(base64RegExp, writeImageTagBase64); // cases with crazy urls like ./image/cat1).png\n\n text = text.replace(crazyRegExp, writeImageTag); // normal cases\n\n text = text.replace(inlineRegExp, writeImageTag); // handle reference-style shortcuts: ![img text]\n\n text = text.replace(refShortcutRegExp, writeImageTag);\n text = globals.converter._dispatch('images.after', text, options, globals);\n return text;\n });\n showdown.subParser('italicsAndBold', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('italicsAndBold.before', text, options, globals); // it's faster to have 3 separate regexes for each case than have just one\n // because of backtracing, in some cases, it could lead to an exponential effect\n // called \"catastrophic backtrace\". Ominous!\n\n function parseInside(txt, left, right) {\n /*\n if (options.simplifiedAutoLink) {\n txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n }\n */\n return left + txt + right;\n } // Parse underscores\n\n\n if (options.literalMidWordUnderscores) {\n text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n return parseInside(txt, '', '');\n });\n text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n return parseInside(txt, '', '');\n });\n text = text.replace(/\\b_(\\S[\\s\\S]*?)_\\b/g, function (wm, txt) {\n return parseInside(txt, '', '');\n });\n } else {\n text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n return /\\S$/.test(m) ? parseInside(m, '', '') : wm;\n });\n text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n return /\\S$/.test(m) ? parseInside(m, '', '') : wm;\n });\n text = text.replace(/_([^\\s_][\\s\\S]*?)_/g, function (wm, m) {\n // !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)\n return /\\S$/.test(m) ? parseInside(m, '', '') : wm;\n });\n } // Now parse asterisks\n\n\n if (options.literalMidWordAsterisks) {\n text = text.replace(/([^*]|^)\\B\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside(txt, lead + '', '');\n });\n text = text.replace(/([^*]|^)\\B\\*\\*(\\S[\\s\\S]*?)\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside(txt, lead + '', '');\n });\n text = text.replace(/([^*]|^)\\B\\*(\\S[\\s\\S]*?)\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside(txt, lead + '', '');\n });\n } else {\n text = text.replace(/\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*/g, function (wm, m) {\n return /\\S$/.test(m) ? parseInside(m, '', '') : wm;\n });\n text = text.replace(/\\*\\*(\\S[\\s\\S]*?)\\*\\*/g, function (wm, m) {\n return /\\S$/.test(m) ? parseInside(m, '', '') : wm;\n });\n text = text.replace(/\\*([^\\s*][\\s\\S]*?)\\*/g, function (wm, m) {\n // !/^\\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)\n return /\\S$/.test(m) ? parseInside(m, '', '') : wm;\n });\n }\n\n text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);\n return text;\n });\n /**\n * Form HTML ordered (numbered) and unordered (bulleted) lists.\n */\n\n showdown.subParser('lists', function (text, options, globals) {\n 'use strict';\n /**\n * Process the contents of a single ordered or unordered list, splitting it\n * into individual list items.\n * @param {string} listStr\n * @param {boolean} trimTrailing\n * @returns {string}\n */\n\n function processListItems(listStr, trimTrailing) {\n // The $g_list_level global keeps track of when we're inside a list.\n // Each time we enter a list, we increment it; when we leave a list,\n // we decrement. If it's zero, we're not in a list anymore.\n //\n // We do this because when we're not inside a list, we want to treat\n // something like this:\n //\n // I recommend upgrading to version\n // 8. Oops, now this line is treated\n // as a sub-list.\n //\n // As a single paragraph, despite the fact that the second line starts\n // with a digit-period-space sequence.\n //\n // Whereas when we're inside a list (or sub-list), that line will be\n // treated as the start of a sub-list. What a kludge, huh? This is\n // an aspect of Markdown's syntax that's hard to parse perfectly\n // without resorting to mind-reading. Perhaps the solution is to\n // change the syntax rules such that sub-lists must start with a\n // starting cardinal number; e.g. \"1.\" or \"a.\".\n globals.gListLevel++; // trim trailing blank lines:\n\n listStr = listStr.replace(/\\n{2,}$/, '\\n'); // attacklab: add sentinel to emulate \\z\n\n listStr += '¨0';\n var rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0| {0,3}([*+-]|\\d+[.])[ \\t]+))/gm,\n isParagraphed = /\\n[ \\t]*\\n(?!¨0)/.test(listStr); // Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation,\n // which is a syntax breaking change\n // activating this option reverts to old behavior\n\n if (options.disableForced4SpacesIndentedSublists) {\n rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0|\\2([*+-]|\\d+[.])[ \\t]+))/gm;\n }\n\n listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {\n checked = checked && checked.trim() !== '';\n var item = showdown.subParser('outdent')(m4, options, globals),\n bulletStyle = ''; // Support for github tasklists\n\n if (taskbtn && options.tasklists) {\n bulletStyle = ' class=\"task-list-item\" style=\"list-style-type: none;\"';\n item = item.replace(/^[ \\t]*\\[(x|X| )?]/m, function () {\n var otp = '
  • a
  • \n // instead of:\n //
    • - - a
    \n // So, to prevent it, we will put a marker (¨A)in the beginning of the line\n // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser\n\n\n item = item.replace(/^([-*+]|\\d\\.)[ \\t]+[\\S\\n ]*/g, function (wm2) {\n return '¨A' + wm2;\n }); // m1 - Leading line or\n // Has a double return (multi paragraph) or\n // Has sublist\n\n if (m1 || item.search(/\\n{2,}/) > -1) {\n item = showdown.subParser('githubCodeBlocks')(item, options, globals);\n item = showdown.subParser('blockGamut')(item, options, globals);\n } else {\n // Recursion for sub-lists:\n item = showdown.subParser('lists')(item, options, globals);\n item = item.replace(/\\n$/, ''); // chomp(item)\n\n item = showdown.subParser('hashHTMLBlocks')(item, options, globals); // Colapse double linebreaks\n\n item = item.replace(/\\n\\n+/g, '\\n\\n');\n\n if (isParagraphed) {\n item = showdown.subParser('paragraphs')(item, options, globals);\n } else {\n item = showdown.subParser('spanGamut')(item, options, globals);\n }\n } // now we need to remove the marker (¨A)\n\n\n item = item.replace('¨A', ''); // we can finally wrap the line in list item tags\n\n item = '' + item + '\\n';\n return item;\n }); // attacklab: strip sentinel\n\n listStr = listStr.replace(/¨0/g, '');\n globals.gListLevel--;\n\n if (trimTrailing) {\n listStr = listStr.replace(/\\s+$/, '');\n }\n\n return listStr;\n }\n\n function styleStartNumber(list, listType) {\n // check if ol and starts by a number different than 1\n if (listType === 'ol') {\n var res = list.match(/^ *(\\d+)\\./);\n\n if (res && res[1] !== '1') {\n return ' start=\"' + res[1] + '\"';\n }\n }\n\n return '';\n }\n /**\n * Check and parse consecutive lists (better fix for issue #142)\n * @param {string} list\n * @param {string} listType\n * @param {boolean} trimTrailing\n * @returns {string}\n */\n\n\n function parseConsecutiveLists(list, listType, trimTrailing) {\n // check if we caught 2 or more consecutive lists by mistake\n // we use the counterRgx, meaning if listType is UL we look for OL and vice versa\n var olRgx = options.disableForced4SpacesIndentedSublists ? /^ ?\\d+\\.[ \\t]/gm : /^ {0,3}\\d+\\.[ \\t]/gm,\n ulRgx = options.disableForced4SpacesIndentedSublists ? /^ ?[*+-][ \\t]/gm : /^ {0,3}[*+-][ \\t]/gm,\n counterRxg = listType === 'ul' ? olRgx : ulRgx,\n result = '';\n\n if (list.search(counterRxg) !== -1) {\n (function parseCL(txt) {\n var pos = txt.search(counterRxg),\n style = styleStartNumber(list, listType);\n\n if (pos !== -1) {\n // slice\n result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '\\n'; // invert counterType and listType\n\n listType = listType === 'ul' ? 'ol' : 'ul';\n counterRxg = listType === 'ul' ? olRgx : ulRgx; //recurse\n\n parseCL(txt.slice(pos));\n } else {\n result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt, !!trimTrailing) + '\\n';\n }\n })(list);\n } else {\n var style = styleStartNumber(list, listType);\n result = '\\n\\n<' + listType + style + '>\\n' + processListItems(list, !!trimTrailing) + '\\n';\n }\n\n return result;\n }\n /** Start of list parsing **/\n\n\n text = globals.converter._dispatch('lists.before', text, options, globals); // add sentinel to hack around khtml/safari bug:\n // http://bugs.webkit.org/show_bug.cgi?id=11231\n\n text += '¨0';\n\n if (globals.gListLevel) {\n text = text.replace(/^(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm, function (wholeMatch, list, m2) {\n var listType = m2.search(/[*+-]/g) > -1 ? 'ul' : 'ol';\n return parseConsecutiveLists(list, listType, true);\n });\n } else {\n text = text.replace(/(\\n\\n|^\\n?)(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm, function (wholeMatch, m1, list, m3) {\n var listType = m3.search(/[*+-]/g) > -1 ? 'ul' : 'ol';\n return parseConsecutiveLists(list, listType, false);\n });\n } // strip sentinel\n\n\n text = text.replace(/¨0/, '');\n text = globals.converter._dispatch('lists.after', text, options, globals);\n return text;\n });\n /**\n * Parse metadata at the top of the document\n */\n\n showdown.subParser('metadata', function (text, options, globals) {\n 'use strict';\n\n if (!options.metadata) {\n return text;\n }\n\n text = globals.converter._dispatch('metadata.before', text, options, globals);\n\n function parseMetadataContents(content) {\n // raw is raw so it's not changed in any way\n globals.metadata.raw = content; // escape chars forbidden in html attributes\n // double quotes\n\n content = content // ampersand first\n .replace(/&/g, '&') // double quotes\n .replace(/\"/g, '"');\n content = content.replace(/\\n {4}/g, ' ');\n content.replace(/^([\\S ]+): +([\\s\\S]+?)$/gm, function (wm, key, value) {\n globals.metadata.parsed[key] = value;\n return '';\n });\n }\n\n text = text.replace(/^\\s*«««+(\\S*?)\\n([\\s\\S]+?)\\n»»»+\\n/, function (wholematch, format, content) {\n parseMetadataContents(content);\n return '¨M';\n });\n text = text.replace(/^\\s*---+(\\S*?)\\n([\\s\\S]+?)\\n---+\\n/, function (wholematch, format, content) {\n if (format) {\n globals.metadata.format = format;\n }\n\n parseMetadataContents(content);\n return '¨M';\n });\n text = text.replace(/¨M/g, '');\n text = globals.converter._dispatch('metadata.after', text, options, globals);\n return text;\n });\n /**\n * Remove one level of line-leading tabs or spaces\n */\n\n showdown.subParser('outdent', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('outdent.before', text, options, globals); // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n\n text = text.replace(/^(\\t|[ ]{1,4})/gm, '¨0'); // attacklab: g_tab_width\n // attacklab: clean up hack\n\n text = text.replace(/¨0/g, '');\n text = globals.converter._dispatch('outdent.after', text, options, globals);\n return text;\n });\n /**\n *\n */\n\n showdown.subParser('paragraphs', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('paragraphs.before', text, options, globals); // Strip leading and trailing lines:\n\n text = text.replace(/^\\n+/g, '');\n text = text.replace(/\\n+$/g, '');\n var grafs = text.split(/\\n{2,}/g),\n grafsOut = [],\n end = grafs.length; // Wrap

    tags\n\n for (var i = 0; i < end; i++) {\n var str = grafs[i]; // if this is an HTML marker, copy it\n\n if (str.search(/¨(K|G)(\\d+)\\1/g) >= 0) {\n grafsOut.push(str); // test for presence of characters to prevent empty lines being parsed\n // as paragraphs (resulting in undesired extra empty paragraphs)\n } else if (str.search(/\\S/) >= 0) {\n str = showdown.subParser('spanGamut')(str, options, globals);\n str = str.replace(/^([ \\t]*)/g, '

    ');\n str += '

    ';\n grafsOut.push(str);\n }\n }\n /** Unhashify HTML blocks */\n\n\n end = grafsOut.length;\n\n for (i = 0; i < end; i++) {\n var blockText = '',\n grafsOutIt = grafsOut[i],\n codeFlag = false; // if this is a marker for an html block...\n // use RegExp.test instead of string.search because of QML bug\n\n while (/¨(K|G)(\\d+)\\1/.test(grafsOutIt)) {\n var delim = RegExp.$1,\n num = RegExp.$2;\n\n if (delim === 'K') {\n blockText = globals.gHtmlBlocks[num];\n } else {\n // we need to check if ghBlock is a false positive\n if (codeFlag) {\n // use encoded version of all text\n blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text, options, globals);\n } else {\n blockText = globals.ghCodeBlocks[num].codeblock;\n }\n }\n\n blockText = blockText.replace(/\\$/g, '$$$$'); // Escape any dollar signs\n\n grafsOutIt = grafsOutIt.replace(/(\\n\\n)?¨(K|G)\\d+\\2(\\n\\n)?/, blockText); // Check if grafsOutIt is a pre->code\n\n if (/^]*>\\s*]*>/.test(grafsOutIt)) {\n codeFlag = true;\n }\n }\n\n grafsOut[i] = grafsOutIt;\n }\n\n text = grafsOut.join('\\n'); // Strip leading and trailing lines:\n\n text = text.replace(/^\\n+/g, '');\n text = text.replace(/\\n+$/g, '');\n return globals.converter._dispatch('paragraphs.after', text, options, globals);\n });\n /**\n * Run extension\n */\n\n showdown.subParser('runExtension', function (ext, text, options, globals) {\n 'use strict';\n\n if (ext.filter) {\n text = ext.filter(text, globals.converter, options);\n } else if (ext.regex) {\n // TODO remove this when old extension loading mechanism is deprecated\n var re = ext.regex;\n\n if (!(re instanceof RegExp)) {\n re = new RegExp(re, 'g');\n }\n\n text = text.replace(re, ext.replace);\n }\n\n return text;\n });\n /**\n * These are all the transformations that occur *within* block-level\n * tags like paragraphs, headers, and list items.\n */\n\n showdown.subParser('spanGamut', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('spanGamut.before', text, options, globals);\n text = showdown.subParser('codeSpans')(text, options, globals);\n text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);\n text = showdown.subParser('encodeBackslashEscapes')(text, options, globals); // Process anchor and image tags. Images must come first,\n // because ![foo][f] looks like an anchor.\n\n text = showdown.subParser('images')(text, options, globals);\n text = showdown.subParser('anchors')(text, options, globals); // Make links out of things like ``\n // Must come after anchors, because you can use < and >\n // delimiters in inline links like [this]().\n\n text = showdown.subParser('autoLinks')(text, options, globals);\n text = showdown.subParser('simplifiedAutoLinks')(text, options, globals);\n text = showdown.subParser('emoji')(text, options, globals);\n text = showdown.subParser('underline')(text, options, globals);\n text = showdown.subParser('italicsAndBold')(text, options, globals);\n text = showdown.subParser('strikethrough')(text, options, globals);\n text = showdown.subParser('ellipsis')(text, options, globals); // we need to hash HTML tags inside spans\n\n text = showdown.subParser('hashHTMLSpans')(text, options, globals); // now we encode amps and angles\n\n text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals); // Do hard breaks\n\n if (options.simpleLineBreaks) {\n // GFM style hard breaks\n // only add line breaks if the text does not contain a block (special case for lists)\n if (!/\\n\\n¨K/.test(text)) {\n text = text.replace(/\\n+/g, '
    \\n');\n }\n } else {\n // Vanilla hard breaks\n text = text.replace(/ +\\n/g, '
    \\n');\n }\n\n text = globals.converter._dispatch('spanGamut.after', text, options, globals);\n return text;\n });\n showdown.subParser('strikethrough', function (text, options, globals) {\n 'use strict';\n\n function parseInside(txt) {\n if (options.simplifiedAutoLink) {\n txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n }\n\n return '' + txt + '';\n }\n\n if (options.strikethrough) {\n text = globals.converter._dispatch('strikethrough.before', text, options, globals);\n text = text.replace(/(?:~){2}([\\s\\S]+?)(?:~){2}/g, function (wm, txt) {\n return parseInside(txt);\n });\n text = globals.converter._dispatch('strikethrough.after', text, options, globals);\n }\n\n return text;\n });\n /**\n * Strips link definitions from text, stores the URLs and titles in\n * hash references.\n * Link defs are in the form: ^[id]: url \"optional title\"\n */\n\n showdown.subParser('stripLinkDefinitions', function (text, options, globals) {\n 'use strict';\n\n var regex = /^ {0,3}\\[(.+)]:[ \\t]*\\n?[ \\t]*\\s]+)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n+|(?=¨0))/gm,\n base64Regex = /^ {0,3}\\[(.+)]:[ \\t]*\\n?[ \\t]*?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n\\n|(?=¨0)|(?=\\n\\[))/gm; // attacklab: sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n\n text += '¨0';\n\n var replaceFunc = function replaceFunc(wholeMatch, linkId, url, width, height, blankLines, title) {\n linkId = linkId.toLowerCase();\n\n if (url.match(/^data:.+?\\/.+?;base64,/)) {\n // remove newlines\n globals.gUrls[linkId] = url.replace(/\\s/g, '');\n } else {\n globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals); // Link IDs are case-insensitive\n }\n\n if (blankLines) {\n // Oops, found blank lines, so it's not a title.\n // Put back the parenthetical statement we stole.\n return blankLines + title;\n } else {\n if (title) {\n globals.gTitles[linkId] = title.replace(/\"|'/g, '"');\n }\n\n if (options.parseImgDimensions && width && height) {\n globals.gDimensions[linkId] = {\n width: width,\n height: height\n };\n }\n } // Completely remove the definition from the text\n\n\n return '';\n }; // first we try to find base64 link references\n\n\n text = text.replace(base64Regex, replaceFunc);\n text = text.replace(regex, replaceFunc); // attacklab: strip sentinel\n\n text = text.replace(/¨0/, '');\n return text;\n });\n showdown.subParser('tables', function (text, options, globals) {\n 'use strict';\n\n if (!options.tables) {\n return text;\n }\n\n var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n //singeColTblRgx = /^ {0,3}\\|.+\\|\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n(?: {0,3}\\|.+\\|\\n)+(?:\\n\\n|¨0)/gm;\n singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n function parseStyles(sLine) {\n if (/^:[ \\t]*--*$/.test(sLine)) {\n return ' style=\"text-align:left;\"';\n } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n return ' style=\"text-align:right;\"';\n } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n return ' style=\"text-align:center;\"';\n } else {\n return '';\n }\n }\n\n function parseHeaders(header, style) {\n var id = '';\n header = header.trim(); // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n\n if (options.tablesHeaderId || options.tableHeaderId) {\n id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n }\n\n header = showdown.subParser('spanGamut')(header, options, globals);\n return '' + header + '\\n';\n }\n\n function parseCells(cell, style) {\n var subText = showdown.subParser('spanGamut')(cell, options, globals);\n return '' + subText + '\\n';\n }\n\n function buildTable(headers, cells) {\n var tb = '\\n\\n\\n',\n tblLgn = headers.length;\n\n for (var i = 0; i < tblLgn; ++i) {\n tb += headers[i];\n }\n\n tb += '\\n\\n\\n';\n\n for (i = 0; i < cells.length; ++i) {\n tb += '\\n';\n\n for (var ii = 0; ii < tblLgn; ++ii) {\n tb += cells[i][ii];\n }\n\n tb += '\\n';\n }\n\n tb += '\\n
    \\n';\n return tb;\n }\n\n function parseTable(rawTable) {\n var i,\n tableLines = rawTable.split('\\n');\n\n for (i = 0; i < tableLines.length; ++i) {\n // strip wrong first and last column if wrapped tables are used\n if (/^ {0,3}\\|/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n }\n\n if (/\\|[ \\t]*$/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n } // parse code spans first, but we only support one line code spans\n\n\n tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n }\n\n var rawHeaders = tableLines[0].split('|').map(function (s) {\n return s.trim();\n }),\n rawStyles = tableLines[1].split('|').map(function (s) {\n return s.trim();\n }),\n rawCells = [],\n headers = [],\n styles = [],\n cells = [];\n tableLines.shift();\n tableLines.shift();\n\n for (i = 0; i < tableLines.length; ++i) {\n if (tableLines[i].trim() === '') {\n continue;\n }\n\n rawCells.push(tableLines[i].split('|').map(function (s) {\n return s.trim();\n }));\n }\n\n if (rawHeaders.length < rawStyles.length) {\n return rawTable;\n }\n\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n\n for (i = 0; i < rawHeaders.length; ++i) {\n if (showdown.helper.isUndefined(styles[i])) {\n styles[i] = '';\n }\n\n headers.push(parseHeaders(rawHeaders[i], styles[i]));\n }\n\n for (i = 0; i < rawCells.length; ++i) {\n var row = [];\n\n for (var ii = 0; ii < headers.length; ++ii) {\n if (showdown.helper.isUndefined(rawCells[i][ii])) {}\n\n row.push(parseCells(rawCells[i][ii], styles[ii]));\n }\n\n cells.push(row);\n }\n\n return buildTable(headers, cells);\n }\n\n text = globals.converter._dispatch('tables.before', text, options, globals); // find escaped pipe characters\n\n text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback); // parse multi column tables\n\n text = text.replace(tableRgx, parseTable); // parse one column tables\n\n text = text.replace(singeColTblRgx, parseTable);\n text = globals.converter._dispatch('tables.after', text, options, globals);\n return text;\n });\n showdown.subParser('underline', function (text, options, globals) {\n 'use strict';\n\n if (!options.underline) {\n return text;\n }\n\n text = globals.converter._dispatch('underline.before', text, options, globals);\n\n if (options.literalMidWordUnderscores) {\n text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n } else {\n text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n return /\\S$/.test(m) ? '' + m + '' : wm;\n });\n text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n return /\\S$/.test(m) ? '' + m + '' : wm;\n });\n } // escape remaining underscores to prevent them being parsed by italic and bold\n\n\n text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);\n text = globals.converter._dispatch('underline.after', text, options, globals);\n return text;\n });\n /**\n * Swap back in all the special characters we've hidden.\n */\n\n showdown.subParser('unescapeSpecialChars', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);\n text = text.replace(/¨E(\\d+)E/g, function (wholeMatch, m1) {\n var charCodeToReplace = parseInt(m1);\n return String.fromCharCode(charCodeToReplace);\n });\n text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);\n return text;\n });\n showdown.subParser('makeMarkdown.blockquote', function (node, globals) {\n 'use strict';\n\n var txt = '';\n\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals);\n\n if (innerTxt === '') {\n continue;\n }\n\n txt += innerTxt;\n }\n } // cleanup\n\n\n txt = txt.trim();\n txt = '> ' + txt.split('\\n').join('\\n> ');\n return txt;\n });\n showdown.subParser('makeMarkdown.codeBlock', function (node, globals) {\n 'use strict';\n\n var lang = node.getAttribute('language'),\n num = node.getAttribute('precodenum');\n return '```' + lang + '\\n' + globals.preList[num] + '\\n```';\n });\n showdown.subParser('makeMarkdown.codeSpan', function (node) {\n 'use strict';\n\n return '`' + node.innerHTML + '`';\n });\n showdown.subParser('makeMarkdown.emphasis', function (node, globals) {\n 'use strict';\n\n var txt = '';\n\n if (node.hasChildNodes()) {\n txt += '*';\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n\n txt += '*';\n }\n\n return txt;\n });\n showdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) {\n 'use strict';\n\n var headerMark = new Array(headerLevel + 1).join('#'),\n txt = '';\n\n if (node.hasChildNodes()) {\n txt = headerMark + ' ';\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n }\n\n return txt;\n });\n showdown.subParser('makeMarkdown.hr', function () {\n 'use strict';\n\n return '---';\n });\n showdown.subParser('makeMarkdown.image', function (node) {\n 'use strict';\n\n var txt = '';\n\n if (node.hasAttribute('src')) {\n txt += '![' + node.getAttribute('alt') + '](';\n txt += '<' + node.getAttribute('src') + '>';\n\n if (node.hasAttribute('width') && node.hasAttribute('height')) {\n txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height');\n }\n\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n\n txt += ')';\n }\n\n return txt;\n });\n showdown.subParser('makeMarkdown.links', function (node, globals) {\n 'use strict';\n\n var txt = '';\n\n if (node.hasChildNodes() && node.hasAttribute('href')) {\n var children = node.childNodes,\n childrenLength = children.length;\n txt = '[';\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n\n txt += '](';\n txt += '<' + node.getAttribute('href') + '>';\n\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n\n txt += ')';\n }\n\n return txt;\n });\n showdown.subParser('makeMarkdown.list', function (node, globals, type) {\n 'use strict';\n\n var txt = '';\n\n if (!node.hasChildNodes()) {\n return '';\n }\n\n var listItems = node.childNodes,\n listItemsLenght = listItems.length,\n listNum = node.getAttribute('start') || 1;\n\n for (var i = 0; i < listItemsLenght; ++i) {\n if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') {\n continue;\n } // define the bullet to use in list\n\n\n var bullet = '';\n\n if (type === 'ol') {\n bullet = listNum.toString() + '. ';\n } else {\n bullet = '- ';\n } // parse list item\n\n\n txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals);\n ++listNum;\n } // add comment at the end to prevent consecutive lists to be parsed as one\n\n\n txt += '\\n\\n';\n return txt.trim();\n });\n showdown.subParser('makeMarkdown.listItem', function (node, globals) {\n 'use strict';\n\n var listItemTxt = '';\n var children = node.childNodes,\n childrenLenght = children.length;\n\n for (var i = 0; i < childrenLenght; ++i) {\n listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n } // if it's only one liner, we need to add a newline at the end\n\n\n if (!/\\n$/.test(listItemTxt)) {\n listItemTxt += '\\n';\n } else {\n // it's multiparagraph, so we need to indent\n listItemTxt = listItemTxt.split('\\n').join('\\n ').replace(/^ {4}$/gm, '').replace(/\\n\\n+/g, '\\n\\n');\n }\n\n return listItemTxt;\n });\n showdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {\n 'use strict';\n\n spansOnly = spansOnly || false;\n var txt = ''; // edge case of text without wrapper paragraph\n\n if (node.nodeType === 3) {\n return showdown.subParser('makeMarkdown.txt')(node, globals);\n } // HTML comment\n\n\n if (node.nodeType === 8) {\n return '\\n\\n';\n } // process only node elements\n\n\n if (node.nodeType !== 1) {\n return '';\n }\n\n var tagName = node.tagName.toLowerCase();\n\n switch (tagName) {\n //\n // BLOCKS\n //\n case 'h1':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\\n\\n';\n }\n\n break;\n\n case 'h2':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\\n\\n';\n }\n\n break;\n\n case 'h3':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\\n\\n';\n }\n\n break;\n\n case 'h4':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\\n\\n';\n }\n\n break;\n\n case 'h5':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\\n\\n';\n }\n\n break;\n\n case 'h6':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\\n\\n';\n }\n\n break;\n\n case 'p':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\\n\\n';\n }\n\n break;\n\n case 'blockquote':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\\n\\n';\n }\n\n break;\n\n case 'hr':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\\n\\n';\n }\n\n break;\n\n case 'ol':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\\n\\n';\n }\n\n break;\n\n case 'ul':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\\n\\n';\n }\n\n break;\n\n case 'precode':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\\n\\n';\n }\n\n break;\n\n case 'pre':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\\n\\n';\n }\n\n break;\n\n case 'table':\n if (!spansOnly) {\n txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\\n\\n';\n }\n\n break;\n //\n // SPANS\n //\n\n case 'code':\n txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);\n break;\n\n case 'em':\n case 'i':\n txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);\n break;\n\n case 'strong':\n case 'b':\n txt = showdown.subParser('makeMarkdown.strong')(node, globals);\n break;\n\n case 'del':\n txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);\n break;\n\n case 'a':\n txt = showdown.subParser('makeMarkdown.links')(node, globals);\n break;\n\n case 'img':\n txt = showdown.subParser('makeMarkdown.image')(node, globals);\n break;\n\n default:\n txt = node.outerHTML + '\\n\\n';\n } // common normalization\n // TODO eventually\n\n\n return txt;\n });\n showdown.subParser('makeMarkdown.paragraph', function (node, globals) {\n 'use strict';\n\n var txt = '';\n\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n } // some text normalization\n\n\n txt = txt.trim();\n return txt;\n });\n showdown.subParser('makeMarkdown.pre', function (node, globals) {\n 'use strict';\n\n var num = node.getAttribute('prenum');\n return '
    ' + globals.preList[num] + '
    ';\n });\n showdown.subParser('makeMarkdown.strikethrough', function (node, globals) {\n 'use strict';\n\n var txt = '';\n\n if (node.hasChildNodes()) {\n txt += '~~';\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n\n txt += '~~';\n }\n\n return txt;\n });\n showdown.subParser('makeMarkdown.strong', function (node, globals) {\n 'use strict';\n\n var txt = '';\n\n if (node.hasChildNodes()) {\n txt += '**';\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n\n txt += '**';\n }\n\n return txt;\n });\n showdown.subParser('makeMarkdown.table', function (node, globals) {\n 'use strict';\n\n var txt = '',\n tableArray = [[], []],\n headings = node.querySelectorAll('thead>tr>th'),\n rows = node.querySelectorAll('tbody>tr'),\n i,\n ii;\n\n for (i = 0; i < headings.length; ++i) {\n var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals),\n allign = '---';\n\n if (headings[i].hasAttribute('style')) {\n var style = headings[i].getAttribute('style').toLowerCase().replace(/\\s/g, '');\n\n switch (style) {\n case 'text-align:left;':\n allign = ':---';\n break;\n\n case 'text-align:right;':\n allign = '---:';\n break;\n\n case 'text-align:center;':\n allign = ':---:';\n break;\n }\n }\n\n tableArray[0][i] = headContent.trim();\n tableArray[1][i] = allign;\n }\n\n for (i = 0; i < rows.length; ++i) {\n var r = tableArray.push([]) - 1,\n cols = rows[i].getElementsByTagName('td');\n\n for (ii = 0; ii < headings.length; ++ii) {\n var cellContent = ' ';\n\n if (typeof cols[ii] !== 'undefined') {\n cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals);\n }\n\n tableArray[r].push(cellContent);\n }\n }\n\n var cellSpacesCount = 3;\n\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n var strLen = tableArray[i][ii].length;\n\n if (strLen > cellSpacesCount) {\n cellSpacesCount = strLen;\n }\n }\n }\n\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n if (i === 1) {\n if (tableArray[i][ii].slice(-1) === ':') {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':';\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-');\n }\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount);\n }\n }\n\n txt += '| ' + tableArray[i].join(' | ') + ' |\\n';\n }\n\n return txt.trim();\n });\n showdown.subParser('makeMarkdown.tableCell', function (node, globals) {\n 'use strict';\n\n var txt = '';\n\n if (!node.hasChildNodes()) {\n return '';\n }\n\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true);\n }\n\n return txt.trim();\n });\n showdown.subParser('makeMarkdown.txt', function (node) {\n 'use strict';\n\n var txt = node.nodeValue; // multiple spaces are collapsed\n\n txt = txt.replace(/ +/g, ' '); // replace the custom ¨NBSP; with a space\n\n txt = txt.replace(/¨NBSP;/g, ' '); // \", <, > and & should replace escaped html entities\n\n txt = showdown.helper.unescapeHTMLEntities(txt); // escape markdown magic characters\n // emphasis, strong and strikethrough - can appear everywhere\n // we also escape pipe (|) because of tables\n // and escape ` because of code blocks and spans\n\n txt = txt.replace(/([*_~|`])/g, '\\\\$1'); // escape > because of blockquotes\n\n txt = txt.replace(/^(\\s*)>/g, '\\\\$1>'); // hash character, only troublesome at the beginning of a line because of headers\n\n txt = txt.replace(/^#/gm, '\\\\#'); // horizontal rules\n\n txt = txt.replace(/^(\\s*)([-=]{3,})(\\s*)$/, '$1\\\\$2$3'); // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer\n\n txt = txt.replace(/^( {0,3}\\d+)\\./gm, '$1\\\\.'); // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)\n\n txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\\\$2'); // images and links, ] followed by ( is problematic, so we escape it\n\n txt = txt.replace(/]([\\s]*)\\(/g, '\\\\]$1\\\\('); // reference URIs must also be escaped\n\n txt = txt.replace(/^ {0,3}\\[([\\S \\t]*?)]:/gm, '\\\\[$1]:');\n return txt;\n });\n var root = this; // AMD Loader\n\n if (typeof define === 'function' && define.amd) {\n define(function () {\n 'use strict';\n\n return showdown;\n }); // CommonJS/nodeJS Loader\n } else if (typeof module !== 'undefined' && module.exports) {\n module.exports = showdown; // Regular Browser loader\n } else {\n root.showdown = showdown;\n }\n}).call(this);"],"sourceRoot":""}