markdown-to-jsx 6.9.4 → 6.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -0
- package/dist/cjs.js +1 -1
- package/dist/cjs.js.map +1 -1
- package/dist/esm.js +1 -1
- package/dist/esm.js.map +1 -1
- package/index.js +61 -29
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@ The most lightweight, customizable React markdown component.
|
|
|
16
16
|
- [options.overrides - Rendering Arbitrary React Components](#optionsoverrides---rendering-arbitrary-react-components)
|
|
17
17
|
- [options.createElement - Custom React.createElement behavior](#optionscreateelement---custom-reactcreateelement-behavior)
|
|
18
18
|
- [options.slugify](#optionsslugify)
|
|
19
|
+
- [options.namedCodesToUnicode](#optionsnamedcodestounicode)
|
|
19
20
|
- [Getting the smallest possible bundle size](#getting-the-smallest-possible-bundle-size)
|
|
20
21
|
- [Usage with Preact](#usage-with-preact)
|
|
21
22
|
- [Gotchas](#gotchas)
|
|
@@ -358,6 +359,37 @@ compiler('# 中文', { slugify: str => str });
|
|
|
358
359
|
<h1 id="中文">中文</h1>
|
|
359
360
|
```
|
|
360
361
|
|
|
362
|
+
#### options.namedCodesToUnicode
|
|
363
|
+
|
|
364
|
+
By default only a couple of named html codes are converted to unicode characters:
|
|
365
|
+
|
|
366
|
+
* `&` (`&`)
|
|
367
|
+
* `'` (`'`)
|
|
368
|
+
* `>` (`>`)
|
|
369
|
+
* `<` (`<`)
|
|
370
|
+
* ` ` (` `)
|
|
371
|
+
* `"` (`"`)
|
|
372
|
+
|
|
373
|
+
Some projects require to extend this map of named codes and unicode characters. To customize this list with additional html codes pass the option namedCodesToUnicode as object with the code names needed as in the example below:
|
|
374
|
+
|
|
375
|
+
```jsx
|
|
376
|
+
<Markdown options={{ namedCodesToUnicode: {
|
|
377
|
+
le: '\u2264',
|
|
378
|
+
ge: '\u2265',
|
|
379
|
+
} }}>This text is ≤ than this text.</Markdown>;
|
|
380
|
+
|
|
381
|
+
// or
|
|
382
|
+
|
|
383
|
+
compiler('This text is ≤ than this text.', namedCodesToUnicode: {
|
|
384
|
+
le: '\u2264',
|
|
385
|
+
ge: '\u2265',
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
// renders:
|
|
389
|
+
|
|
390
|
+
<p>This text is ≤ than this text.</p>
|
|
391
|
+
```
|
|
392
|
+
|
|
361
393
|
### Getting the smallest possible bundle size
|
|
362
394
|
|
|
363
395
|
Many development conveniences are placed behind `process.env.NODE_ENV !== "production"` conditionals. When bundling your app, it's a good idea to replace these code snippets such that a minifier (like uglify) can sweep them away and leave a smaller overall bundle.
|
package/dist/cjs.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';exports.__esModule=!0;var _extends=Object.assign||function(a){for(var b,c=1;c<arguments.length;c++)for(var d in b=arguments[c],b)Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d]);return a},_typeof=typeof Symbol=='function'&&typeof Symbol.iterator=='symbol'?function(a){return typeof a}:function(a){return a&&typeof Symbol=='function'&&a.constructor===Symbol&&a!==Symbol.prototype?'symbol':typeof a};exports.compiler=compiler,exports.default=Markdown;var _react=require('react'),_react2=_interopRequireDefault(_react),_unquote=require('unquote'),_unquote2=_interopRequireDefault(_unquote);function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function _objectWithoutProperties(a,b){var c={};for(var d in a)b.indexOf(d)>=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}var ATTRIBUTE_TO_JSX_PROP_MAP={accesskey:'accessKey',allowfullscreen:'allowFullScreen',allowtransparency:'allowTransparency',autocomplete:'autoComplete',autofocus:'autoFocus',autoplay:'autoPlay',cellpadding:'cellPadding',cellspacing:'cellSpacing',charset:'charSet',class:'className',classid:'classId',colspan:'colSpan',contenteditable:'contentEditable',contextmenu:'contextMenu',crossorigin:'crossOrigin',enctype:'encType',for:'htmlFor',formaction:'formAction',formenctype:'formEncType',formmethod:'formMethod',formnovalidate:'formNoValidate',formtarget:'formTarget',frameborder:'frameBorder',hreflang:'hrefLang',inputmode:'inputMode',keyparams:'keyParams',keytype:'keyType',marginheight:'marginHeight',marginwidth:'marginWidth',maxlength:'maxLength',mediagroup:'mediaGroup',minlength:'minLength',novalidate:'noValidate',radiogroup:'radioGroup',readonly:'readOnly',rowspan:'rowSpan',spellcheck:'spellCheck',srcdoc:'srcDoc',srclang:'srcLang',srcset:'srcSet',tabindex:'tabIndex',usemap:'useMap'},namedCodesToUnicode={amp:'&',apos:'\'',gt:'>',lt:'<',nbsp:'\xA0',quot:'\u201C'},DO_NOT_PROCESS_HTML_ELEMENTS=['style','script'],ATTR_EXTRACTOR_R=/([-A-Z0-9_:]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|(?:\{((?:\\.|{[^}]*?}|[^}])*)\})))?/gi,AUTOLINK_MAILTO_CHECK_R=/mailto:/i,BLOCK_END_R=/\n{2,}$/,BLOCKQUOTE_R=/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/,BLOCKQUOTE_TRIM_LEFT_MULTILINE_R=/^ *> ?/gm,BREAK_LINE_R=/^ {2,}\n/,BREAK_THEMATIC_R=/^(?:( *[-*_]) *){3,}(?:\n *)+\n/,CODE_BLOCK_FENCED_R=/^\s*(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n *)+\n?/,CODE_BLOCK_R=/^(?: {4}[^\n]+\n*)+(?:\n *)+\n?/,CODE_INLINE_R=/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,CONSECUTIVE_NEWLINE_R=/^(?:\n *)*\n/,CR_NEWLINE_R=/\r\n?/g,FOOTNOTE_R=/^\[\^(.*)\](:.*)\n/,FOOTNOTE_REFERENCE_R=/^\[\^(.*)\]/,FORMFEED_R=/\f/g,GFM_TASK_R=/^\s*?\[(x|\s)\]/,HEADING_R=/^ *(#{1,6}) *([^\n]+)\n{0,2}/,HEADING_SETEXT_R=/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/,HTML_BLOCK_ELEMENT_R=/^ *(?!<[a-z][^ >/]* ?\/>)<([a-z][^ >/]*) ?([^>]*)\/{0}>\n?(\s*(?:<\1[^>]*?>[\s\S]*?<\/\1>|(?!<\1)[\s\S])*?)<\/\1>\n*/i,HTML_CHAR_CODE_R=/&([a-z]+);/g,HTML_COMMENT_R=/^<!--.*?-->/,HTML_CUSTOM_ATTR_R=/^(data|aria|x)-[a-z_][a-z\d_.-]*$/,HTML_SELF_CLOSING_ELEMENT_R=/^ *<([a-z][a-z0-9:]*)(?:\s+((?:<.*?>|[^>])*))?\/?>(?!<\/\1>)(\s*\n)?/i,INTERPOLATION_R=/^\{.*\}$/,LINK_AUTOLINK_BARE_URL_R=/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,LINK_AUTOLINK_MAILTO_R=/^<([^ >]+@[^ >]+)>/,LINK_AUTOLINK_R=/^<([^ >]+:\/[^ >]+)>/,LIST_ITEM_END_R=/ *\n+$/,LIST_LOOKBEHIND_R=/(?:^|\n)( *)$/,CAPTURE_LETTER_AFTER_HYPHEN=/-([a-z])?/gi,NP_TABLE_R=/^(.*\|?.*)\n *(\|? *[-:]+ *\|[-| :]*)\n((?:.*\|.*\n)*)\n?/,PARAGRAPH_R=/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/,REFERENCE_IMAGE_OR_LINK=/^\[([^\]]*)\]:\s*(\S+)\s*("([^"]*)")?/,REFERENCE_IMAGE_R=/^!\[([^\]]*)\] ?\[([^\]]*)\]/,REFERENCE_LINK_R=/^\[([^\]]*)\] ?\[([^\]]*)\]/,SQUARE_BRACKETS_R=/(\[|\])/g,SHOULD_RENDER_AS_BLOCK_R=/(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s)/,TAB_R=/\t/g,TABLE_TRIM_PIPES=/(^ *\||\| *$)/g,TABLE_CENTER_ALIGN=/^ *:-+: *$/,TABLE_LEFT_ALIGN=/^ *:-+ *$/,TABLE_RIGHT_ALIGN=/^ *-+: *$/,TABLE_ROW_SPLIT=/ *\| */,TEXT_BOLD_R=/^([*_])\1((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1\1(?!\1)/,TEXT_EMPHASIZED_R=/^([*_])((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1(?!\1)/,TEXT_STRIKETHROUGHED_R=/^~~((?:\[.*?\]|<.*?>(?:.*?<.*?>)?|`.*?`|.)*?)~~/,TEXT_ESCAPED_R=/^\\([^0-9A-Za-z\s])/,TEXT_PLAIN_R=/^[\s\S]+?(?=[^0-9A-Z\s\u00c0-\uffff&;.()'"]|\d+\.|\n\n| {2,}\n|\w+:\S|$)/i,TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R=/(^\n+|(\n|\s)+$)/g,HTML_LEFT_TRIM_AMOUNT_R=/^([ \t]*)/,UNESCAPE_URL_R=/\\([^0-9A-Z\s])/gi,LIST_BULLET='(?:[*+-]|\\d+\\.)',LIST_ITEM_PREFIX='( *)((?:[*+-]|\\d+\\.)) +',LIST_ITEM_PREFIX_R=/^( *)((?:[*+-]|\d+\.)) +/,LIST_ITEM_R=/( *)((?:[*+-]|\d+\.)) +[^\n]*(?:\n(?!\1(?:[*+-]|\d+\.) )[^\n]*)*(\n|$)/gm,LIST_R=/^( *)((?:[*+-]|\d+\.)) [\s\S]+?(?:\n{2,}(?! )(?!\1(?:[*+-]|\d+\.) (?!(?:[*+-]|\d+\.) ))\n*|\s*\n*$)/,LINK_INSIDE='(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*',LINK_HREF_AND_TITLE='\\s*<?((?:[^\\s\\\\]|\\\\.)*?)>?(?:\\s+[\'"]([\\s\\S]*?)[\'"])?\\s*',LINK_R=/^\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*<?((?:[^\s\\]|\\.)*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*\)/,IMAGE_R=/^!\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*<?((?:[^\s\\]|\\.)*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*\)/,BLOCK_SYNTAXES=[BLOCKQUOTE_R,CODE_BLOCK_R,CODE_BLOCK_FENCED_R,HEADING_R,HEADING_SETEXT_R,HTML_BLOCK_ELEMENT_R,HTML_COMMENT_R,HTML_SELF_CLOSING_ELEMENT_R,LIST_ITEM_R,LIST_R,NP_TABLE_R,PARAGRAPH_R];function containsBlockSyntax(a){return BLOCK_SYNTAXES.some(function(b){return b.test(a)})}function slugify(a){return a.replace(/[ÀÁÂÃÄÅàáâãä忯]/g,'a').replace(/[çÇ]/g,'c').replace(/[ðÐ]/g,'d').replace(/[ÈÉÊËéèêë]/g,'e').replace(/[ÏïÎîÍíÌì]/g,'i').replace(/[Ññ]/g,'n').replace(/[øØœŒÕõÔôÓóÒò]/g,'o').replace(/[ÜüÛûÚúÙù]/g,'u').replace(/[ŸÿÝý]/g,'y').replace(/[^a-z0-9- ]/gi,'').replace(/ /gi,'-').toLowerCase()}function parseTableAlignCapture(a){if(TABLE_RIGHT_ALIGN.test(a))return'right';return TABLE_CENTER_ALIGN.test(a)?'center':TABLE_LEFT_ALIGN.test(a)?'left':null}function parseTableHeader(a,b,c){var d=a[1].replace(TABLE_TRIM_PIPES,'').trim().split(TABLE_ROW_SPLIT);return d.map(function(a){return b(a,c)})}function parseTableAlign(a){var b=a[2].replace(TABLE_TRIM_PIPES,'').trim().split(TABLE_ROW_SPLIT);return b.map(parseTableAlignCapture)}function parseTableCells(a,b,c){var d=a[3].trim().split('\n');return d.map(function(a){return a.replace(TABLE_TRIM_PIPES,'').split(TABLE_ROW_SPLIT).map(function(a){return b(a.trim(),c)})})}function parseTable(a,b,c){c.inline=!0;var d=parseTableHeader(a,b,c),e=parseTableAlign(a,b,c),f=parseTableCells(a,b,c);return c.inline=!1,{align:e,cells:f,header:d,type:'table'}}function getTableStyle(a,b){return a.align[b]==null?{}:{textAlign:a.align[b]}}function normalizeAttributeKey(a){var b=a.indexOf('-');return b!==-1&&a.match(HTML_CUSTOM_ATTR_R)===null&&(a=a.replace(CAPTURE_LETTER_AFTER_HYPHEN,function(a,b){return b.toUpperCase()})),a}function attributeValueToJSXPropValue(a,b){return a==='style'?b.split(/;\s?/).reduce(function(a,b){var c=b.slice(0,b.indexOf(':')),d=c.replace(/(-[a-z])/g,function(a){return a[1].toUpperCase()});return a[d]=b.slice(c.length+1).trim(),a},{}):(b.match(INTERPOLATION_R)&&(b=b.slice(1,b.length-1)),b==='true'||b!=='false'&&b)}function normalizeWhitespace(a){return a.replace(CR_NEWLINE_R,'\n').replace(FORMFEED_R,'').replace(TAB_R,' ')}function parserFor(a){function b(d,e){for(var f=[],g='';d;)for(var l=0;l<c.length;){var h=c[l],j=a[h],k=j.match(d,e,g);if(k){var i=k[0];d=d.substring(i.length);var m=j.parse(k,b,e);m.type==null&&(m.type=h),f.push(m),g=i;break}l++}return f}var c=Object.keys(a);return process.env.NODE_ENV!=='production'&&c.forEach(function(b){var c=a[b].order;process.env.NODE_ENV==='production'||typeof c=='number'&&isFinite(c)||console.warn('markdown-to-jsx: Invalid order for rule `'+b+'`: '+c)}),c.sort(function(b,c){var d=a[b].order,e=a[c].order;return d===e?b<c?-1:1:d-e}),function(a,c){return b(normalizeWhitespace(a),c)}}function inlineRegex(a){return function(b,c){return c.inline?a.exec(b):null}}function simpleInlineRegex(a){return function(b,c){return c.inline||c.simple?a.exec(b):null}}function blockRegex(a){return function(b,c){return c.inline||c.simple?null:a.exec(b)}}function anyScopeRegex(a){return function(b){return a.exec(b)}}function reactFor(a){return function b(c,d){if(d=d||{},Array.isArray(c)){for(var e=d.key,f=[],g=!1,h=0;h<c.length;h++){d.key=h;var j=b(c[h],d),k=typeof j=='string';k&&g?f[f.length-1]+=j:f.push(j),g=k}return d.key=e,f}return a(c,b,d)}}function sanitizeUrl(a){try{var b=decodeURIComponent(a);if(b.match(/^\s*javascript:/i))return process.env.NODE_ENV!=='production'&&console.warn('Anchor URL contains an unsafe JavaScript expression, it will not be rendered.',b),null}catch(b){return process.env.NODE_ENV!=='production'&&console.warn('Anchor URL could not be decoded due to malformed syntax or characters, it will not be rendered.',a),null}return a}function unescapeUrl(a){return a.replace(UNESCAPE_URL_R,'$1')}function parseInline(a,b,c){var d=c.inline||!1,e=c.simple||!1;c.inline=!0,c.simple=!0;var f=a(b,c);return c.inline=d,c.simple=e,f}function parseSimpleInline(a,b,c){var d=c.inline||!1,e=c.simple||!1;c.inline=!1,c.simple=!0;var f=a(b,c);return c.inline=d,c.simple=e,f}function parseBlock(a,b,c){return c.inline=!1,a(b+'\n\n',c)}function parseCaptureInline(a,b,c){return{content:parseInline(b,a[1],c)}}function captureNothing(){return{}}function renderNothing(){return null}function ruleOutput(a){return function(b,c,d){return a[b.type].react(b,c,d)}}function cx(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return b.filter(Boolean).join(' ')}function get(a,b,c){for(var d=a,e=b.split('.');e.length&&(d=d[e[0]],d!==void 0);)e.shift();return d||c}function getTag(a,b){var c=get(b,a);return c?typeof c=='function'||(typeof c=='undefined'?'undefined':_typeof(c))==='object'&&'render'in c?c:get(b,a+'.component',a):a}var PARSE_PRIORITY_MAX=1,PARSE_PRIORITY_HIGH=2,PARSE_PRIORITY_MED=3,PARSE_PRIORITY_LOW=4,PARSE_PRIORITY_MIN=5;function compiler(a,b){function d(a,c){for(var d=get(b.overrides,a+'.props',{}),e=arguments.length,g=Array(e>2?e-2:0),h=2;h<e;h++)g[h-2]=arguments[h];return f.apply(void 0,[getTag(a,b.overrides),_extends({},c,d,{className:cx(c&&c.className,d.className)||void 0})].concat(g))}function c(a){var c=!1;b.forceInline?c=!0:!b.forceBlock&&(c=SHOULD_RENDER_AS_BLOCK_R.test(a)===!1);var e=k(j(c?a:a.replace(TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R,'')+'\n\n',{inline:c})),f=void 0;return e.length>1?f=c?d('span',{key:'outer'},e):d('div',{key:'outer'},e):e.length===1?(f=e[0],typeof f=='string'&&(f=d('span',{key:'outer'},f))):f=d('span',{key:'outer'}),f}function e(a){var b=a.match(ATTR_EXTRACTOR_R);return b?b.reduce(function(a,b,d){var e=b.indexOf('=');if(e!==-1){var f=normalizeAttributeKey(b.slice(0,e)).trim(),g=(0,_unquote2.default)(b.slice(e+1).trim()),h=ATTRIBUTE_TO_JSX_PROP_MAP[f]||f,i=a[h]=attributeValueToJSXPropValue(f,g);(HTML_BLOCK_ELEMENT_R.test(i)||HTML_SELF_CLOSING_ELEMENT_R.test(i))&&(a[h]=_react2.default.cloneElement(c(i.trim()),{key:d}))}else a[ATTRIBUTE_TO_JSX_PROP_MAP[b]||b]=!0;return a},{}):void 0}b=b||{},b.overrides=b.overrides||{},b.slugify=b.slugify||slugify;var f=b.createElement||_react2.default.createElement;if(process.env.NODE_ENV!=='production'){if(typeof a!='string')throw new Error('markdown-to-jsx: the first argument must be\n a string');if(Object.prototype.toString.call(b.overrides)!=='[object Object]')throw new Error('markdown-to-jsx: options.overrides (second argument property) must be\n undefined or an object literal with shape:\n {\n htmltagname: {\n component: string|ReactComponent(optional),\n props: object(optional)\n }\n }')}var g=[],h={},i={blockQuote:{match:blockRegex(BLOCKQUOTE_R),order:PARSE_PRIORITY_HIGH,parse:function d(a,b,c){return{content:b(a[0].replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R,''),c)}},react:function e(a,b,c){return d('blockquote',{key:c.key},b(a.content,c))}},breakLine:{match:anyScopeRegex(BREAK_LINE_R),order:PARSE_PRIORITY_HIGH,parse:captureNothing,react:function e(a,b,c){return d('br',{key:c.key})}},breakThematic:{match:blockRegex(BREAK_THEMATIC_R),order:PARSE_PRIORITY_HIGH,parse:captureNothing,react:function e(a,b,c){return d('hr',{key:c.key})}},codeBlock:{match:blockRegex(CODE_BLOCK_R),order:PARSE_PRIORITY_MAX,parse:function c(a){var b=a[0].replace(/^ {4}/gm,'').replace(/\n+$/,'');return{content:b,lang:void 0}},react:function e(a,b,c){return d('pre',{key:c.key},d('code',{className:a.lang?'lang-'+a.lang:''},a.content))}},codeFenced:{match:blockRegex(CODE_BLOCK_FENCED_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:a[3],lang:a[2]||void 0,type:'codeBlock'}}},codeInline:{match:simpleInlineRegex(CODE_INLINE_R),order:PARSE_PRIORITY_LOW,parse:function b(a){return{content:a[2]}},react:function e(a,b,c){return d('code',{key:c.key},a.content)}},footnote:{match:blockRegex(FOOTNOTE_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return g.push({footnote:a[2],identifier:a[1]}),{}},react:renderNothing},footnoteReference:{match:inlineRegex(FOOTNOTE_REFERENCE_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{content:a[1],target:'#'+a[1]}},react:function e(a,b,c){return d('a',{key:c.key,href:sanitizeUrl(a.target)},d('sup',{key:c.key},a.content))}},gfmTask:{match:inlineRegex(GFM_TASK_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{completed:a[1].toLowerCase()==='x'}},react:function e(a,b,c){return d('input',{checked:a.completed,key:c.key,readOnly:!0,type:'checkbox'})}},heading:{match:blockRegex(HEADING_R),order:PARSE_PRIORITY_HIGH,parse:function e(a,c,d){return{content:parseInline(c,a[2],d),id:b.slugify(a[2]),level:a[1].length}},react:function f(a,b,c){var e='h'+a.level;return d(e,{id:a.id,key:c.key},b(a.content,c))}},headingSetext:{match:blockRegex(HEADING_SETEXT_R),order:PARSE_PRIORITY_MAX,parse:function d(a,b,c){return{content:parseInline(b,a[1],c),level:a[2]==='='?1:2,type:'heading'}}},htmlBlock:{match:anyScopeRegex(HTML_BLOCK_ELEMENT_R),order:PARSE_PRIORITY_HIGH,parse:function k(a,b,c){var d=a[3].match(HTML_LEFT_TRIM_AMOUNT_R),f=d[1],g=new RegExp('^'+f,'gm'),h=a[3].replace(g,''),i=containsBlockSyntax(h)?parseBlock:parseInline,j=DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(a[1])!==-1;return{attrs:e(a[2]),content:j?a[3]:i(b,h,c),noInnerParse:j,tag:a[1]}},react:function e(a,b,c){return d(a.tag,_extends({key:c.key},a.attrs),a.noInnerParse?a.content:b(a.content,c))}},htmlComment:{match:anyScopeRegex(HTML_COMMENT_R),order:PARSE_PRIORITY_HIGH,parse:function a(){return{}},react:renderNothing},htmlSelfClosing:{match:anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{attrs:e(a[2]||''),tag:a[1]}},react:function e(a,b,c){return d(a.tag,_extends({},a.attrs,{key:c.key}))}},image:{match:simpleInlineRegex(IMAGE_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{alt:a[1],target:unescapeUrl(a[2]),title:a[3]}},react:function e(a,b,c){return d('img',{key:c.key,alt:a.alt||void 0,title:a.title||void 0,src:sanitizeUrl(a.target)})}},link:{match:inlineRegex(LINK_R,!1),order:PARSE_PRIORITY_LOW,parse:function d(a,b,c){return{content:parseSimpleInline(b,a[1],c),target:unescapeUrl(a[2]),title:a[3]}},react:function e(a,b,c){return d('a',{key:c.key,href:sanitizeUrl(a.target),title:a.title},b(a.content,c))}},linkAngleBraceStyleDetector:{match:inlineRegex(LINK_AUTOLINK_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:[{content:a[1],type:'text'}],target:a[1],type:'link'}}},linkBareUrlDetector:{match:inlineRegex(LINK_AUTOLINK_BARE_URL_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:[{content:a[1],type:'text'}],target:a[1],title:void 0,type:'link'}}},linkMailtoDetector:{match:inlineRegex(LINK_AUTOLINK_MAILTO_R),order:PARSE_PRIORITY_MAX,parse:function d(a){var b=a[1],c=a[1];return AUTOLINK_MAILTO_CHECK_R.test(c)||(c='mailto:'+c),{content:[{content:b.replace('mailto:',''),type:'text'}],target:c,type:'link'}}},list:{match:function f(a,b,c){var d=LIST_LOOKBEHIND_R.exec(c),e=b._list||!b.inline;return d&&e?(a=d[1]+a,LIST_R.exec(a)):null},order:PARSE_PRIORITY_HIGH,parse:function j(a,b,c){var d=a[2],e=d.length>1,f=e?+d:void 0,g=a[0].replace(BLOCK_END_R,'\n').match(LIST_ITEM_R),h=!1,i=g.map(function(a,d){var e=LIST_ITEM_PREFIX_R.exec(a)[0].length,f=new RegExp('^ {1,'+e+'}','gm'),i=a.replace(f,'').replace(LIST_ITEM_PREFIX_R,''),j=d===g.length-1,k=i.indexOf('\n\n')!==-1,l=k||j&&h;h=l;var m=c.inline,n=c._list;c._list=!0;var o;l?(c.inline=!1,o=i.replace(LIST_ITEM_END_R,'\n\n')):(c.inline=!0,o=i.replace(LIST_ITEM_END_R,''));var p=b(o,c);return c.inline=m,c._list=n,p});return{items:i,ordered:e,start:f}},react:function f(a,b,c){var e=a.ordered?'ol':'ul';return d(e,{key:c.key,start:a.start},a.items.map(function(a,e){return d('li',{key:e},b(a,c))}))}},newlineCoalescer:{match:blockRegex(CONSECUTIVE_NEWLINE_R),order:PARSE_PRIORITY_LOW,parse:captureNothing,react:function a(){return'\n'}},paragraph:{match:blockRegex(PARAGRAPH_R),order:PARSE_PRIORITY_LOW,parse:parseCaptureInline,react:function e(a,b,c){return d('p',{key:c.key},b(a.content,c))}},ref:{match:inlineRegex(REFERENCE_IMAGE_OR_LINK),order:PARSE_PRIORITY_MAX,parse:function b(a){return h[a[1]]={target:a[2],title:a[4]},{}},react:renderNothing},refImage:{match:simpleInlineRegex(REFERENCE_IMAGE_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{alt:a[1]||void 0,ref:a[2]}},react:function e(a,b,c){return d('img',{key:c.key,alt:a.alt,src:sanitizeUrl(h[a.ref].target),title:h[a.ref].title})}},refLink:{match:inlineRegex(REFERENCE_LINK_R),order:PARSE_PRIORITY_MAX,parse:function d(a,b,c){return{content:b(a[1],c),fallbackContent:b(a[0].replace(SQUARE_BRACKETS_R,'\\$1'),c),ref:a[2]}},react:function e(a,b,c){return h[a.ref]?d('a',{key:c.key,href:sanitizeUrl(h[a.ref].target),title:h[a.ref].title},b(a.content,c)):d('span',{key:c.key},b(a.fallbackContent,c))}},table:{match:blockRegex(NP_TABLE_R),order:PARSE_PRIORITY_HIGH,parse:parseTable,react:function f(a,b,e){return d('table',{key:e.key},d('thead',null,d('tr',null,a.header.map(function(c,f){return d('th',{key:f,style:getTableStyle(a,f)},b(c,e))}))),d('tbody',null,a.cells.map(function(c,f){return d('tr',{key:f},c.map(function(f,g){return d('td',{key:g,style:getTableStyle(a,g)},b(f,e))}))})))}},text:{match:anyScopeRegex(TEXT_PLAIN_R),order:PARSE_PRIORITY_MIN,parse:function b(a){return{content:a[0].replace(HTML_CHAR_CODE_R,function(a,b){return namedCodesToUnicode[b]?namedCodesToUnicode[b]:a})}},react:function b(a){return a.content}},textBolded:{match:simpleInlineRegex(TEXT_BOLD_R),order:PARSE_PRIORITY_MED,parse:function d(a,b,c){return{content:b(a[2],c)}},react:function e(a,b,c){return d('strong',{key:c.key},b(a.content,c))}},textEmphasized:{match:simpleInlineRegex(TEXT_EMPHASIZED_R),order:PARSE_PRIORITY_LOW,parse:function d(a,b,c){return{content:b(a[2],c)}},react:function e(a,b,c){return d('em',{key:c.key},b(a.content,c))}},textEscaped:{match:simpleInlineRegex(TEXT_ESCAPED_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{content:a[1],type:'text'}}},textStrikethroughed:{match:simpleInlineRegex(TEXT_STRIKETHROUGHED_R),order:PARSE_PRIORITY_LOW,parse:parseCaptureInline,react:function e(a,b,c){return d('del',{key:c.key},b(a.content,c))}}},j=parserFor(i),k=reactFor(ruleOutput(i)),l=c(a);return g.length&&l.props.children.push(d('footer',{key:'footer'},g.map(function(a){return d('div',{id:a.identifier,key:a.identifier},a.identifier,k(j(a.footnote,{inline:!0})))}))),l}function Markdown(a){var b=a.children,c=a.options,d=_objectWithoutProperties(a,['children','options']);return _react2.default.cloneElement(compiler(b,c),d)}if(process.env.NODE_ENV!=='production'){var PropTypes=require('prop-types');Markdown.propTypes={children:PropTypes.string.isRequired,options:PropTypes.object}}
|
|
1
|
+
'use strict';exports.__esModule=!0;var _extends=Object.assign||function(a){for(var b,c=1;c<arguments.length;c++)for(var d in b=arguments[c],b)Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d]);return a},_typeof=typeof Symbol=='function'&&typeof Symbol.iterator=='symbol'?function(a){return typeof a}:function(a){return a&&typeof Symbol=='function'&&a.constructor===Symbol&&a!==Symbol.prototype?'symbol':typeof a};exports.compiler=compiler,exports.default=Markdown;var _react=require('react'),_react2=_interopRequireDefault(_react),_unquote=require('unquote'),_unquote2=_interopRequireDefault(_unquote);function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function _objectWithoutProperties(a,b){var c={};for(var d in a)b.indexOf(d)>=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}var ATTRIBUTE_TO_JSX_PROP_MAP={accesskey:'accessKey',allowfullscreen:'allowFullScreen',allowtransparency:'allowTransparency',autocomplete:'autoComplete',autofocus:'autoFocus',autoplay:'autoPlay',cellpadding:'cellPadding',cellspacing:'cellSpacing',charset:'charSet',class:'className',classid:'classId',colspan:'colSpan',contenteditable:'contentEditable',contextmenu:'contextMenu',crossorigin:'crossOrigin',enctype:'encType',for:'htmlFor',formaction:'formAction',formenctype:'formEncType',formmethod:'formMethod',formnovalidate:'formNoValidate',formtarget:'formTarget',frameborder:'frameBorder',hreflang:'hrefLang',inputmode:'inputMode',keyparams:'keyParams',keytype:'keyType',marginheight:'marginHeight',marginwidth:'marginWidth',maxlength:'maxLength',mediagroup:'mediaGroup',minlength:'minLength',novalidate:'noValidate',radiogroup:'radioGroup',readonly:'readOnly',rowspan:'rowSpan',spellcheck:'spellCheck',srcdoc:'srcDoc',srclang:'srcLang',srcset:'srcSet',tabindex:'tabIndex',usemap:'useMap'},namedCodesToUnicode={amp:'&',apos:'\'',gt:'>',lt:'<',nbsp:'\xA0',quot:'\u201C'},DO_NOT_PROCESS_HTML_ELEMENTS=['style','script'],ATTR_EXTRACTOR_R=/([-A-Z0-9_:]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|(?:\{((?:\\.|{[^}]*?}|[^}])*)\})))?/gi,AUTOLINK_MAILTO_CHECK_R=/mailto:/i,BLOCK_END_R=/\n{2,}$/,BLOCKQUOTE_R=/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/,BLOCKQUOTE_TRIM_LEFT_MULTILINE_R=/^ *> ?/gm,BREAK_LINE_R=/^ {2,}\n/,BREAK_THEMATIC_R=/^(?:( *[-*_]) *){3,}(?:\n *)+\n/,CODE_BLOCK_FENCED_R=/^\s*(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n *)+\n?/,CODE_BLOCK_R=/^(?: {4}[^\n]+\n*)+(?:\n *)+\n?/,CODE_INLINE_R=/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,CONSECUTIVE_NEWLINE_R=/^(?:\n *)*\n/,CR_NEWLINE_R=/\r\n?/g,FOOTNOTE_R=/^\[\^(.*)\](:.*)\n/,FOOTNOTE_REFERENCE_R=/^\[\^(.*)\]/,FORMFEED_R=/\f/g,GFM_TASK_R=/^\s*?\[(x|\s)\]/,HEADING_R=/^ *(#{1,6}) *([^\n]+)\n{0,2}/,HEADING_SETEXT_R=/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/,HTML_BLOCK_ELEMENT_R=/^ *(?!<[a-z][^ >/]* ?\/>)<([a-z][^ >/]*) ?([^>]*)\/{0}>\n?(\s*(?:<\1[^>]*?>[\s\S]*?<\/\1>|(?!<\1)[\s\S])*?)<\/\1>\n*/i,HTML_CHAR_CODE_R=/&([a-z]+);/g,HTML_COMMENT_R=/^<!--.*?-->/,HTML_CUSTOM_ATTR_R=/^(data|aria|x)-[a-z_][a-z\d_.-]*$/,HTML_SELF_CLOSING_ELEMENT_R=/^ *<([a-z][a-z0-9:]*)(?:\s+((?:<.*?>|[^>])*))?\/?>(?!<\/\1>)(\s*\n)?/i,INTERPOLATION_R=/^\{.*\}$/,LINK_AUTOLINK_BARE_URL_R=/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,LINK_AUTOLINK_MAILTO_R=/^<([^ >]+@[^ >]+)>/,LINK_AUTOLINK_R=/^<([^ >]+:\/[^ >]+)>/,LIST_ITEM_END_R=/ *\n+$/,LIST_LOOKBEHIND_R=/(?:^|\n)( *)$/,CAPTURE_LETTER_AFTER_HYPHEN=/-([a-z])?/gi,NP_TABLE_R=/^(.*\|?.*)\n *(\|? *[-:]+ *\|[-| :]*)\n((?:.*\|.*\n)*)\n?/,PARAGRAPH_R=/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/,REFERENCE_IMAGE_OR_LINK=/^\[([^\]]*)\]:\s*(\S+)\s*("([^"]*)")?/,REFERENCE_IMAGE_R=/^!\[([^\]]*)\] ?\[([^\]]*)\]/,REFERENCE_LINK_R=/^\[([^\]]*)\] ?\[([^\]]*)\]/,SQUARE_BRACKETS_R=/(\[|\])/g,SHOULD_RENDER_AS_BLOCK_R=/(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s)/,TAB_R=/\t/g,TABLE_SEPARATOR_R=/^ *\| */,TABLE_TRIM_PIPES=/(^ *\||\| *$)/g,TABLE_CELL_END_TRIM=/ *$/,TABLE_CENTER_ALIGN=/^ *:-+: *$/,TABLE_LEFT_ALIGN=/^ *:-+ *$/,TABLE_RIGHT_ALIGN=/^ *-+: *$/,TEXT_BOLD_R=/^([*_])\1((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1\1(?!\1)/,TEXT_EMPHASIZED_R=/^([*_])((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1(?!\1)/,TEXT_STRIKETHROUGHED_R=/^~~((?:\[.*?\]|<.*?>(?:.*?<.*?>)?|`.*?`|.)*?)~~/,TEXT_ESCAPED_R=/^\\([^0-9A-Za-z\s])/,TEXT_PLAIN_R=/^[\s\S]+?(?=[^0-9A-Z\s\u00c0-\uffff&;.()'"]|\d+\.|\n\n| {2,}\n|\w+:\S|$)/i,TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R=/(^\n+|\n+$|\s+$)/g,HTML_LEFT_TRIM_AMOUNT_R=/^([ \t]*)/,UNESCAPE_URL_R=/\\([^0-9A-Z\s])/gi,LIST_BULLET='(?:[*+-]|\\d+\\.)',LIST_ITEM_PREFIX='( *)((?:[*+-]|\\d+\\.)) +',LIST_ITEM_PREFIX_R=/^( *)((?:[*+-]|\d+\.)) +/,LIST_ITEM_R=/( *)((?:[*+-]|\d+\.)) +[^\n]*(?:\n(?!\1(?:[*+-]|\d+\.) )[^\n]*)*(\n|$)/gm,LIST_R=/^( *)((?:[*+-]|\d+\.)) [\s\S]+?(?:\n{2,}(?! )(?!\1(?:[*+-]|\d+\.) (?!(?:[*+-]|\d+\.) ))\n*|\s*\n*$)/,LINK_INSIDE='(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*',LINK_HREF_AND_TITLE='\\s*<?((?:[^\\s\\\\]|\\\\.)*?)>?(?:\\s+[\'"]([\\s\\S]*?)[\'"])?\\s*',LINK_R=/^\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*<?((?:[^\s\\]|\\.)*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*\)/,IMAGE_R=/^!\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*<?((?:[^\s\\]|\\.)*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*\)/,BLOCK_SYNTAXES=[BLOCKQUOTE_R,CODE_BLOCK_R,CODE_BLOCK_FENCED_R,HEADING_R,HEADING_SETEXT_R,HTML_BLOCK_ELEMENT_R,HTML_COMMENT_R,HTML_SELF_CLOSING_ELEMENT_R,LIST_ITEM_R,LIST_R,NP_TABLE_R,PARAGRAPH_R];function containsBlockSyntax(a){return BLOCK_SYNTAXES.some(function(b){return b.test(a)})}function slugify(a){return a.replace(/[ÀÁÂÃÄÅàáâãä忯]/g,'a').replace(/[çÇ]/g,'c').replace(/[ðÐ]/g,'d').replace(/[ÈÉÊËéèêë]/g,'e').replace(/[ÏïÎîÍíÌì]/g,'i').replace(/[Ññ]/g,'n').replace(/[øØœŒÕõÔôÓóÒò]/g,'o').replace(/[ÜüÛûÚúÙù]/g,'u').replace(/[ŸÿÝý]/g,'y').replace(/[^a-z0-9- ]/gi,'').replace(/ /gi,'-').toLowerCase()}function parseTableAlignCapture(a){if(TABLE_RIGHT_ALIGN.test(a))return'right';return TABLE_CENTER_ALIGN.test(a)?'center':TABLE_LEFT_ALIGN.test(a)?'left':null}function parseTableRow(a,b,c){var d=c.inTable;c.inTable=!0;var e=b(a.trim(),c);c.inTable=d;var f=[[]];return e.forEach(function(a,b){a.type==='tableSeparator'?b!==0&&b!==e.length-1&&f.push([]):(a.type==='text'&&(e[b+1]==null||e[b+1].type==='tableSeparator')&&(a.content=a.content.replace(TABLE_CELL_END_TRIM,'')),f[f.length-1].push(a))}),f}function parseTableAlign(a){var b=a.replace(TABLE_TRIM_PIPES,'').split('|');return b.map(parseTableAlignCapture)}function parseTableCells(a,b,c){var d=a.trim().split('\n');return d.map(function(a){return parseTableRow(a,b,c)})}function parseTable(a,b,c){c.inline=!0;var d=parseTableRow(a[1],b,c),e=parseTableAlign(a[2],b,c),f=parseTableCells(a[3],b,c);return c.inline=!1,{align:e,cells:f,header:d,type:'table'}}function getTableStyle(a,b){return a.align[b]==null?{}:{textAlign:a.align[b]}}function normalizeAttributeKey(a){var b=a.indexOf('-');return b!==-1&&a.match(HTML_CUSTOM_ATTR_R)===null&&(a=a.replace(CAPTURE_LETTER_AFTER_HYPHEN,function(a,b){return b.toUpperCase()})),a}function attributeValueToJSXPropValue(a,b){return a==='style'?b.split(/;\s?/).reduce(function(a,b){var c=b.slice(0,b.indexOf(':')),d=c.replace(/(-[a-z])/g,function(a){return a[1].toUpperCase()});return a[d]=b.slice(c.length+1).trim(),a},{}):a==='href'?sanitizeUrl(b):(b.match(INTERPOLATION_R)&&(b=b.slice(1,b.length-1)),b==='true'||b!=='false'&&b)}function normalizeWhitespace(a){return a.replace(CR_NEWLINE_R,'\n').replace(FORMFEED_R,'').replace(TAB_R,' ')}function parserFor(a){function b(d,e){for(var f=[],g='';d;)for(var l=0;l<c.length;){var h=c[l],j=a[h],k=j.match(d,e,g);if(k){var i=k[0];d=d.substring(i.length);var m=j.parse(k,b,e);m.type==null&&(m.type=h),f.push(m),g=i;break}l++}return f}var c=Object.keys(a);return process.env.NODE_ENV!=='production'&&c.forEach(function(b){var c=a[b].order;process.env.NODE_ENV==='production'||typeof c=='number'&&isFinite(c)||console.warn('markdown-to-jsx: Invalid order for rule `'+b+'`: '+c)}),c.sort(function(b,c){var d=a[b].order,e=a[c].order;return d===e?b<c?-1:1:d-e}),function(a,c){return b(normalizeWhitespace(a),c)}}function inlineRegex(a){return function(b,c){return c.inline?a.exec(b):null}}function simpleInlineRegex(a){return function(b,c){return c.inline||c.simple?a.exec(b):null}}function blockRegex(a){return function(b,c){return c.inline||c.simple?null:a.exec(b)}}function anyScopeRegex(a){return function(b){return a.exec(b)}}function reactFor(a){return function b(c,d){if(d=d||{},Array.isArray(c)){for(var e=d.key,f=[],g=!1,h=0;h<c.length;h++){d.key=h;var j=b(c[h],d),k=typeof j=='string';k&&g?f[f.length-1]+=j:f.push(j),g=k}return d.key=e,f}return a(c,b,d)}}function sanitizeUrl(a){try{var b=decodeURIComponent(a);if(b.match(/^\s*javascript:/i))return process.env.NODE_ENV!=='production'&&console.warn('Anchor URL contains an unsafe JavaScript expression, it will not be rendered.',b),null}catch(b){return process.env.NODE_ENV!=='production'&&console.warn('Anchor URL could not be decoded due to malformed syntax or characters, it will not be rendered.',a),null}return a}function unescapeUrl(a){return a.replace(UNESCAPE_URL_R,'$1')}function parseInline(a,b,c){var d=c.inline||!1,e=c.simple||!1;c.inline=!0,c.simple=!0;var f=a(b,c);return c.inline=d,c.simple=e,f}function parseSimpleInline(a,b,c){var d=c.inline||!1,e=c.simple||!1;c.inline=!1,c.simple=!0;var f=a(b,c);return c.inline=d,c.simple=e,f}function parseBlock(a,b,c){return c.inline=!1,a(b+'\n\n',c)}function parseCaptureInline(a,b,c){return{content:parseInline(b,a[1],c)}}function captureNothing(){return{}}function renderNothing(){return null}function ruleOutput(a){return function(b,c,d){return a[b.type].react(b,c,d)}}function cx(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return b.filter(Boolean).join(' ')}function get(a,b,c){for(var d=a,e=b.split('.');e.length&&(d=d[e[0]],d!==void 0);)e.shift();return d||c}function getTag(a,b){var c=get(b,a);return c?typeof c=='function'||(typeof c=='undefined'?'undefined':_typeof(c))==='object'&&'render'in c?c:get(b,a+'.component',a):a}var PARSE_PRIORITY_MAX=1,PARSE_PRIORITY_HIGH=2,PARSE_PRIORITY_MED=3,PARSE_PRIORITY_LOW=4,PARSE_PRIORITY_MIN=5;function compiler(a,b){function d(a,c){for(var d=get(b.overrides,a+'.props',{}),e=arguments.length,g=Array(e>2?e-2:0),h=2;h<e;h++)g[h-2]=arguments[h];return f.apply(void 0,[getTag(a,b.overrides),_extends({},c,d,{className:cx(c&&c.className,d.className)||void 0})].concat(g))}function c(a){var c=!1;b.forceInline?c=!0:!b.forceBlock&&(c=SHOULD_RENDER_AS_BLOCK_R.test(a)===!1);var e=k(j(c?a:a.replace(TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R,'')+'\n\n',{inline:c})),f=void 0;return e.length>1?f=c?d('span',{key:'outer'},e):d('div',{key:'outer'},e):e.length===1?(f=e[0],typeof f=='string'&&(f=d('span',{key:'outer'},f))):f=d('span',{key:'outer'}),f}function e(a){var b=a.match(ATTR_EXTRACTOR_R);return b?b.reduce(function(a,b,d){var e=b.indexOf('=');if(e!==-1){var f=normalizeAttributeKey(b.slice(0,e)).trim(),g=(0,_unquote2.default)(b.slice(e+1).trim()),h=ATTRIBUTE_TO_JSX_PROP_MAP[f]||f,i=a[h]=attributeValueToJSXPropValue(f,g);(HTML_BLOCK_ELEMENT_R.test(i)||HTML_SELF_CLOSING_ELEMENT_R.test(i))&&(a[h]=_react2.default.cloneElement(c(i.trim()),{key:d}))}else a[ATTRIBUTE_TO_JSX_PROP_MAP[b]||b]=!0;return a},{}):void 0}b=b||{},b.overrides=b.overrides||{},b.slugify=b.slugify||slugify,b.namedCodesToUnicode=b.namedCodesToUnicode?_extends({},namedCodesToUnicode,b.namedCodesToUnicode):namedCodesToUnicode;var f=b.createElement||_react2.default.createElement;if(process.env.NODE_ENV!=='production'){if(typeof a!='string')throw new Error('markdown-to-jsx: the first argument must be\n a string');if(Object.prototype.toString.call(b.overrides)!=='[object Object]')throw new Error('markdown-to-jsx: options.overrides (second argument property) must be\n undefined or an object literal with shape:\n {\n htmltagname: {\n component: string|ReactComponent(optional),\n props: object(optional)\n }\n }')}var g=[],h={},i={blockQuote:{match:blockRegex(BLOCKQUOTE_R),order:PARSE_PRIORITY_HIGH,parse:function d(a,b,c){return{content:b(a[0].replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R,''),c)}},react:function e(a,b,c){return d('blockquote',{key:c.key},b(a.content,c))}},breakLine:{match:anyScopeRegex(BREAK_LINE_R),order:PARSE_PRIORITY_HIGH,parse:captureNothing,react:function e(a,b,c){return d('br',{key:c.key})}},breakThematic:{match:blockRegex(BREAK_THEMATIC_R),order:PARSE_PRIORITY_HIGH,parse:captureNothing,react:function e(a,b,c){return d('hr',{key:c.key})}},codeBlock:{match:blockRegex(CODE_BLOCK_R),order:PARSE_PRIORITY_MAX,parse:function c(a){var b=a[0].replace(/^ {4}/gm,'').replace(/\n+$/,'');return{content:b,lang:void 0}},react:function e(a,b,c){return d('pre',{key:c.key},d('code',{className:a.lang?'lang-'+a.lang:''},a.content))}},codeFenced:{match:blockRegex(CODE_BLOCK_FENCED_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:a[3],lang:a[2]||void 0,type:'codeBlock'}}},codeInline:{match:simpleInlineRegex(CODE_INLINE_R),order:PARSE_PRIORITY_LOW,parse:function b(a){return{content:a[2]}},react:function e(a,b,c){return d('code',{key:c.key},a.content)}},footnote:{match:blockRegex(FOOTNOTE_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return g.push({footnote:a[2],identifier:a[1]}),{}},react:renderNothing},footnoteReference:{match:inlineRegex(FOOTNOTE_REFERENCE_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{content:a[1],target:'#'+a[1]}},react:function e(a,b,c){return d('a',{key:c.key,href:sanitizeUrl(a.target)},d('sup',{key:c.key},a.content))}},gfmTask:{match:inlineRegex(GFM_TASK_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{completed:a[1].toLowerCase()==='x'}},react:function e(a,b,c){return d('input',{checked:a.completed,key:c.key,readOnly:!0,type:'checkbox'})}},heading:{match:blockRegex(HEADING_R),order:PARSE_PRIORITY_HIGH,parse:function e(a,c,d){return{content:parseInline(c,a[2],d),id:b.slugify(a[2]),level:a[1].length}},react:function f(a,b,c){var e='h'+a.level;return d(e,{id:a.id,key:c.key},b(a.content,c))}},headingSetext:{match:blockRegex(HEADING_SETEXT_R),order:PARSE_PRIORITY_MAX,parse:function d(a,b,c){return{content:parseInline(b,a[1],c),level:a[2]==='='?1:2,type:'heading'}}},htmlBlock:{match:anyScopeRegex(HTML_BLOCK_ELEMENT_R),order:PARSE_PRIORITY_HIGH,parse:function l(a,b,c){var d=a[3].match(HTML_LEFT_TRIM_AMOUNT_R),f=d[1],g=new RegExp('^'+f,'gm'),h=a[3].replace(g,''),i=containsBlockSyntax(h)?parseBlock:parseInline,j=a[1].toLowerCase(),k=DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(j)!==-1;return{attrs:e(a[2]),content:k?a[3]:i(b,h,c),noInnerParse:k,tag:k?j:a[1]}},react:function e(a,b,c){return d(a.tag,_extends({key:c.key},a.attrs),a.noInnerParse?a.content:b(a.content,c))}},htmlComment:{match:anyScopeRegex(HTML_COMMENT_R),order:PARSE_PRIORITY_HIGH,parse:function a(){return{}},react:renderNothing},htmlSelfClosing:{match:anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{attrs:e(a[2]||''),tag:a[1]}},react:function e(a,b,c){return d(a.tag,_extends({},a.attrs,{key:c.key}))}},image:{match:simpleInlineRegex(IMAGE_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{alt:a[1],target:unescapeUrl(a[2]),title:a[3]}},react:function e(a,b,c){return d('img',{key:c.key,alt:a.alt||void 0,title:a.title||void 0,src:sanitizeUrl(a.target)})}},link:{match:inlineRegex(LINK_R,!1),order:PARSE_PRIORITY_LOW,parse:function d(a,b,c){return{content:parseSimpleInline(b,a[1],c),target:unescapeUrl(a[2]),title:a[3]}},react:function e(a,b,c){return d('a',{key:c.key,href:sanitizeUrl(a.target),title:a.title},b(a.content,c))}},linkAngleBraceStyleDetector:{match:inlineRegex(LINK_AUTOLINK_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:[{content:a[1],type:'text'}],target:a[1],type:'link'}}},linkBareUrlDetector:{match:inlineRegex(LINK_AUTOLINK_BARE_URL_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:[{content:a[1],type:'text'}],target:a[1],title:void 0,type:'link'}}},linkMailtoDetector:{match:inlineRegex(LINK_AUTOLINK_MAILTO_R),order:PARSE_PRIORITY_MAX,parse:function d(a){var b=a[1],c=a[1];return AUTOLINK_MAILTO_CHECK_R.test(c)||(c='mailto:'+c),{content:[{content:b.replace('mailto:',''),type:'text'}],target:c,type:'link'}}},list:{match:function f(a,b,c){var d=LIST_LOOKBEHIND_R.exec(c),e=b._list||!b.inline;return d&&e?(a=d[1]+a,LIST_R.exec(a)):null},order:PARSE_PRIORITY_HIGH,parse:function j(a,b,c){var d=a[2],e=d.length>1,f=e?+d:void 0,g=a[0].replace(BLOCK_END_R,'\n').match(LIST_ITEM_R),h=!1,i=g.map(function(a,d){var e=LIST_ITEM_PREFIX_R.exec(a)[0].length,f=new RegExp('^ {1,'+e+'}','gm'),i=a.replace(f,'').replace(LIST_ITEM_PREFIX_R,''),j=d===g.length-1,k=i.indexOf('\n\n')!==-1,l=k||j&&h;h=l;var m=c.inline,n=c._list;c._list=!0;var o;l?(c.inline=!1,o=i.replace(LIST_ITEM_END_R,'\n\n')):(c.inline=!0,o=i.replace(LIST_ITEM_END_R,''));var p=b(o,c);return c.inline=m,c._list=n,p});return{items:i,ordered:e,start:f}},react:function f(a,b,c){var e=a.ordered?'ol':'ul';return d(e,{key:c.key,start:a.start},a.items.map(function(a,e){return d('li',{key:e},b(a,c))}))}},newlineCoalescer:{match:blockRegex(CONSECUTIVE_NEWLINE_R),order:PARSE_PRIORITY_LOW,parse:captureNothing,react:function a(){return'\n'}},paragraph:{match:blockRegex(PARAGRAPH_R),order:PARSE_PRIORITY_LOW,parse:parseCaptureInline,react:function e(a,b,c){return d('p',{key:c.key},b(a.content,c))}},ref:{match:inlineRegex(REFERENCE_IMAGE_OR_LINK),order:PARSE_PRIORITY_MAX,parse:function b(a){return h[a[1]]={target:a[2],title:a[4]},{}},react:renderNothing},refImage:{match:simpleInlineRegex(REFERENCE_IMAGE_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{alt:a[1]||void 0,ref:a[2]}},react:function e(a,b,c){return d('img',{key:c.key,alt:a.alt,src:sanitizeUrl(h[a.ref].target),title:h[a.ref].title})}},refLink:{match:inlineRegex(REFERENCE_LINK_R),order:PARSE_PRIORITY_MAX,parse:function d(a,b,c){return{content:b(a[1],c),fallbackContent:b(a[0].replace(SQUARE_BRACKETS_R,'\\$1'),c),ref:a[2]}},react:function e(a,b,c){return h[a.ref]?d('a',{key:c.key,href:sanitizeUrl(h[a.ref].target),title:h[a.ref].title},b(a.content,c)):d('span',{key:c.key},b(a.fallbackContent,c))}},table:{match:blockRegex(NP_TABLE_R),order:PARSE_PRIORITY_HIGH,parse:parseTable,react:function f(a,b,e){return d('table',{key:e.key},d('thead',null,d('tr',null,a.header.map(function(c,f){return d('th',{key:f,style:getTableStyle(a,f)},b(c,e))}))),d('tbody',null,a.cells.map(function(c,f){return d('tr',{key:f},c.map(function(f,g){return d('td',{key:g,style:getTableStyle(a,g)},b(f,e))}))})))}},tableSeparator:{match:function c(a,b){return b.inTable?TABLE_SEPARATOR_R.exec(a):null},order:PARSE_PRIORITY_HIGH,parse:function a(){return{type:'tableSeparator'}},react:function a(){return' | '}},text:{match:anyScopeRegex(TEXT_PLAIN_R),order:PARSE_PRIORITY_MIN,parse:function c(a){return{content:a[0].replace(HTML_CHAR_CODE_R,function(a,c){return b.namedCodesToUnicode[c]?b.namedCodesToUnicode[c]:a})}},react:function b(a){return a.content}},textBolded:{match:simpleInlineRegex(TEXT_BOLD_R),order:PARSE_PRIORITY_MED,parse:function d(a,b,c){return{content:b(a[2],c)}},react:function e(a,b,c){return d('strong',{key:c.key},b(a.content,c))}},textEmphasized:{match:simpleInlineRegex(TEXT_EMPHASIZED_R),order:PARSE_PRIORITY_LOW,parse:function d(a,b,c){return{content:b(a[2],c)}},react:function e(a,b,c){return d('em',{key:c.key},b(a.content,c))}},textEscaped:{match:simpleInlineRegex(TEXT_ESCAPED_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{content:a[1],type:'text'}}},textStrikethroughed:{match:simpleInlineRegex(TEXT_STRIKETHROUGHED_R),order:PARSE_PRIORITY_LOW,parse:parseCaptureInline,react:function e(a,b,c){return d('del',{key:c.key},b(a.content,c))}}},j=parserFor(i),k=reactFor(ruleOutput(i)),l=c(a);return g.length&&l.props.children.push(d('footer',{key:'footer'},g.map(function(a){return d('div',{id:a.identifier,key:a.identifier},a.identifier,k(j(a.footnote,{inline:!0})))}))),l}function Markdown(a){var b=a.children,c=a.options,d=_objectWithoutProperties(a,['children','options']);return _react2.default.cloneElement(compiler(b,c),d)}if(process.env.NODE_ENV!=='production'){var PropTypes=require('prop-types');Markdown.propTypes={children:PropTypes.string.isRequired,options:PropTypes.object}}
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=cjs.js.map
|
package/dist/cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.js"],"names":[],"mappings":"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","file":"cjs.js","sourcesContent":["/* @jsx h */\n/**\n * markdown-to-jsx@6 is a fork of [simple-markdown v0.2.2](https://github.com/Khan/simple-markdown)\n * from Khan Academy. Thank you Khan devs for making such an awesome and extensible\n * parsing infra... without it, half of the optimizations here wouldn't be feasible. 🙏🏼\n */\nimport React from 'react';\nimport unquote from 'unquote';\n\n/** TODO: Drop for React 16? */\nconst ATTRIBUTE_TO_JSX_PROP_MAP = {\n accesskey: 'accessKey',\n allowfullscreen: 'allowFullScreen',\n allowtransparency: 'allowTransparency',\n autocomplete: 'autoComplete',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n charset: 'charSet',\n class: 'className',\n classid: 'classId',\n colspan: 'colSpan',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n crossorigin: 'crossOrigin',\n enctype: 'encType',\n for: 'htmlFor',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formmethod: 'formMethod',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n hreflang: 'hrefLang',\n inputmode: 'inputMode',\n keyparams: 'keyParams',\n keytype: 'keyType',\n marginheight: 'marginHeight',\n marginwidth: 'marginWidth',\n maxlength: 'maxLength',\n mediagroup: 'mediaGroup',\n minlength: 'minLength',\n novalidate: 'noValidate',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n rowspan: 'rowSpan',\n spellcheck: 'spellCheck',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n tabindex: 'tabIndex',\n usemap: 'useMap',\n};\n\nconst namedCodesToUnicode = {\n amp: '\\u0026',\n apos: '\\u0027',\n gt: '\\u003e',\n lt: '\\u003c',\n nbsp: '\\u00a0',\n quot: '\\u201c',\n};\n\nconst DO_NOT_PROCESS_HTML_ELEMENTS = ['style', 'script'];\n\n/**\n * the attribute extractor regex looks for a valid attribute name,\n * followed by an equal sign (whitespace around the equal sign is allowed), followed\n * by one of the following:\n *\n * 1. a single quote-bounded string, e.g. 'foo'\n * 2. a double quote-bounded string, e.g. \"bar\"\n * 3. an interpolation, e.g. {something}\n *\n * JSX can be be interpolated into itself and is passed through the compiler using\n * the same options and setup as the current run.\n *\n * <Something children={<SomeOtherThing />} />\n * ==================\n * ↳ children: [<SomeOtherThing />]\n *\n * Otherwise, interpolations are handled as strings or simple booleans\n * unless HTML syntax is detected.\n *\n * <Something color={green} disabled={true} />\n * ===== ====\n * ↓ ↳ disabled: true\n * ↳ color: \"green\"\n *\n * Numbers are not parsed at this time due to complexities around int, float,\n * and the upcoming bigint functionality that would make handling it unwieldy.\n * Parse the string in your component as desired.\n *\n * <Something someBigNumber={123456789123456789} />\n * ==================\n * ↳ someBigNumber: \"123456789123456789\"\n */\nconst ATTR_EXTRACTOR_R = /([-A-Z0-9_:]+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|(?:\\{((?:\\\\.|{[^}]*?}|[^}])*)\\})))?/gi;\n\n/** TODO: Write explainers for each of these */\n\nconst AUTOLINK_MAILTO_CHECK_R = /mailto:/i;\nconst BLOCK_END_R = /\\n{2,}$/;\nconst BLOCKQUOTE_R = /^( *>[^\\n]+(\\n[^\\n]+)*\\n*)+\\n{2,}/;\nconst BLOCKQUOTE_TRIM_LEFT_MULTILINE_R = /^ *> ?/gm;\nconst BREAK_LINE_R = /^ {2,}\\n/;\nconst BREAK_THEMATIC_R = /^(?:( *[-*_]) *){3,}(?:\\n *)+\\n/;\nconst CODE_BLOCK_FENCED_R = /^\\s*(`{3,}|~{3,}) *(\\S+)? *\\n([\\s\\S]+?)\\s*\\1 *(?:\\n *)+\\n?/;\nconst CODE_BLOCK_R = /^(?: {4}[^\\n]+\\n*)+(?:\\n *)+\\n?/;\nconst CODE_INLINE_R = /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/;\nconst CONSECUTIVE_NEWLINE_R = /^(?:\\n *)*\\n/;\nconst CR_NEWLINE_R = /\\r\\n?/g;\nconst FOOTNOTE_R = /^\\[\\^(.*)\\](:.*)\\n/;\nconst FOOTNOTE_REFERENCE_R = /^\\[\\^(.*)\\]/;\nconst FORMFEED_R = /\\f/g;\nconst GFM_TASK_R = /^\\s*?\\[(x|\\s)\\]/;\nconst HEADING_R = /^ *(#{1,6}) *([^\\n]+)\\n{0,2}/;\nconst HEADING_SETEXT_R = /^([^\\n]+)\\n *(=|-){3,} *(?:\\n *)+\\n/;\n\n/**\n * Explanation:\n *\n * 1. Look for a starting tag, preceeded by any amount of spaces\n * ^ *<\n *\n * 2. Capture the tag name (capture 1)\n * ([^ >/]+)\n *\n * 3. Ignore a space after the starting tag and capture the attribute portion of the tag (capture 2)\n * ?([^>]*)\\/{0}>\n *\n * 4. Ensure a matching closing tag is present in the rest of the input string\n * (?=[\\s\\S]*<\\/\\1>)\n *\n * 5. Capture everything until the matching closing tag -- this might include additional pairs\n * of the same tag type found in step 2 (capture 3)\n * ((?:[\\s\\S]*?(?:<\\1[^>]*>[\\s\\S]*?<\\/\\1>)*[\\s\\S]*?)*?)<\\/\\1>\n *\n * 6. Capture excess newlines afterward\n * \\n*\n */\nconst HTML_BLOCK_ELEMENT_R = /^ *(?!<[a-z][^ >/]* ?\\/>)<([a-z][^ >/]*) ?([^>]*)\\/{0}>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1)[\\s\\S])*?)<\\/\\1>\\n*/i;\n\nconst HTML_CHAR_CODE_R = /&([a-z]+);/g;\n\nconst HTML_COMMENT_R = /^<!--.*?-->/;\n\n/**\n * borrowed from React 15(https://github.com/facebook/react/blob/894d20744cba99383ffd847dbd5b6e0800355a5c/src/renderers/dom/shared/HTMLDOMPropertyConfig.js)\n */\nconst HTML_CUSTOM_ATTR_R = /^(data|aria|x)-[a-z_][a-z\\d_.-]*$/;\n\nconst HTML_SELF_CLOSING_ELEMENT_R = /^ *<([a-z][a-z0-9:]*)(?:\\s+((?:<.*?>|[^>])*))?\\/?>(?!<\\/\\1>)(\\s*\\n)?/i;\nconst INTERPOLATION_R = /^\\{.*\\}$/;\nconst LINK_AUTOLINK_BARE_URL_R = /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/;\nconst LINK_AUTOLINK_MAILTO_R = /^<([^ >]+@[^ >]+)>/;\nconst LINK_AUTOLINK_R = /^<([^ >]+:\\/[^ >]+)>/;\nconst LIST_ITEM_END_R = / *\\n+$/;\nconst LIST_LOOKBEHIND_R = /(?:^|\\n)( *)$/;\nconst CAPTURE_LETTER_AFTER_HYPHEN = /-([a-z])?/gi;\nconst NP_TABLE_R = /^(.*\\|?.*)\\n *(\\|? *[-:]+ *\\|[-| :]*)\\n((?:.*\\|.*\\n)*)\\n?/;\nconst PARAGRAPH_R = /^((?:[^\\n]|\\n(?! *\\n))+)(?:\\n *)+\\n/;\nconst REFERENCE_IMAGE_OR_LINK = /^\\[([^\\]]*)\\]:\\s*(\\S+)\\s*(\"([^\"]*)\")?/;\nconst REFERENCE_IMAGE_R = /^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nconst REFERENCE_LINK_R = /^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nconst SQUARE_BRACKETS_R = /(\\[|\\])/g;\nconst SHOULD_RENDER_AS_BLOCK_R = /(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s)/;\nconst TAB_R = /\\t/g;\nconst TABLE_TRIM_PIPES = /(^ *\\||\\| *$)/g;\nconst TABLE_CENTER_ALIGN = /^ *:-+: *$/;\nconst TABLE_LEFT_ALIGN = /^ *:-+ *$/;\nconst TABLE_RIGHT_ALIGN = /^ *-+: *$/;\nconst TABLE_ROW_SPLIT = / *\\| */;\n\nconst TEXT_BOLD_R = /^([*_])\\1((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\\1\\1(?!\\1)/;\nconst TEXT_EMPHASIZED_R = /^([*_])((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\\1(?!\\1)/;\nconst TEXT_STRIKETHROUGHED_R = /^~~((?:\\[.*?\\]|<.*?>(?:.*?<.*?>)?|`.*?`|.)*?)~~/;\n\nconst TEXT_ESCAPED_R = /^\\\\([^0-9A-Za-z\\s])/;\nconst TEXT_PLAIN_R = /^[\\s\\S]+?(?=[^0-9A-Z\\s\\u00c0-\\uffff&;.()'\"]|\\d+\\.|\\n\\n| {2,}\\n|\\w+:\\S|$)/i;\nconst TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R = /(^\\n+|(\\n|\\s)+$)/g;\n\nconst HTML_LEFT_TRIM_AMOUNT_R = /^([ \\t]*)/;\n\nconst UNESCAPE_URL_R = /\\\\([^0-9A-Z\\s])/gi;\n\n// recognize a `*` `-`, `+`, `1.`, `2.`... list bullet\nconst LIST_BULLET = '(?:[*+-]|\\\\d+\\\\.)';\n\n// recognize the start of a list item:\n// leading space plus a bullet plus a space (` * `)\nconst LIST_ITEM_PREFIX = '( *)(' + LIST_BULLET + ') +';\nconst LIST_ITEM_PREFIX_R = new RegExp('^' + LIST_ITEM_PREFIX);\n\n// recognize an individual list item:\n// * hi\n// this is part of the same item\n//\n// as is this, which is a new paragraph in the same item\n//\n// * but this is not part of the same item\nconst LIST_ITEM_R = new RegExp(\n LIST_ITEM_PREFIX +\n '[^\\\\n]*(?:\\\\n' +\n '(?!\\\\1' +\n LIST_BULLET +\n ' )[^\\\\n]*)*(\\\\n|$)',\n 'gm'\n);\n\n// check whether a list item has paragraphs: if it does,\n// we leave the newlines at the end\nconst LIST_R = new RegExp(\n '^( *)(' +\n LIST_BULLET +\n ') ' +\n '[\\\\s\\\\S]+?(?:\\\\n{2,}(?! )' +\n '(?!\\\\1' +\n LIST_BULLET +\n ' (?!' +\n LIST_BULLET +\n ' ))\\\\n*' +\n // the \\\\s*$ here is so that we can parse the inside of nested\n // lists, where our content might end before we receive two `\\n`s\n '|\\\\s*\\\\n*$)'\n);\n\nconst LINK_INSIDE = '(?:\\\\[[^\\\\]]*\\\\]|[^\\\\[\\\\]]|\\\\](?=[^\\\\[]*\\\\]))*';\nconst LINK_HREF_AND_TITLE =\n '\\\\s*<?((?:[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+[\\'\"]([\\\\s\\\\S]*?)[\\'\"])?\\\\s*';\n\nconst LINK_R = new RegExp(\n '^\\\\[(' + LINK_INSIDE + ')\\\\]\\\\(' + LINK_HREF_AND_TITLE + '\\\\)'\n);\n\nconst IMAGE_R = new RegExp(\n '^!\\\\[(' + LINK_INSIDE + ')\\\\]\\\\(' + LINK_HREF_AND_TITLE + '\\\\)'\n);\n\nconst BLOCK_SYNTAXES = [\n BLOCKQUOTE_R,\n CODE_BLOCK_R,\n CODE_BLOCK_FENCED_R,\n HEADING_R,\n HEADING_SETEXT_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_COMMENT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n LIST_ITEM_R,\n LIST_R,\n NP_TABLE_R,\n PARAGRAPH_R,\n];\n\nfunction containsBlockSyntax(input) {\n return BLOCK_SYNTAXES.some(r => r.test(input));\n}\n\n// based on https://stackoverflow.com/a/18123682/1141611\n// not complete, but probably good enough\nfunction slugify(str) {\n return str\n .replace(/[ÀÁÂÃÄÅàáâãä忯]/g, 'a')\n .replace(/[çÇ]/g, 'c')\n .replace(/[ðÐ]/g, 'd')\n .replace(/[ÈÉÊËéèêë]/g, 'e')\n .replace(/[ÏïÎîÍíÌì]/g, 'i')\n .replace(/[Ññ]/g, 'n')\n .replace(/[øØœŒÕõÔôÓóÒò]/g, 'o')\n .replace(/[ÜüÛûÚúÙù]/g, 'u')\n .replace(/[ŸÿÝý]/g, 'y')\n .replace(/[^a-z0-9- ]/gi, '')\n .replace(/ /gi, '-')\n .toLowerCase();\n}\n\nfunction parseTableAlignCapture(alignCapture) {\n if (TABLE_RIGHT_ALIGN.test(alignCapture)) {\n return 'right';\n } else if (TABLE_CENTER_ALIGN.test(alignCapture)) {\n return 'center';\n } else if (TABLE_LEFT_ALIGN.test(alignCapture)) {\n return 'left';\n }\n\n return null;\n}\n\nfunction parseTableHeader(capture, parse, state) {\n const headerText = capture[1]\n .replace(TABLE_TRIM_PIPES, '')\n .trim()\n .split(TABLE_ROW_SPLIT);\n\n return headerText.map(function(text) {\n return parse(text, state);\n });\n}\n\nfunction parseTableAlign(capture /*, parse, state*/) {\n const alignText = capture[2]\n .replace(TABLE_TRIM_PIPES, '')\n .trim()\n .split(TABLE_ROW_SPLIT);\n\n return alignText.map(parseTableAlignCapture);\n}\n\nfunction parseTableCells(capture, parse, state) {\n const rowsText = capture[3]\n .trim()\n .split('\\n');\n\n return rowsText.map(function(rowText) {\n return rowText\n .replace(TABLE_TRIM_PIPES, '')\n .split(TABLE_ROW_SPLIT)\n .map(function(text) {\n return parse(text.trim(), state);\n });\n });\n}\n\nfunction parseTable(capture, parse, state) {\n state.inline = true;\n const header = parseTableHeader(capture, parse, state);\n const align = parseTableAlign(capture, parse, state);\n const cells = parseTableCells(capture, parse, state);\n state.inline = false;\n\n return {\n align: align,\n cells: cells,\n header: header,\n type: 'table',\n };\n}\n\nfunction getTableStyle(node, colIndex) {\n return node.align[colIndex] == null\n ? {}\n : {\n textAlign: node.align[colIndex],\n };\n}\n\n/** TODO: remove for react 16 */\nfunction normalizeAttributeKey(key) {\n const hyphenIndex = key.indexOf('-');\n\n if (hyphenIndex !== -1 && key.match(HTML_CUSTOM_ATTR_R) === null) {\n key = key.replace(CAPTURE_LETTER_AFTER_HYPHEN, function(_, letter) {\n return letter.toUpperCase();\n });\n }\n\n return key;\n}\n\nfunction attributeValueToJSXPropValue(key, value) {\n if (key === 'style') {\n return value.split(/;\\s?/).reduce(function(styles, kvPair) {\n const key = kvPair.slice(0, kvPair.indexOf(':'));\n\n // snake-case to camelCase\n // also handles PascalCasing vendor prefixes\n const camelCasedKey = key.replace(/(-[a-z])/g, substr =>\n substr[1].toUpperCase()\n );\n\n // key.length + 1 to skip over the colon\n styles[camelCasedKey] = kvPair.slice(key.length + 1).trim();\n\n return styles;\n }, {});\n } else if (value.match(INTERPOLATION_R)) {\n // return as a string and let the consumer decide what to do with it\n value = value.slice(1, value.length - 1);\n }\n\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n }\n\n return value;\n}\n\nfunction normalizeWhitespace(source) {\n return source\n .replace(CR_NEWLINE_R, '\\n')\n .replace(FORMFEED_R, '')\n .replace(TAB_R, ' ');\n}\n\n/**\n * Creates a parser for a given set of rules, with the precedence\n * specified as a list of rules.\n *\n * @rules: an object containing\n * rule type -> {match, order, parse} objects\n * (lower order is higher precedence)\n * (Note: `order` is added to defaultRules after creation so that\n * the `order` of defaultRules in the source matches the `order`\n * of defaultRules in terms of `order` fields.)\n *\n * @returns The resulting parse function, with the following parameters:\n * @source: the input source string to be parsed\n * @state: an optional object to be threaded through parse\n * calls. Allows clients to add stateful operations to\n * parsing, such as keeping track of how many levels deep\n * some nesting is. For an example use-case, see passage-ref\n * parsing in src/widgets/passage/passage-markdown.jsx\n */\nfunction parserFor(rules) {\n // Sorts rules in order of increasing order, then\n // ascending rule name in case of ties.\n let ruleList = Object.keys(rules);\n\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n ruleList.forEach(function(type) {\n let order = rules[type].order;\n if (\n process.env.NODE_ENV !== 'production' &&\n (typeof order !== 'number' || !isFinite(order))\n ) {\n console.warn(\n 'markdown-to-jsx: Invalid order for rule `' + type + '`: ' + order\n );\n }\n });\n }\n\n ruleList.sort(function(typeA, typeB) {\n let orderA = rules[typeA].order;\n let orderB = rules[typeB].order;\n\n // First sort based on increasing order\n if (orderA !== orderB) {\n return orderA - orderB;\n\n // Then based on increasing unicode lexicographic ordering\n } else if (typeA < typeB) {\n return -1;\n }\n\n return 1;\n });\n\n function nestedParse(source, state) {\n let result = [];\n\n // We store the previous capture so that match functions can\n // use some limited amount of lookbehind. Lists use this to\n // ensure they don't match arbitrary '- ' or '* ' in inline\n // text (see the list rule for more information).\n let prevCapture = '';\n while (source) {\n let i = 0;\n while (i < ruleList.length) {\n const ruleType = ruleList[i];\n const rule = rules[ruleType];\n const capture = rule.match(source, state, prevCapture);\n\n if (capture) {\n const currCaptureString = capture[0];\n source = source.substring(currCaptureString.length);\n const parsed = rule.parse(capture, nestedParse, state);\n\n // We also let rules override the default type of\n // their parsed node if they would like to, so that\n // there can be a single output function for all links,\n // even if there are several rules to parse them.\n if (parsed.type == null) {\n parsed.type = ruleType;\n }\n\n result.push(parsed);\n\n prevCapture = currCaptureString;\n break;\n }\n\n i++;\n }\n }\n\n return result;\n }\n\n return function outerParse(source, state) {\n return nestedParse(normalizeWhitespace(source), state);\n };\n}\n\n// Creates a match function for an inline scoped or simple element from a regex\nfunction inlineRegex(regex) {\n return function match(source, state) {\n if (state.inline) {\n return regex.exec(source);\n } else {\n return null;\n }\n };\n}\n\n// basically any inline element except links\nfunction simpleInlineRegex(regex) {\n return function match(source, state) {\n if (state.inline || state.simple) {\n return regex.exec(source);\n } else {\n return null;\n }\n };\n}\n\n// Creates a match function for a block scoped element from a regex\nfunction blockRegex(regex) {\n return function match(source, state) {\n if (state.inline || state.simple) {\n return null;\n } else {\n return regex.exec(source);\n }\n };\n}\n\n// Creates a match function from a regex, ignoring block/inline scope\nfunction anyScopeRegex(regex) {\n return function match(source /*, state*/) {\n return regex.exec(source);\n };\n}\n\nfunction reactFor(outputFunc) {\n return function nestedReactOutput(ast, state) {\n state = state || {};\n if (Array.isArray(ast)) {\n const oldKey = state.key;\n const result = [];\n\n // map nestedOutput over the ast, except group any text\n // nodes together into a single string output.\n let lastWasString = false;\n\n for (let i = 0; i < ast.length; i++) {\n state.key = i;\n\n const nodeOut = nestedReactOutput(ast[i], state);\n const isString = typeof nodeOut === 'string';\n\n if (isString && lastWasString) {\n result[result.length - 1] += nodeOut;\n } else {\n result.push(nodeOut);\n }\n\n lastWasString = isString;\n }\n\n state.key = oldKey;\n\n return result;\n }\n\n return outputFunc(ast, nestedReactOutput, state);\n };\n}\n\nfunction sanitizeUrl(url) {\n try {\n const decoded = decodeURIComponent(url);\n\n if (decoded.match(/^\\s*javascript:/i)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Anchor URL contains an unsafe JavaScript expression, it will not be rendered.',\n decoded\n );\n }\n\n return null;\n }\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Anchor URL could not be decoded due to malformed syntax or characters, it will not be rendered.',\n url\n );\n }\n\n // decodeURIComponent sometimes throws a URIError\n // See `decodeURIComponent('a%AFc');`\n // http://stackoverflow.com/questions/9064536/javascript-decodeuricomponent-malformed-uri-exception\n return null;\n }\n\n return url;\n}\n\nfunction unescapeUrl(rawUrlString) {\n return rawUrlString.replace(UNESCAPE_URL_R, '$1');\n}\n\n/**\n * Everything inline, including links.\n */\nfunction parseInline(parse, content, state) {\n const isCurrentlyInline = state.inline || false;\n const isCurrentlySimple = state.simple || false;\n state.inline = true;\n state.simple = true;\n const result = parse(content, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n return result;\n}\n\n/**\n * Anything inline that isn't a link.\n */\nfunction parseSimpleInline(parse, content, state) {\n const isCurrentlyInline = state.inline || false;\n const isCurrentlySimple = state.simple || false;\n state.inline = false;\n state.simple = true;\n const result = parse(content, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n return result;\n}\n\nfunction parseBlock(parse, content, state) {\n state.inline = false;\n return parse(content + '\\n\\n', state);\n}\n\nfunction parseCaptureInline(capture, parse, state) {\n return {\n content: parseInline(parse, capture[1], state),\n };\n}\n\nfunction captureNothing() {\n return {};\n}\n\nfunction renderNothing() {\n return null;\n}\n\nfunction ruleOutput(rules) {\n return function nestedRuleOutput(ast, outputFunc, state) {\n return rules[ast.type].react(ast, outputFunc, state);\n };\n}\n\nfunction cx(...args) {\n return args.filter(Boolean).join(' ');\n}\n\nfunction get(src, path, fb) {\n let ptr = src;\n const frags = path.split('.');\n\n while (frags.length) {\n ptr = ptr[frags[0]];\n\n if (ptr === undefined) break;\n else frags.shift();\n }\n\n return ptr || fb;\n}\n\nfunction getTag(tag, overrides) {\n const override = get(overrides, tag);\n\n if (!override) return tag;\n\n return typeof override === 'function' || (typeof override === 'object' && 'render' in override)\n ? override\n : get(overrides, `${tag}.component`, tag);\n}\n\n/**\n * anything that must scan the tree before everything else\n */\nconst PARSE_PRIORITY_MAX = 1;\n\n/**\n * scans for block-level constructs\n */\nconst PARSE_PRIORITY_HIGH = 2;\n\n/**\n * inline w/ more priority than other inline\n */\nconst PARSE_PRIORITY_MED = 3;\n\n/**\n * inline elements\n */\nconst PARSE_PRIORITY_LOW = 4;\n\n/**\n * bare text and stuff that is considered leftovers\n */\nconst PARSE_PRIORITY_MIN = 5;\n\nexport function compiler(markdown, options) {\n options = options || {};\n options.overrides = options.overrides || {};\n options.slugify = options.slugify || slugify;\n\n const createElementFn = options.createElement || React.createElement;\n\n // eslint-disable-next-line no-unused-vars\n function h(tag, props, ...children) {\n const overrideProps = get(options.overrides, `${tag}.props`, {});\n\n return createElementFn(\n getTag(tag, options.overrides),\n {\n ...props,\n ...overrideProps,\n className:\n cx(props && props.className, overrideProps.className) || undefined,\n },\n ...children\n );\n }\n\n function compile(input) {\n let inline = false;\n\n if (options.forceInline) {\n inline = true;\n } else if (!options.forceBlock) {\n /**\n * should not contain any block-level markdown like newlines, lists, headings,\n * thematic breaks, blockquotes, tables, etc\n */\n inline = SHOULD_RENDER_AS_BLOCK_R.test(input) === false;\n }\n\n const arr = emitter(\n parser(\n inline\n ? input\n : `${input.replace(TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R, '')}\\n\\n`,\n { inline }\n )\n );\n\n let jsx;\n if (arr.length > 1) {\n jsx = inline ? <span key=\"outer\">{arr}</span> : <div key=\"outer\">{arr}</div>;\n } else if (arr.length === 1) {\n jsx = arr[0];\n\n // TODO: remove this for React 16\n if (typeof jsx === 'string') {\n jsx = <span key=\"outer\">{jsx}</span>;\n }\n } else {\n // TODO: return null for React 16\n jsx = <span key=\"outer\" />;\n }\n\n return jsx;\n }\n\n function attrStringToMap(str) {\n const attributes = str.match(ATTR_EXTRACTOR_R);\n\n return attributes\n ? attributes.reduce(function(map, raw, index) {\n const delimiterIdx = raw.indexOf('=');\n\n if (delimiterIdx !== -1) {\n const key = normalizeAttributeKey(\n raw.slice(0, delimiterIdx)\n ).trim();\n const value = unquote(raw.slice(delimiterIdx + 1).trim());\n\n const mappedKey = ATTRIBUTE_TO_JSX_PROP_MAP[key] || key;\n const normalizedValue = (map[\n mappedKey\n ] = attributeValueToJSXPropValue(key, value));\n\n if (\n HTML_BLOCK_ELEMENT_R.test(normalizedValue) ||\n HTML_SELF_CLOSING_ELEMENT_R.test(normalizedValue)\n ) {\n map[mappedKey] = React.cloneElement(\n compile(normalizedValue.trim()),\n { key: index }\n );\n }\n } else {\n map[ATTRIBUTE_TO_JSX_PROP_MAP[raw] || raw] = true;\n }\n\n return map;\n }, {})\n : undefined;\n }\n\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n if (typeof markdown !== 'string') {\n throw new Error(`markdown-to-jsx: the first argument must be\n a string`);\n }\n\n if (\n Object.prototype.toString.call(options.overrides) !== '[object Object]'\n ) {\n throw new Error(`markdown-to-jsx: options.overrides (second argument property) must be\n undefined or an object literal with shape:\n {\n htmltagname: {\n component: string|ReactComponent(optional),\n props: object(optional)\n }\n }`);\n }\n }\n\n const footnotes = [];\n const refs = {};\n\n /**\n * each rule's react() output function goes through our custom h() JSX pragma;\n * this allows the override functionality to be automatically applied\n */\n const rules = {\n blockQuote: {\n match: blockRegex(BLOCKQUOTE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n return {\n content: parse(\n capture[0].replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, ''),\n state\n ),\n };\n },\n react(node, output, state) {\n return (\n <blockquote key={state.key}>{output(node.content, state)}</blockquote>\n );\n },\n },\n\n breakLine: {\n match: anyScopeRegex(BREAK_LINE_R),\n order: PARSE_PRIORITY_HIGH,\n parse: captureNothing,\n react(_, __, state) {\n return <br key={state.key} />;\n },\n },\n\n breakThematic: {\n match: blockRegex(BREAK_THEMATIC_R),\n order: PARSE_PRIORITY_HIGH,\n parse: captureNothing,\n react(_, __, state) {\n return <hr key={state.key} />;\n },\n },\n\n codeBlock: {\n match: blockRegex(CODE_BLOCK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n let content = capture[0].replace(/^ {4}/gm, '').replace(/\\n+$/, '');\n return {\n content: content,\n lang: undefined,\n };\n },\n\n react(node, output, state) {\n return (\n <pre key={state.key}>\n <code className={node.lang ? `lang-${node.lang}` : ''}>\n {node.content}\n </code>\n </pre>\n );\n },\n },\n\n codeFenced: {\n match: blockRegex(CODE_BLOCK_FENCED_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[3],\n lang: capture[2] || undefined,\n type: 'codeBlock',\n };\n },\n },\n\n codeInline: {\n match: simpleInlineRegex(CODE_INLINE_R),\n order: PARSE_PRIORITY_LOW,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[2],\n };\n },\n react(node, output, state) {\n return <code key={state.key}>{node.content}</code>;\n },\n },\n\n /**\n * footnotes are emitted at the end of compilation in a special <footer> block\n */\n footnote: {\n match: blockRegex(FOOTNOTE_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n footnotes.push({\n footnote: capture[2],\n identifier: capture[1],\n });\n\n return {};\n },\n react: renderNothing,\n },\n\n footnoteReference: {\n match: inlineRegex(FOOTNOTE_REFERENCE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse*/) {\n return {\n content: capture[1],\n target: `#${capture[1]}`,\n };\n },\n react(node, output, state) {\n return (\n <a key={state.key} href={sanitizeUrl(node.target)}>\n <sup key={state.key}>{node.content}</sup>\n </a>\n );\n },\n },\n\n gfmTask: {\n match: inlineRegex(GFM_TASK_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n completed: capture[1].toLowerCase() === 'x',\n };\n },\n react(node, output, state) {\n return (\n <input\n checked={node.completed}\n key={state.key}\n readOnly\n type=\"checkbox\"\n />\n );\n },\n },\n\n heading: {\n match: blockRegex(HEADING_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n return {\n content: parseInline(parse, capture[2], state),\n id: options.slugify(capture[2]),\n level: capture[1].length,\n };\n },\n react(node, output, state) {\n const Tag = `h${node.level}`;\n return (\n <Tag id={node.id} key={state.key}>\n {output(node.content, state)}\n </Tag>\n );\n },\n },\n\n headingSetext: {\n match: blockRegex(HEADING_SETEXT_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture, parse, state) {\n return {\n content: parseInline(parse, capture[1], state),\n level: capture[2] === '=' ? 1 : 2,\n type: 'heading',\n };\n },\n },\n\n htmlBlock: {\n /**\n * find the first matching end tag and process the interior\n */\n match: anyScopeRegex(HTML_BLOCK_ELEMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n const [, whitespace] = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const trimmer = new RegExp(`^${whitespace}`, 'gm');\n const trimmed = capture[3].replace(trimmer, '');\n\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n\n const noInnerParse =\n DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(capture[1]) !== -1;\n\n return {\n attrs: attrStringToMap(capture[2]),\n /**\n * if another html block is detected within, parse as block,\n * otherwise parse as inline to pick up any further markdown\n */\n content: noInnerParse ? capture[3] : parseFunc(parse, trimmed, state),\n\n noInnerParse,\n\n tag: capture[1],\n };\n },\n react(node, output, state) {\n return (\n <node.tag key={state.key} {...node.attrs}>\n {node.noInnerParse ? node.content : output(node.content, state)}\n </node.tag>\n );\n },\n },\n\n htmlComment: {\n match: anyScopeRegex(HTML_COMMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse() {\n return {};\n },\n react: renderNothing,\n },\n\n htmlSelfClosing: {\n /**\n * find the first matching end tag and process the interior\n */\n match: anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n attrs: attrStringToMap(capture[2] || ''),\n tag: capture[1],\n };\n },\n react(node, output, state) {\n return <node.tag {...node.attrs} key={state.key} />;\n },\n },\n\n image: {\n match: simpleInlineRegex(IMAGE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n alt: capture[1],\n target: unescapeUrl(capture[2]),\n title: capture[3],\n };\n },\n react(node, output, state) {\n return (\n <img\n key={state.key}\n alt={node.alt || undefined}\n title={node.title || undefined}\n src={sanitizeUrl(node.target)}\n />\n );\n },\n },\n\n link: {\n match: inlineRegex(LINK_R, false),\n order: PARSE_PRIORITY_LOW,\n parse(capture, parse, state) {\n return {\n content: parseSimpleInline(parse, capture[1], state),\n target: unescapeUrl(capture[2]),\n title: capture[3],\n };\n },\n react(node, output, state) {\n return (\n <a key={state.key} href={sanitizeUrl(node.target)} title={node.title}>\n {output(node.content, state)}\n </a>\n );\n },\n },\n\n // https://daringfireball.net/projects/markdown/syntax#autolink\n linkAngleBraceStyleDetector: {\n match: inlineRegex(LINK_AUTOLINK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: [\n {\n content: capture[1],\n type: 'text',\n },\n ],\n target: capture[1],\n type: 'link',\n };\n },\n },\n\n linkBareUrlDetector: {\n match: inlineRegex(LINK_AUTOLINK_BARE_URL_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: [\n {\n content: capture[1],\n type: 'text',\n },\n ],\n target: capture[1],\n title: undefined,\n type: 'link',\n };\n },\n },\n\n linkMailtoDetector: {\n match: inlineRegex(LINK_AUTOLINK_MAILTO_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n let address = capture[1];\n let target = capture[1];\n\n // Check for a `mailto:` already existing in the link:\n if (!AUTOLINK_MAILTO_CHECK_R.test(target)) {\n target = 'mailto:' + target;\n }\n\n return {\n content: [\n {\n content: address.replace('mailto:', ''),\n type: 'text',\n },\n ],\n target: target,\n type: 'link',\n };\n },\n },\n\n list: {\n match(source, state, prevCapture) {\n // We only want to break into a list if we are at the start of a\n // line. This is to avoid parsing \"hi * there\" with \"* there\"\n // becoming a part of a list.\n // You might wonder, \"but that's inline, so of course it wouldn't\n // start a list?\". You would be correct! Except that some of our\n // lists can be inline, because they might be inside another list,\n // in which case we can parse with inline scope, but need to allow\n // nested lists inside this inline scope.\n const isStartOfLine = LIST_LOOKBEHIND_R.exec(prevCapture);\n const isListBlock = state._list || !state.inline;\n\n if (isStartOfLine && isListBlock) {\n source = isStartOfLine[1] + source;\n\n return LIST_R.exec(source);\n } else {\n return null;\n }\n },\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n const bullet = capture[2];\n const ordered = bullet.length > 1;\n const start = ordered ? +bullet : undefined;\n const items = capture[0]\n // recognize the end of a paragraph block inside a list item:\n // two or more newlines at end end of the item\n .replace(BLOCK_END_R, '\\n')\n .match(LIST_ITEM_R);\n\n let lastItemWasAParagraph = false;\n const itemContent = items.map(function(item, i) {\n // We need to see how far indented the item is:\n const space = LIST_ITEM_PREFIX_R.exec(item)[0].length;\n\n // And then we construct a regex to \"unindent\" the subsequent\n // lines of the items by that amount:\n const spaceRegex = new RegExp('^ {1,' + space + '}', 'gm');\n\n // Before processing the item, we need a couple things\n const content = item\n // remove indents on trailing lines:\n .replace(spaceRegex, '')\n // remove the bullet:\n .replace(LIST_ITEM_PREFIX_R, '');\n\n // Handling \"loose\" lists, like:\n //\n // * this is wrapped in a paragraph\n //\n // * as is this\n //\n // * as is this\n const isLastItem = i === items.length - 1;\n const containsBlocks = content.indexOf('\\n\\n') !== -1;\n\n // Any element in a list is a block if it contains multiple\n // newlines. The last element in the list can also be a block\n // if the previous item in the list was a block (this is\n // because non-last items in the list can end with \\n\\n, but\n // the last item can't, so we just \"inherit\" this property\n // from our previous element).\n const thisItemIsAParagraph =\n containsBlocks || (isLastItem && lastItemWasAParagraph);\n lastItemWasAParagraph = thisItemIsAParagraph;\n\n // backup our state for restoration afterwards. We're going to\n // want to set state._list to true, and state.inline depending\n // on our list's looseness.\n const oldStateInline = state.inline;\n const oldStateList = state._list;\n state._list = true;\n\n // Parse inline if we're in a tight list, or block if we're in\n // a loose list.\n let adjustedContent;\n if (thisItemIsAParagraph) {\n state.inline = false;\n adjustedContent = content.replace(LIST_ITEM_END_R, '\\n\\n');\n } else {\n state.inline = true;\n adjustedContent = content.replace(LIST_ITEM_END_R, '');\n }\n\n const result = parse(adjustedContent, state);\n\n // Restore our state before returning\n state.inline = oldStateInline;\n state._list = oldStateList;\n\n return result;\n });\n\n return {\n items: itemContent,\n ordered: ordered,\n start: start,\n };\n },\n react(node, output, state) {\n const Tag = node.ordered ? 'ol' : 'ul';\n\n return (\n <Tag key={state.key} start={node.start}>\n {node.items.map(function generateListItem(item, i) {\n return <li key={i}>{output(item, state)}</li>;\n })}\n </Tag>\n );\n },\n },\n\n newlineCoalescer: {\n match: blockRegex(CONSECUTIVE_NEWLINE_R),\n order: PARSE_PRIORITY_LOW,\n parse: captureNothing,\n react(/*node, output, state*/) {\n return '\\n';\n },\n },\n\n paragraph: {\n match: blockRegex(PARAGRAPH_R),\n order: PARSE_PRIORITY_LOW,\n parse: parseCaptureInline,\n react(node, output, state) {\n return <p key={state.key}>{output(node.content, state)}</p>;\n },\n },\n\n ref: {\n match: inlineRegex(REFERENCE_IMAGE_OR_LINK),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse*/) {\n refs[capture[1]] = {\n target: capture[2],\n title: capture[4],\n };\n\n return {};\n },\n react: renderNothing,\n },\n\n refImage: {\n match: simpleInlineRegex(REFERENCE_IMAGE_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture) {\n return {\n alt: capture[1] || undefined,\n ref: capture[2],\n };\n },\n react(node, output, state) {\n return (\n <img\n key={state.key}\n alt={node.alt}\n src={sanitizeUrl(refs[node.ref].target)}\n title={refs[node.ref].title}\n />\n );\n },\n },\n\n refLink: {\n match: inlineRegex(REFERENCE_LINK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture, parse, state) {\n return {\n content: parse(capture[1], state),\n fallbackContent: parse(capture[0].replace(SQUARE_BRACKETS_R, '\\\\$1'), state),\n ref: capture[2],\n };\n },\n react(node, output, state) {\n return refs[node.ref] ? (\n <a\n key={state.key}\n href={sanitizeUrl(refs[node.ref].target)}\n title={refs[node.ref].title}\n >\n {output(node.content, state)}\n </a>\n ) : <span key={state.key}>{output(node.fallbackContent, state)}</span>;\n },\n },\n\n table: {\n match: blockRegex(NP_TABLE_R),\n order: PARSE_PRIORITY_HIGH,\n parse: parseTable,\n react(node, output, state) {\n return (\n <table key={state.key}>\n <thead>\n <tr>\n {node.header.map(function generateHeaderCell(content, i) {\n return (\n <th key={i} style={getTableStyle(node, i)}>\n {output(content, state)}\n </th>\n );\n })}\n </tr>\n </thead>\n\n <tbody>\n {node.cells.map(function generateTableRow(row, i) {\n return (\n <tr key={i}>\n {row.map(function generateTableCell(content, c) {\n return (\n <td key={c} style={getTableStyle(node, c)}>\n {output(content, state)}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n },\n },\n\n text: {\n // Here we look for anything followed by non-symbols,\n // double newlines, or double-space-newlines\n // We break on any symbol characters so that this grammar\n // is easy to extend without needing to modify this regex\n match: anyScopeRegex(TEXT_PLAIN_R),\n order: PARSE_PRIORITY_MIN,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[0]\n // nbsp -> unicode equivalent for named chars\n .replace(HTML_CHAR_CODE_R, (full, inner) => {\n return namedCodesToUnicode[inner]\n ? namedCodesToUnicode[inner]\n : full;\n }),\n };\n },\n react(node /*, output, state*/) {\n return node.content;\n },\n },\n\n textBolded: {\n match: simpleInlineRegex(TEXT_BOLD_R),\n order: PARSE_PRIORITY_MED,\n parse(capture, parse, state) {\n return {\n // capture[1] -> the syntax control character\n // capture[2] -> inner content\n content: parse(capture[2], state),\n };\n },\n react(node, output, state) {\n return <strong key={state.key}>{output(node.content, state)}</strong>;\n },\n },\n\n textEmphasized: {\n match: simpleInlineRegex(TEXT_EMPHASIZED_R),\n order: PARSE_PRIORITY_LOW,\n parse(capture, parse, state) {\n return {\n // capture[1] -> opening * or _\n // capture[2] -> inner content\n content: parse(capture[2], state),\n };\n },\n react(node, output, state) {\n return <em key={state.key}>{output(node.content, state)}</em>;\n },\n },\n\n textEscaped: {\n // We don't allow escaping numbers, letters, or spaces here so that\n // backslashes used in plain text still get rendered. But allowing\n // escaping anything else provides a very flexible escape mechanism,\n // regardless of how this grammar is extended.\n match: simpleInlineRegex(TEXT_ESCAPED_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[1],\n type: 'text',\n };\n },\n },\n\n textStrikethroughed: {\n match: simpleInlineRegex(TEXT_STRIKETHROUGHED_R),\n order: PARSE_PRIORITY_LOW,\n parse: parseCaptureInline,\n react(node, output, state) {\n return <del key={state.key}>{output(node.content, state)}</del>;\n },\n },\n };\n\n // Object.keys(rules).forEach(key => {\n // let { match, parse } = rules[key];\n\n // rules[key].match = (...args) => {\n // const start = performance.now();\n // const result = match(...args);\n // const delta = performance.now() - start;\n\n // if (delta > 5)\n // console.warn(\n // `Slow match for ${key}: ${delta.toFixed(3)}ms, input: ${\n // args[0]\n // }`\n // );\n\n // return result;\n // };\n\n // rules[key].parse = (...args) => {\n // const start = performance.now();\n // const result = parse(...args);\n // const delta = performance.now() - start;\n\n // if (delta > 5)\n // console.warn(`Slow parse for ${key}: ${delta.toFixed(3)}ms`);\n\n // console.log(`${key}:parse`, `${delta.toFixed(3)}ms`, args[0]);\n\n // return result;\n // };\n // });\n\n const parser = parserFor(rules);\n const emitter = reactFor(ruleOutput(rules));\n\n const jsx = compile(markdown);\n\n if (footnotes.length) {\n jsx.props.children.push(\n <footer key=\"footer\">\n {footnotes.map(function createFootnote(def) {\n return (\n <div id={def.identifier} key={def.identifier}>\n {def.identifier}\n {emitter(parser(def.footnote, { inline: true }))}\n </div>\n );\n })}\n </footer>\n );\n }\n\n return jsx;\n}\n\n/**\n * A simple HOC for easy React use. Feed the markdown content as a direct child\n * and the rest is taken care of automatically.\n *\n * @param {String} options.children must be a string\n * @param {Object} options.options markdown-to-jsx options (arg 2 of the compiler)\n *\n * @return {ReactElement} the compiled JSX\n */\n\nexport default function Markdown({ children, options, ...props }) {\n return React.cloneElement(compiler(children, options), props);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n const PropTypes = require('prop-types');\n\n Markdown.propTypes = {\n children: PropTypes.string.isRequired,\n options: PropTypes.object,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../index.js"],"names":[],"mappings":"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","file":"cjs.js","sourcesContent":["/* @jsx h */\n/**\n * markdown-to-jsx@6 is a fork of [simple-markdown v0.2.2](https://github.com/Khan/simple-markdown)\n * from Khan Academy. Thank you Khan devs for making such an awesome and extensible\n * parsing infra... without it, half of the optimizations here wouldn't be feasible. 🙏🏼\n */\nimport React from 'react';\nimport unquote from 'unquote';\n\n/** TODO: Drop for React 16? */\nconst ATTRIBUTE_TO_JSX_PROP_MAP = {\n accesskey: 'accessKey',\n allowfullscreen: 'allowFullScreen',\n allowtransparency: 'allowTransparency',\n autocomplete: 'autoComplete',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n charset: 'charSet',\n class: 'className',\n classid: 'classId',\n colspan: 'colSpan',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n crossorigin: 'crossOrigin',\n enctype: 'encType',\n for: 'htmlFor',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formmethod: 'formMethod',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n hreflang: 'hrefLang',\n inputmode: 'inputMode',\n keyparams: 'keyParams',\n keytype: 'keyType',\n marginheight: 'marginHeight',\n marginwidth: 'marginWidth',\n maxlength: 'maxLength',\n mediagroup: 'mediaGroup',\n minlength: 'minLength',\n novalidate: 'noValidate',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n rowspan: 'rowSpan',\n spellcheck: 'spellCheck',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n tabindex: 'tabIndex',\n usemap: 'useMap',\n};\n\nconst namedCodesToUnicode = {\n amp: '\\u0026',\n apos: '\\u0027',\n gt: '\\u003e',\n lt: '\\u003c',\n nbsp: '\\u00a0',\n quot: '\\u201c',\n};\n\nconst DO_NOT_PROCESS_HTML_ELEMENTS = ['style', 'script'];\n\n/**\n * the attribute extractor regex looks for a valid attribute name,\n * followed by an equal sign (whitespace around the equal sign is allowed), followed\n * by one of the following:\n *\n * 1. a single quote-bounded string, e.g. 'foo'\n * 2. a double quote-bounded string, e.g. \"bar\"\n * 3. an interpolation, e.g. {something}\n *\n * JSX can be be interpolated into itself and is passed through the compiler using\n * the same options and setup as the current run.\n *\n * <Something children={<SomeOtherThing />} />\n * ==================\n * ↳ children: [<SomeOtherThing />]\n *\n * Otherwise, interpolations are handled as strings or simple booleans\n * unless HTML syntax is detected.\n *\n * <Something color={green} disabled={true} />\n * ===== ====\n * ↓ ↳ disabled: true\n * ↳ color: \"green\"\n *\n * Numbers are not parsed at this time due to complexities around int, float,\n * and the upcoming bigint functionality that would make handling it unwieldy.\n * Parse the string in your component as desired.\n *\n * <Something someBigNumber={123456789123456789} />\n * ==================\n * ↳ someBigNumber: \"123456789123456789\"\n */\nconst ATTR_EXTRACTOR_R = /([-A-Z0-9_:]+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|(?:\\{((?:\\\\.|{[^}]*?}|[^}])*)\\})))?/gi;\n\n/** TODO: Write explainers for each of these */\n\nconst AUTOLINK_MAILTO_CHECK_R = /mailto:/i;\nconst BLOCK_END_R = /\\n{2,}$/;\nconst BLOCKQUOTE_R = /^( *>[^\\n]+(\\n[^\\n]+)*\\n*)+\\n{2,}/;\nconst BLOCKQUOTE_TRIM_LEFT_MULTILINE_R = /^ *> ?/gm;\nconst BREAK_LINE_R = /^ {2,}\\n/;\nconst BREAK_THEMATIC_R = /^(?:( *[-*_]) *){3,}(?:\\n *)+\\n/;\nconst CODE_BLOCK_FENCED_R = /^\\s*(`{3,}|~{3,}) *(\\S+)? *\\n([\\s\\S]+?)\\s*\\1 *(?:\\n *)+\\n?/;\nconst CODE_BLOCK_R = /^(?: {4}[^\\n]+\\n*)+(?:\\n *)+\\n?/;\nconst CODE_INLINE_R = /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/;\nconst CONSECUTIVE_NEWLINE_R = /^(?:\\n *)*\\n/;\nconst CR_NEWLINE_R = /\\r\\n?/g;\nconst FOOTNOTE_R = /^\\[\\^(.*)\\](:.*)\\n/;\nconst FOOTNOTE_REFERENCE_R = /^\\[\\^(.*)\\]/;\nconst FORMFEED_R = /\\f/g;\nconst GFM_TASK_R = /^\\s*?\\[(x|\\s)\\]/;\nconst HEADING_R = /^ *(#{1,6}) *([^\\n]+)\\n{0,2}/;\nconst HEADING_SETEXT_R = /^([^\\n]+)\\n *(=|-){3,} *(?:\\n *)+\\n/;\n\n/**\n * Explanation:\n *\n * 1. Look for a starting tag, preceeded by any amount of spaces\n * ^ *<\n *\n * 2. Capture the tag name (capture 1)\n * ([^ >/]+)\n *\n * 3. Ignore a space after the starting tag and capture the attribute portion of the tag (capture 2)\n * ?([^>]*)\\/{0}>\n *\n * 4. Ensure a matching closing tag is present in the rest of the input string\n * (?=[\\s\\S]*<\\/\\1>)\n *\n * 5. Capture everything until the matching closing tag -- this might include additional pairs\n * of the same tag type found in step 2 (capture 3)\n * ((?:[\\s\\S]*?(?:<\\1[^>]*>[\\s\\S]*?<\\/\\1>)*[\\s\\S]*?)*?)<\\/\\1>\n *\n * 6. Capture excess newlines afterward\n * \\n*\n */\nconst HTML_BLOCK_ELEMENT_R = /^ *(?!<[a-z][^ >/]* ?\\/>)<([a-z][^ >/]*) ?([^>]*)\\/{0}>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1)[\\s\\S])*?)<\\/\\1>\\n*/i;\n\nconst HTML_CHAR_CODE_R = /&([a-z]+);/g;\n\nconst HTML_COMMENT_R = /^<!--.*?-->/;\n\n/**\n * borrowed from React 15(https://github.com/facebook/react/blob/894d20744cba99383ffd847dbd5b6e0800355a5c/src/renderers/dom/shared/HTMLDOMPropertyConfig.js)\n */\nconst HTML_CUSTOM_ATTR_R = /^(data|aria|x)-[a-z_][a-z\\d_.-]*$/;\n\nconst HTML_SELF_CLOSING_ELEMENT_R = /^ *<([a-z][a-z0-9:]*)(?:\\s+((?:<.*?>|[^>])*))?\\/?>(?!<\\/\\1>)(\\s*\\n)?/i;\nconst INTERPOLATION_R = /^\\{.*\\}$/;\nconst LINK_AUTOLINK_BARE_URL_R = /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/;\nconst LINK_AUTOLINK_MAILTO_R = /^<([^ >]+@[^ >]+)>/;\nconst LINK_AUTOLINK_R = /^<([^ >]+:\\/[^ >]+)>/;\nconst LIST_ITEM_END_R = / *\\n+$/;\nconst LIST_LOOKBEHIND_R = /(?:^|\\n)( *)$/;\nconst CAPTURE_LETTER_AFTER_HYPHEN = /-([a-z])?/gi;\nconst NP_TABLE_R = /^(.*\\|?.*)\\n *(\\|? *[-:]+ *\\|[-| :]*)\\n((?:.*\\|.*\\n)*)\\n?/;\nconst PARAGRAPH_R = /^((?:[^\\n]|\\n(?! *\\n))+)(?:\\n *)+\\n/;\nconst REFERENCE_IMAGE_OR_LINK = /^\\[([^\\]]*)\\]:\\s*(\\S+)\\s*(\"([^\"]*)\")?/;\nconst REFERENCE_IMAGE_R = /^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nconst REFERENCE_LINK_R = /^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nconst SQUARE_BRACKETS_R = /(\\[|\\])/g;\nconst SHOULD_RENDER_AS_BLOCK_R = /(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s)/;\nconst TAB_R = /\\t/g;\nconst TABLE_SEPARATOR_R = /^ *\\| */;\nconst TABLE_TRIM_PIPES = /(^ *\\||\\| *$)/g;\nconst TABLE_CELL_END_TRIM = / *$/;\nconst TABLE_CENTER_ALIGN = /^ *:-+: *$/;\nconst TABLE_LEFT_ALIGN = /^ *:-+ *$/;\nconst TABLE_RIGHT_ALIGN = /^ *-+: *$/;\n\nconst TEXT_BOLD_R = /^([*_])\\1((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\\1\\1(?!\\1)/;\nconst TEXT_EMPHASIZED_R = /^([*_])((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\\1(?!\\1)/;\nconst TEXT_STRIKETHROUGHED_R = /^~~((?:\\[.*?\\]|<.*?>(?:.*?<.*?>)?|`.*?`|.)*?)~~/;\n\nconst TEXT_ESCAPED_R = /^\\\\([^0-9A-Za-z\\s])/;\nconst TEXT_PLAIN_R = /^[\\s\\S]+?(?=[^0-9A-Z\\s\\u00c0-\\uffff&;.()'\"]|\\d+\\.|\\n\\n| {2,}\\n|\\w+:\\S|$)/i;\nconst TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R = /(^\\n+|\\n+$|\\s+$)/g;\n\nconst HTML_LEFT_TRIM_AMOUNT_R = /^([ \\t]*)/;\n\nconst UNESCAPE_URL_R = /\\\\([^0-9A-Z\\s])/gi;\n\n// recognize a `*` `-`, `+`, `1.`, `2.`... list bullet\nconst LIST_BULLET = '(?:[*+-]|\\\\d+\\\\.)';\n\n// recognize the start of a list item:\n// leading space plus a bullet plus a space (` * `)\nconst LIST_ITEM_PREFIX = '( *)(' + LIST_BULLET + ') +';\nconst LIST_ITEM_PREFIX_R = new RegExp('^' + LIST_ITEM_PREFIX);\n\n// recognize an individual list item:\n// * hi\n// this is part of the same item\n//\n// as is this, which is a new paragraph in the same item\n//\n// * but this is not part of the same item\nconst LIST_ITEM_R = new RegExp(\n LIST_ITEM_PREFIX +\n '[^\\\\n]*(?:\\\\n' +\n '(?!\\\\1' +\n LIST_BULLET +\n ' )[^\\\\n]*)*(\\\\n|$)',\n 'gm'\n);\n\n// check whether a list item has paragraphs: if it does,\n// we leave the newlines at the end\nconst LIST_R = new RegExp(\n '^( *)(' +\n LIST_BULLET +\n ') ' +\n '[\\\\s\\\\S]+?(?:\\\\n{2,}(?! )' +\n '(?!\\\\1' +\n LIST_BULLET +\n ' (?!' +\n LIST_BULLET +\n ' ))\\\\n*' +\n // the \\\\s*$ here is so that we can parse the inside of nested\n // lists, where our content might end before we receive two `\\n`s\n '|\\\\s*\\\\n*$)'\n);\n\nconst LINK_INSIDE = '(?:\\\\[[^\\\\]]*\\\\]|[^\\\\[\\\\]]|\\\\](?=[^\\\\[]*\\\\]))*';\nconst LINK_HREF_AND_TITLE =\n '\\\\s*<?((?:[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+[\\'\"]([\\\\s\\\\S]*?)[\\'\"])?\\\\s*';\n\nconst LINK_R = new RegExp(\n '^\\\\[(' + LINK_INSIDE + ')\\\\]\\\\(' + LINK_HREF_AND_TITLE + '\\\\)'\n);\n\nconst IMAGE_R = new RegExp(\n '^!\\\\[(' + LINK_INSIDE + ')\\\\]\\\\(' + LINK_HREF_AND_TITLE + '\\\\)'\n);\n\nconst BLOCK_SYNTAXES = [\n BLOCKQUOTE_R,\n CODE_BLOCK_R,\n CODE_BLOCK_FENCED_R,\n HEADING_R,\n HEADING_SETEXT_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_COMMENT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n LIST_ITEM_R,\n LIST_R,\n NP_TABLE_R,\n PARAGRAPH_R,\n];\n\nfunction containsBlockSyntax(input) {\n return BLOCK_SYNTAXES.some(r => r.test(input));\n}\n\n// based on https://stackoverflow.com/a/18123682/1141611\n// not complete, but probably good enough\nfunction slugify(str) {\n return str\n .replace(/[ÀÁÂÃÄÅàáâãä忯]/g, 'a')\n .replace(/[çÇ]/g, 'c')\n .replace(/[ðÐ]/g, 'd')\n .replace(/[ÈÉÊËéèêë]/g, 'e')\n .replace(/[ÏïÎîÍíÌì]/g, 'i')\n .replace(/[Ññ]/g, 'n')\n .replace(/[øØœŒÕõÔôÓóÒò]/g, 'o')\n .replace(/[ÜüÛûÚúÙù]/g, 'u')\n .replace(/[ŸÿÝý]/g, 'y')\n .replace(/[^a-z0-9- ]/gi, '')\n .replace(/ /gi, '-')\n .toLowerCase();\n}\n\nfunction parseTableAlignCapture(alignCapture) {\n if (TABLE_RIGHT_ALIGN.test(alignCapture)) {\n return 'right';\n } else if (TABLE_CENTER_ALIGN.test(alignCapture)) {\n return 'center';\n } else if (TABLE_LEFT_ALIGN.test(alignCapture)) {\n return 'left';\n }\n\n return null;\n}\n\nfunction parseTableRow(source, parse, state) {\n const prevInTable = state.inTable;\n state.inTable = true;\n const tableRow = parse(source.trim(), state);\n state.inTable = prevInTable;\n\n let cells = [[]];\n tableRow.forEach(function(node, i) {\n if (node.type === 'tableSeparator') {\n // Filter out empty table separators at the start/end:\n if (i !== 0 && i !== tableRow.length - 1) {\n // Split the current row:\n cells.push([]);\n }\n } else {\n if (node.type === 'text' && (\n tableRow[i + 1] == null ||\n tableRow[i + 1].type === 'tableSeparator'\n )) {\n node.content = node.content.replace(TABLE_CELL_END_TRIM, \"\");\n }\n cells[cells.length - 1].push(node);\n }\n });\n return cells;\n}\n\nfunction parseTableAlign(source /*, parse, state*/) {\n const alignText = source\n .replace(TABLE_TRIM_PIPES, '')\n .split('|');\n\n return alignText.map(parseTableAlignCapture);\n}\n\nfunction parseTableCells(source, parse, state) {\n const rowsText = source\n .trim()\n .split('\\n');\n\n return rowsText.map(function(rowText) {\n return parseTableRow(rowText, parse, state);\n });\n}\n\nfunction parseTable(capture, parse, state) {\n state.inline = true;\n const header = parseTableRow(capture[1], parse, state);\n const align = parseTableAlign(capture[2], parse, state);\n const cells = parseTableCells(capture[3], parse, state);\n state.inline = false;\n\n return {\n align: align,\n cells: cells,\n header: header,\n type: 'table',\n };\n}\n\nfunction getTableStyle(node, colIndex) {\n return node.align[colIndex] == null\n ? {}\n : {\n textAlign: node.align[colIndex],\n };\n}\n\n/** TODO: remove for react 16 */\nfunction normalizeAttributeKey(key) {\n const hyphenIndex = key.indexOf('-');\n\n if (hyphenIndex !== -1 && key.match(HTML_CUSTOM_ATTR_R) === null) {\n key = key.replace(CAPTURE_LETTER_AFTER_HYPHEN, function(_, letter) {\n return letter.toUpperCase();\n });\n }\n\n return key;\n}\n\nfunction attributeValueToJSXPropValue(key, value) {\n if (key === 'style') {\n return value.split(/;\\s?/).reduce(function(styles, kvPair) {\n const key = kvPair.slice(0, kvPair.indexOf(':'));\n\n // snake-case to camelCase\n // also handles PascalCasing vendor prefixes\n const camelCasedKey = key.replace(/(-[a-z])/g, substr =>\n substr[1].toUpperCase()\n );\n\n // key.length + 1 to skip over the colon\n styles[camelCasedKey] = kvPair.slice(key.length + 1).trim();\n\n return styles;\n }, {});\n } else if (key === 'href') {\n return sanitizeUrl(value)\n } else if (value.match(INTERPOLATION_R)) {\n // return as a string and let the consumer decide what to do with it\n value = value.slice(1, value.length - 1);\n }\n\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n }\n\n return value;\n}\n\nfunction normalizeWhitespace(source) {\n return source\n .replace(CR_NEWLINE_R, '\\n')\n .replace(FORMFEED_R, '')\n .replace(TAB_R, ' ');\n}\n\n/**\n * Creates a parser for a given set of rules, with the precedence\n * specified as a list of rules.\n *\n * @rules: an object containing\n * rule type -> {match, order, parse} objects\n * (lower order is higher precedence)\n * (Note: `order` is added to defaultRules after creation so that\n * the `order` of defaultRules in the source matches the `order`\n * of defaultRules in terms of `order` fields.)\n *\n * @returns The resulting parse function, with the following parameters:\n * @source: the input source string to be parsed\n * @state: an optional object to be threaded through parse\n * calls. Allows clients to add stateful operations to\n * parsing, such as keeping track of how many levels deep\n * some nesting is. For an example use-case, see passage-ref\n * parsing in src/widgets/passage/passage-markdown.jsx\n */\nfunction parserFor(rules) {\n // Sorts rules in order of increasing order, then\n // ascending rule name in case of ties.\n let ruleList = Object.keys(rules);\n\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n ruleList.forEach(function(type) {\n let order = rules[type].order;\n if (\n process.env.NODE_ENV !== 'production' &&\n (typeof order !== 'number' || !isFinite(order))\n ) {\n console.warn(\n 'markdown-to-jsx: Invalid order for rule `' + type + '`: ' + order\n );\n }\n });\n }\n\n ruleList.sort(function(typeA, typeB) {\n let orderA = rules[typeA].order;\n let orderB = rules[typeB].order;\n\n // First sort based on increasing order\n if (orderA !== orderB) {\n return orderA - orderB;\n\n // Then based on increasing unicode lexicographic ordering\n } else if (typeA < typeB) {\n return -1;\n }\n\n return 1;\n });\n\n function nestedParse(source, state) {\n let result = [];\n\n // We store the previous capture so that match functions can\n // use some limited amount of lookbehind. Lists use this to\n // ensure they don't match arbitrary '- ' or '* ' in inline\n // text (see the list rule for more information).\n let prevCapture = '';\n while (source) {\n let i = 0;\n while (i < ruleList.length) {\n const ruleType = ruleList[i];\n const rule = rules[ruleType];\n const capture = rule.match(source, state, prevCapture);\n\n if (capture) {\n const currCaptureString = capture[0];\n source = source.substring(currCaptureString.length);\n const parsed = rule.parse(capture, nestedParse, state);\n\n // We also let rules override the default type of\n // their parsed node if they would like to, so that\n // there can be a single output function for all links,\n // even if there are several rules to parse them.\n if (parsed.type == null) {\n parsed.type = ruleType;\n }\n\n result.push(parsed);\n\n prevCapture = currCaptureString;\n break;\n }\n\n i++;\n }\n }\n\n return result;\n }\n\n return function outerParse(source, state) {\n return nestedParse(normalizeWhitespace(source), state);\n };\n}\n\n// Creates a match function for an inline scoped or simple element from a regex\nfunction inlineRegex(regex) {\n return function match(source, state) {\n if (state.inline) {\n return regex.exec(source);\n } else {\n return null;\n }\n };\n}\n\n// basically any inline element except links\nfunction simpleInlineRegex(regex) {\n return function match(source, state) {\n if (state.inline || state.simple) {\n return regex.exec(source);\n } else {\n return null;\n }\n };\n}\n\n// Creates a match function for a block scoped element from a regex\nfunction blockRegex(regex) {\n return function match(source, state) {\n if (state.inline || state.simple) {\n return null;\n } else {\n return regex.exec(source);\n }\n };\n}\n\n// Creates a match function from a regex, ignoring block/inline scope\nfunction anyScopeRegex(regex) {\n return function match(source /*, state*/) {\n return regex.exec(source);\n };\n}\n\nfunction reactFor(outputFunc) {\n return function nestedReactOutput(ast, state) {\n state = state || {};\n if (Array.isArray(ast)) {\n const oldKey = state.key;\n const result = [];\n\n // map nestedOutput over the ast, except group any text\n // nodes together into a single string output.\n let lastWasString = false;\n\n for (let i = 0; i < ast.length; i++) {\n state.key = i;\n\n const nodeOut = nestedReactOutput(ast[i], state);\n const isString = typeof nodeOut === 'string';\n\n if (isString && lastWasString) {\n result[result.length - 1] += nodeOut;\n } else {\n result.push(nodeOut);\n }\n\n lastWasString = isString;\n }\n\n state.key = oldKey;\n\n return result;\n }\n\n return outputFunc(ast, nestedReactOutput, state);\n };\n}\n\nfunction sanitizeUrl(url) {\n try {\n const decoded = decodeURIComponent(url);\n\n if (decoded.match(/^\\s*javascript:/i)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Anchor URL contains an unsafe JavaScript expression, it will not be rendered.',\n decoded\n );\n }\n\n return null;\n }\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Anchor URL could not be decoded due to malformed syntax or characters, it will not be rendered.',\n url\n );\n }\n\n // decodeURIComponent sometimes throws a URIError\n // See `decodeURIComponent('a%AFc');`\n // http://stackoverflow.com/questions/9064536/javascript-decodeuricomponent-malformed-uri-exception\n return null;\n }\n\n return url;\n}\n\nfunction unescapeUrl(rawUrlString) {\n return rawUrlString.replace(UNESCAPE_URL_R, '$1');\n}\n\n/**\n * Everything inline, including links.\n */\nfunction parseInline(parse, content, state) {\n const isCurrentlyInline = state.inline || false;\n const isCurrentlySimple = state.simple || false;\n state.inline = true;\n state.simple = true;\n const result = parse(content, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n return result;\n}\n\n/**\n * Anything inline that isn't a link.\n */\nfunction parseSimpleInline(parse, content, state) {\n const isCurrentlyInline = state.inline || false;\n const isCurrentlySimple = state.simple || false;\n state.inline = false;\n state.simple = true;\n const result = parse(content, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n return result;\n}\n\nfunction parseBlock(parse, content, state) {\n state.inline = false;\n return parse(content + '\\n\\n', state);\n}\n\nfunction parseCaptureInline(capture, parse, state) {\n return {\n content: parseInline(parse, capture[1], state),\n };\n}\n\nfunction captureNothing() {\n return {};\n}\n\nfunction renderNothing() {\n return null;\n}\n\nfunction ruleOutput(rules) {\n return function nestedRuleOutput(ast, outputFunc, state) {\n return rules[ast.type].react(ast, outputFunc, state);\n };\n}\n\nfunction cx(...args) {\n return args.filter(Boolean).join(' ');\n}\n\nfunction get(src, path, fb) {\n let ptr = src;\n const frags = path.split('.');\n\n while (frags.length) {\n ptr = ptr[frags[0]];\n\n if (ptr === undefined) break;\n else frags.shift();\n }\n\n return ptr || fb;\n}\n\nfunction getTag(tag, overrides) {\n const override = get(overrides, tag);\n\n if (!override) return tag;\n\n return typeof override === 'function' || (typeof override === 'object' && 'render' in override)\n ? override\n : get(overrides, `${tag}.component`, tag);\n}\n\n/**\n * anything that must scan the tree before everything else\n */\nconst PARSE_PRIORITY_MAX = 1;\n\n/**\n * scans for block-level constructs\n */\nconst PARSE_PRIORITY_HIGH = 2;\n\n/**\n * inline w/ more priority than other inline\n */\nconst PARSE_PRIORITY_MED = 3;\n\n/**\n * inline elements\n */\nconst PARSE_PRIORITY_LOW = 4;\n\n/**\n * bare text and stuff that is considered leftovers\n */\nconst PARSE_PRIORITY_MIN = 5;\n\nexport function compiler(markdown, options) {\n options = options || {};\n options.overrides = options.overrides || {};\n options.slugify = options.slugify || slugify;\n options.namedCodesToUnicode = options.namedCodesToUnicode \n ? {...namedCodesToUnicode, ...options.namedCodesToUnicode}\n : namedCodesToUnicode;\n\n const createElementFn = options.createElement || React.createElement;\n\n // eslint-disable-next-line no-unused-vars\n function h(tag, props, ...children) {\n const overrideProps = get(options.overrides, `${tag}.props`, {});\n\n return createElementFn(\n getTag(tag, options.overrides),\n {\n ...props,\n ...overrideProps,\n className:\n cx(props && props.className, overrideProps.className) || undefined,\n },\n ...children\n );\n }\n\n function compile(input) {\n let inline = false;\n\n if (options.forceInline) {\n inline = true;\n } else if (!options.forceBlock) {\n /**\n * should not contain any block-level markdown like newlines, lists, headings,\n * thematic breaks, blockquotes, tables, etc\n */\n inline = SHOULD_RENDER_AS_BLOCK_R.test(input) === false;\n }\n\n const arr = emitter(\n parser(\n inline\n ? input\n : `${input.replace(TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R, '')}\\n\\n`,\n { inline }\n )\n );\n\n let jsx;\n if (arr.length > 1) {\n jsx = inline ? <span key=\"outer\">{arr}</span> : <div key=\"outer\">{arr}</div>;\n } else if (arr.length === 1) {\n jsx = arr[0];\n\n // TODO: remove this for React 16\n if (typeof jsx === 'string') {\n jsx = <span key=\"outer\">{jsx}</span>;\n }\n } else {\n // TODO: return null for React 16\n jsx = <span key=\"outer\" />;\n }\n\n return jsx;\n }\n\n function attrStringToMap(str) {\n const attributes = str.match(ATTR_EXTRACTOR_R);\n\n return attributes\n ? attributes.reduce(function(map, raw, index) {\n const delimiterIdx = raw.indexOf('=');\n\n if (delimiterIdx !== -1) {\n const key = normalizeAttributeKey(\n raw.slice(0, delimiterIdx)\n ).trim();\n const value = unquote(raw.slice(delimiterIdx + 1).trim());\n\n const mappedKey = ATTRIBUTE_TO_JSX_PROP_MAP[key] || key;\n const normalizedValue = (map[\n mappedKey\n ] = attributeValueToJSXPropValue(key, value));\n\n if (\n HTML_BLOCK_ELEMENT_R.test(normalizedValue) ||\n HTML_SELF_CLOSING_ELEMENT_R.test(normalizedValue)\n ) {\n map[mappedKey] = React.cloneElement(\n compile(normalizedValue.trim()),\n { key: index }\n );\n }\n } else {\n map[ATTRIBUTE_TO_JSX_PROP_MAP[raw] || raw] = true;\n }\n\n return map;\n }, {})\n : undefined;\n }\n\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n if (typeof markdown !== 'string') {\n throw new Error(`markdown-to-jsx: the first argument must be\n a string`);\n }\n\n if (\n Object.prototype.toString.call(options.overrides) !== '[object Object]'\n ) {\n throw new Error(`markdown-to-jsx: options.overrides (second argument property) must be\n undefined or an object literal with shape:\n {\n htmltagname: {\n component: string|ReactComponent(optional),\n props: object(optional)\n }\n }`);\n }\n }\n\n const footnotes = [];\n const refs = {};\n\n /**\n * each rule's react() output function goes through our custom h() JSX pragma;\n * this allows the override functionality to be automatically applied\n */\n const rules = {\n blockQuote: {\n match: blockRegex(BLOCKQUOTE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n return {\n content: parse(\n capture[0].replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, ''),\n state\n ),\n };\n },\n react(node, output, state) {\n return (\n <blockquote key={state.key}>{output(node.content, state)}</blockquote>\n );\n },\n },\n\n breakLine: {\n match: anyScopeRegex(BREAK_LINE_R),\n order: PARSE_PRIORITY_HIGH,\n parse: captureNothing,\n react(_, __, state) {\n return <br key={state.key} />;\n },\n },\n\n breakThematic: {\n match: blockRegex(BREAK_THEMATIC_R),\n order: PARSE_PRIORITY_HIGH,\n parse: captureNothing,\n react(_, __, state) {\n return <hr key={state.key} />;\n },\n },\n\n codeBlock: {\n match: blockRegex(CODE_BLOCK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n let content = capture[0].replace(/^ {4}/gm, '').replace(/\\n+$/, '');\n return {\n content: content,\n lang: undefined,\n };\n },\n\n react(node, output, state) {\n return (\n <pre key={state.key}>\n <code className={node.lang ? `lang-${node.lang}` : ''}>\n {node.content}\n </code>\n </pre>\n );\n },\n },\n\n codeFenced: {\n match: blockRegex(CODE_BLOCK_FENCED_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[3],\n lang: capture[2] || undefined,\n type: 'codeBlock',\n };\n },\n },\n\n codeInline: {\n match: simpleInlineRegex(CODE_INLINE_R),\n order: PARSE_PRIORITY_LOW,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[2],\n };\n },\n react(node, output, state) {\n return <code key={state.key}>{node.content}</code>;\n },\n },\n\n /**\n * footnotes are emitted at the end of compilation in a special <footer> block\n */\n footnote: {\n match: blockRegex(FOOTNOTE_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n footnotes.push({\n footnote: capture[2],\n identifier: capture[1],\n });\n\n return {};\n },\n react: renderNothing,\n },\n\n footnoteReference: {\n match: inlineRegex(FOOTNOTE_REFERENCE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse*/) {\n return {\n content: capture[1],\n target: `#${capture[1]}`,\n };\n },\n react(node, output, state) {\n return (\n <a key={state.key} href={sanitizeUrl(node.target)}>\n <sup key={state.key}>{node.content}</sup>\n </a>\n );\n },\n },\n\n gfmTask: {\n match: inlineRegex(GFM_TASK_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n completed: capture[1].toLowerCase() === 'x',\n };\n },\n react(node, output, state) {\n return (\n <input\n checked={node.completed}\n key={state.key}\n readOnly\n type=\"checkbox\"\n />\n );\n },\n },\n\n heading: {\n match: blockRegex(HEADING_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n return {\n content: parseInline(parse, capture[2], state),\n id: options.slugify(capture[2]),\n level: capture[1].length,\n };\n },\n react(node, output, state) {\n const Tag = `h${node.level}`;\n return (\n <Tag id={node.id} key={state.key}>\n {output(node.content, state)}\n </Tag>\n );\n },\n },\n\n headingSetext: {\n match: blockRegex(HEADING_SETEXT_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture, parse, state) {\n return {\n content: parseInline(parse, capture[1], state),\n level: capture[2] === '=' ? 1 : 2,\n type: 'heading',\n };\n },\n },\n\n htmlBlock: {\n /**\n * find the first matching end tag and process the interior\n */\n match: anyScopeRegex(HTML_BLOCK_ELEMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n const [, whitespace] = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const trimmer = new RegExp(`^${whitespace}`, 'gm');\n const trimmed = capture[3].replace(trimmer, '');\n\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n\n const tagName = capture[1].toLowerCase();\n const noInnerParse =\n DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(tagName) !== -1;\n\n return {\n attrs: attrStringToMap(capture[2]),\n /**\n * if another html block is detected within, parse as block,\n * otherwise parse as inline to pick up any further markdown\n */\n content: noInnerParse ? capture[3] : parseFunc(parse, trimmed, state),\n\n noInnerParse,\n\n tag: noInnerParse ? tagName : capture[1]\n };\n },\n react(node, output, state) {\n return (\n <node.tag key={state.key} {...node.attrs}>\n {node.noInnerParse ? node.content : output(node.content, state)}\n </node.tag>\n );\n },\n },\n\n htmlComment: {\n match: anyScopeRegex(HTML_COMMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse() {\n return {};\n },\n react: renderNothing,\n },\n\n htmlSelfClosing: {\n /**\n * find the first matching end tag and process the interior\n */\n match: anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n attrs: attrStringToMap(capture[2] || ''),\n tag: capture[1],\n };\n },\n react(node, output, state) {\n return <node.tag {...node.attrs} key={state.key} />;\n },\n },\n\n image: {\n match: simpleInlineRegex(IMAGE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n alt: capture[1],\n target: unescapeUrl(capture[2]),\n title: capture[3],\n };\n },\n react(node, output, state) {\n return (\n <img\n key={state.key}\n alt={node.alt || undefined}\n title={node.title || undefined}\n src={sanitizeUrl(node.target)}\n />\n );\n },\n },\n\n link: {\n match: inlineRegex(LINK_R, false),\n order: PARSE_PRIORITY_LOW,\n parse(capture, parse, state) {\n return {\n content: parseSimpleInline(parse, capture[1], state),\n target: unescapeUrl(capture[2]),\n title: capture[3],\n };\n },\n react(node, output, state) {\n return (\n <a key={state.key} href={sanitizeUrl(node.target)} title={node.title}>\n {output(node.content, state)}\n </a>\n );\n },\n },\n\n // https://daringfireball.net/projects/markdown/syntax#autolink\n linkAngleBraceStyleDetector: {\n match: inlineRegex(LINK_AUTOLINK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: [\n {\n content: capture[1],\n type: 'text',\n },\n ],\n target: capture[1],\n type: 'link',\n };\n },\n },\n\n linkBareUrlDetector: {\n match: inlineRegex(LINK_AUTOLINK_BARE_URL_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: [\n {\n content: capture[1],\n type: 'text',\n },\n ],\n target: capture[1],\n title: undefined,\n type: 'link',\n };\n },\n },\n\n linkMailtoDetector: {\n match: inlineRegex(LINK_AUTOLINK_MAILTO_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n let address = capture[1];\n let target = capture[1];\n\n // Check for a `mailto:` already existing in the link:\n if (!AUTOLINK_MAILTO_CHECK_R.test(target)) {\n target = 'mailto:' + target;\n }\n\n return {\n content: [\n {\n content: address.replace('mailto:', ''),\n type: 'text',\n },\n ],\n target: target,\n type: 'link',\n };\n },\n },\n\n list: {\n match(source, state, prevCapture) {\n // We only want to break into a list if we are at the start of a\n // line. This is to avoid parsing \"hi * there\" with \"* there\"\n // becoming a part of a list.\n // You might wonder, \"but that's inline, so of course it wouldn't\n // start a list?\". You would be correct! Except that some of our\n // lists can be inline, because they might be inside another list,\n // in which case we can parse with inline scope, but need to allow\n // nested lists inside this inline scope.\n const isStartOfLine = LIST_LOOKBEHIND_R.exec(prevCapture);\n const isListBlock = state._list || !state.inline;\n\n if (isStartOfLine && isListBlock) {\n source = isStartOfLine[1] + source;\n\n return LIST_R.exec(source);\n } else {\n return null;\n }\n },\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n const bullet = capture[2];\n const ordered = bullet.length > 1;\n const start = ordered ? +bullet : undefined;\n const items = capture[0]\n // recognize the end of a paragraph block inside a list item:\n // two or more newlines at end end of the item\n .replace(BLOCK_END_R, '\\n')\n .match(LIST_ITEM_R);\n\n let lastItemWasAParagraph = false;\n const itemContent = items.map(function(item, i) {\n // We need to see how far indented the item is:\n const space = LIST_ITEM_PREFIX_R.exec(item)[0].length;\n\n // And then we construct a regex to \"unindent\" the subsequent\n // lines of the items by that amount:\n const spaceRegex = new RegExp('^ {1,' + space + '}', 'gm');\n\n // Before processing the item, we need a couple things\n const content = item\n // remove indents on trailing lines:\n .replace(spaceRegex, '')\n // remove the bullet:\n .replace(LIST_ITEM_PREFIX_R, '');\n\n // Handling \"loose\" lists, like:\n //\n // * this is wrapped in a paragraph\n //\n // * as is this\n //\n // * as is this\n const isLastItem = i === items.length - 1;\n const containsBlocks = content.indexOf('\\n\\n') !== -1;\n\n // Any element in a list is a block if it contains multiple\n // newlines. The last element in the list can also be a block\n // if the previous item in the list was a block (this is\n // because non-last items in the list can end with \\n\\n, but\n // the last item can't, so we just \"inherit\" this property\n // from our previous element).\n const thisItemIsAParagraph =\n containsBlocks || (isLastItem && lastItemWasAParagraph);\n lastItemWasAParagraph = thisItemIsAParagraph;\n\n // backup our state for restoration afterwards. We're going to\n // want to set state._list to true, and state.inline depending\n // on our list's looseness.\n const oldStateInline = state.inline;\n const oldStateList = state._list;\n state._list = true;\n\n // Parse inline if we're in a tight list, or block if we're in\n // a loose list.\n let adjustedContent;\n if (thisItemIsAParagraph) {\n state.inline = false;\n adjustedContent = content.replace(LIST_ITEM_END_R, '\\n\\n');\n } else {\n state.inline = true;\n adjustedContent = content.replace(LIST_ITEM_END_R, '');\n }\n\n const result = parse(adjustedContent, state);\n\n // Restore our state before returning\n state.inline = oldStateInline;\n state._list = oldStateList;\n\n return result;\n });\n\n return {\n items: itemContent,\n ordered: ordered,\n start: start,\n };\n },\n react(node, output, state) {\n const Tag = node.ordered ? 'ol' : 'ul';\n\n return (\n <Tag key={state.key} start={node.start}>\n {node.items.map(function generateListItem(item, i) {\n return <li key={i}>{output(item, state)}</li>;\n })}\n </Tag>\n );\n },\n },\n\n newlineCoalescer: {\n match: blockRegex(CONSECUTIVE_NEWLINE_R),\n order: PARSE_PRIORITY_LOW,\n parse: captureNothing,\n react(/*node, output, state*/) {\n return '\\n';\n },\n },\n\n paragraph: {\n match: blockRegex(PARAGRAPH_R),\n order: PARSE_PRIORITY_LOW,\n parse: parseCaptureInline,\n react(node, output, state) {\n return <p key={state.key}>{output(node.content, state)}</p>;\n },\n },\n\n ref: {\n match: inlineRegex(REFERENCE_IMAGE_OR_LINK),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse*/) {\n refs[capture[1]] = {\n target: capture[2],\n title: capture[4],\n };\n\n return {};\n },\n react: renderNothing,\n },\n\n refImage: {\n match: simpleInlineRegex(REFERENCE_IMAGE_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture) {\n return {\n alt: capture[1] || undefined,\n ref: capture[2],\n };\n },\n react(node, output, state) {\n return (\n <img\n key={state.key}\n alt={node.alt}\n src={sanitizeUrl(refs[node.ref].target)}\n title={refs[node.ref].title}\n />\n );\n },\n },\n\n refLink: {\n match: inlineRegex(REFERENCE_LINK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture, parse, state) {\n return {\n content: parse(capture[1], state),\n fallbackContent: parse(capture[0].replace(SQUARE_BRACKETS_R, '\\\\$1'), state),\n ref: capture[2],\n };\n },\n react(node, output, state) {\n return refs[node.ref] ? (\n <a\n key={state.key}\n href={sanitizeUrl(refs[node.ref].target)}\n title={refs[node.ref].title}\n >\n {output(node.content, state)}\n </a>\n ) : <span key={state.key}>{output(node.fallbackContent, state)}</span>;\n },\n },\n\n table: {\n match: blockRegex(NP_TABLE_R),\n order: PARSE_PRIORITY_HIGH,\n parse: parseTable,\n react(node, output, state) {\n return (\n <table key={state.key}>\n <thead>\n <tr>\n {node.header.map(function generateHeaderCell(content, i) {\n return (\n <th key={i} style={getTableStyle(node, i)}>\n {output(content, state)}\n </th>\n );\n })}\n </tr>\n </thead>\n\n <tbody>\n {node.cells.map(function generateTableRow(row, i) {\n return (\n <tr key={i}>\n {row.map(function generateTableCell(content, c) {\n return (\n <td key={c} style={getTableStyle(node, c)}>\n {output(content, state)}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n },\n },\n\n tableSeparator: {\n match: function(source, state) {\n if (!state.inTable) {\n return null;\n }\n return TABLE_SEPARATOR_R.exec(source);\n },\n order: PARSE_PRIORITY_HIGH,\n parse: function() {\n return { type: 'tableSeparator' };\n },\n // These shouldn't be reached, but in case they are, be reasonable:\n react() { return ' | '; }\n },\n\n text: {\n // Here we look for anything followed by non-symbols,\n // double newlines, or double-space-newlines\n // We break on any symbol characters so that this grammar\n // is easy to extend without needing to modify this regex\n match: anyScopeRegex(TEXT_PLAIN_R),\n order: PARSE_PRIORITY_MIN,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[0]\n // nbsp -> unicode equivalent for named chars\n .replace(HTML_CHAR_CODE_R, (full, inner) => {\n return options.namedCodesToUnicode[inner]\n ? options.namedCodesToUnicode[inner]\n : full;\n }),\n };\n },\n react(node /*, output, state*/) {\n return node.content;\n },\n },\n\n textBolded: {\n match: simpleInlineRegex(TEXT_BOLD_R),\n order: PARSE_PRIORITY_MED,\n parse(capture, parse, state) {\n return {\n // capture[1] -> the syntax control character\n // capture[2] -> inner content\n content: parse(capture[2], state),\n };\n },\n react(node, output, state) {\n return <strong key={state.key}>{output(node.content, state)}</strong>;\n },\n },\n\n textEmphasized: {\n match: simpleInlineRegex(TEXT_EMPHASIZED_R),\n order: PARSE_PRIORITY_LOW,\n parse(capture, parse, state) {\n return {\n // capture[1] -> opening * or _\n // capture[2] -> inner content\n content: parse(capture[2], state),\n };\n },\n react(node, output, state) {\n return <em key={state.key}>{output(node.content, state)}</em>;\n },\n },\n\n textEscaped: {\n // We don't allow escaping numbers, letters, or spaces here so that\n // backslashes used in plain text still get rendered. But allowing\n // escaping anything else provides a very flexible escape mechanism,\n // regardless of how this grammar is extended.\n match: simpleInlineRegex(TEXT_ESCAPED_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[1],\n type: 'text',\n };\n },\n },\n\n textStrikethroughed: {\n match: simpleInlineRegex(TEXT_STRIKETHROUGHED_R),\n order: PARSE_PRIORITY_LOW,\n parse: parseCaptureInline,\n react(node, output, state) {\n return <del key={state.key}>{output(node.content, state)}</del>;\n },\n },\n };\n\n // Object.keys(rules).forEach(key => {\n // let { match, parse } = rules[key];\n\n // rules[key].match = (...args) => {\n // const start = performance.now();\n // const result = match(...args);\n // const delta = performance.now() - start;\n\n // if (delta > 5)\n // console.warn(\n // `Slow match for ${key}: ${delta.toFixed(3)}ms, input: ${\n // args[0]\n // }`\n // );\n\n // return result;\n // };\n\n // rules[key].parse = (...args) => {\n // const start = performance.now();\n // const result = parse(...args);\n // const delta = performance.now() - start;\n\n // if (delta > 5)\n // console.warn(`Slow parse for ${key}: ${delta.toFixed(3)}ms`);\n\n // console.log(`${key}:parse`, `${delta.toFixed(3)}ms`, args[0]);\n\n // return result;\n // };\n // });\n\n const parser = parserFor(rules);\n const emitter = reactFor(ruleOutput(rules));\n\n const jsx = compile(markdown);\n\n if (footnotes.length) {\n jsx.props.children.push(\n <footer key=\"footer\">\n {footnotes.map(function createFootnote(def) {\n return (\n <div id={def.identifier} key={def.identifier}>\n {def.identifier}\n {emitter(parser(def.footnote, { inline: true }))}\n </div>\n );\n })}\n </footer>\n );\n }\n\n return jsx;\n}\n\n/**\n * A simple HOC for easy React use. Feed the markdown content as a direct child\n * and the rest is taken care of automatically.\n *\n * @param {String} options.children must be a string\n * @param {Object} options.options markdown-to-jsx options (arg 2 of the compiler)\n *\n * @return {ReactElement} the compiled JSX\n */\n\nexport default function Markdown({ children, options, ...props }) {\n return React.cloneElement(compiler(children, options), props);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n const PropTypes = require('prop-types');\n\n Markdown.propTypes = {\n children: PropTypes.string.isRequired,\n options: PropTypes.object,\n };\n}\n"]}
|
package/dist/esm.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var _extends=Object.assign||function(a){for(var b,c=1;c<arguments.length;c++)for(var d in b=arguments[c],b)Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d]);return a},_typeof=typeof Symbol=='function'&&typeof Symbol.iterator=='symbol'?function(a){return typeof a}:function(a){return a&&typeof Symbol=='function'&&a.constructor===Symbol&&a!==Symbol.prototype?'symbol':typeof a};function _objectWithoutProperties(a,b){var c={};for(var d in a)b.indexOf(d)>=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}import React from'react';import unquote from'unquote';var ATTRIBUTE_TO_JSX_PROP_MAP={accesskey:'accessKey',allowfullscreen:'allowFullScreen',allowtransparency:'allowTransparency',autocomplete:'autoComplete',autofocus:'autoFocus',autoplay:'autoPlay',cellpadding:'cellPadding',cellspacing:'cellSpacing',charset:'charSet',class:'className',classid:'classId',colspan:'colSpan',contenteditable:'contentEditable',contextmenu:'contextMenu',crossorigin:'crossOrigin',enctype:'encType',for:'htmlFor',formaction:'formAction',formenctype:'formEncType',formmethod:'formMethod',formnovalidate:'formNoValidate',formtarget:'formTarget',frameborder:'frameBorder',hreflang:'hrefLang',inputmode:'inputMode',keyparams:'keyParams',keytype:'keyType',marginheight:'marginHeight',marginwidth:'marginWidth',maxlength:'maxLength',mediagroup:'mediaGroup',minlength:'minLength',novalidate:'noValidate',radiogroup:'radioGroup',readonly:'readOnly',rowspan:'rowSpan',spellcheck:'spellCheck',srcdoc:'srcDoc',srclang:'srcLang',srcset:'srcSet',tabindex:'tabIndex',usemap:'useMap'},namedCodesToUnicode={amp:'&',apos:'\'',gt:'>',lt:'<',nbsp:'\xA0',quot:'\u201C'},DO_NOT_PROCESS_HTML_ELEMENTS=['style','script'],ATTR_EXTRACTOR_R=/([-A-Z0-9_:]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|(?:\{((?:\\.|{[^}]*?}|[^}])*)\})))?/gi,AUTOLINK_MAILTO_CHECK_R=/mailto:/i,BLOCK_END_R=/\n{2,}$/,BLOCKQUOTE_R=/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/,BLOCKQUOTE_TRIM_LEFT_MULTILINE_R=/^ *> ?/gm,BREAK_LINE_R=/^ {2,}\n/,BREAK_THEMATIC_R=/^(?:( *[-*_]) *){3,}(?:\n *)+\n/,CODE_BLOCK_FENCED_R=/^\s*(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n *)+\n?/,CODE_BLOCK_R=/^(?: {4}[^\n]+\n*)+(?:\n *)+\n?/,CODE_INLINE_R=/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,CONSECUTIVE_NEWLINE_R=/^(?:\n *)*\n/,CR_NEWLINE_R=/\r\n?/g,FOOTNOTE_R=/^\[\^(.*)\](:.*)\n/,FOOTNOTE_REFERENCE_R=/^\[\^(.*)\]/,FORMFEED_R=/\f/g,GFM_TASK_R=/^\s*?\[(x|\s)\]/,HEADING_R=/^ *(#{1,6}) *([^\n]+)\n{0,2}/,HEADING_SETEXT_R=/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/,HTML_BLOCK_ELEMENT_R=/^ *(?!<[a-z][^ >/]* ?\/>)<([a-z][^ >/]*) ?([^>]*)\/{0}>\n?(\s*(?:<\1[^>]*?>[\s\S]*?<\/\1>|(?!<\1)[\s\S])*?)<\/\1>\n*/i,HTML_CHAR_CODE_R=/&([a-z]+);/g,HTML_COMMENT_R=/^<!--.*?-->/,HTML_CUSTOM_ATTR_R=/^(data|aria|x)-[a-z_][a-z\d_.-]*$/,HTML_SELF_CLOSING_ELEMENT_R=/^ *<([a-z][a-z0-9:]*)(?:\s+((?:<.*?>|[^>])*))?\/?>(?!<\/\1>)(\s*\n)?/i,INTERPOLATION_R=/^\{.*\}$/,LINK_AUTOLINK_BARE_URL_R=/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,LINK_AUTOLINK_MAILTO_R=/^<([^ >]+@[^ >]+)>/,LINK_AUTOLINK_R=/^<([^ >]+:\/[^ >]+)>/,LIST_ITEM_END_R=/ *\n+$/,LIST_LOOKBEHIND_R=/(?:^|\n)( *)$/,CAPTURE_LETTER_AFTER_HYPHEN=/-([a-z])?/gi,NP_TABLE_R=/^(.*\|?.*)\n *(\|? *[-:]+ *\|[-| :]*)\n((?:.*\|.*\n)*)\n?/,PARAGRAPH_R=/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/,REFERENCE_IMAGE_OR_LINK=/^\[([^\]]*)\]:\s*(\S+)\s*("([^"]*)")?/,REFERENCE_IMAGE_R=/^!\[([^\]]*)\] ?\[([^\]]*)\]/,REFERENCE_LINK_R=/^\[([^\]]*)\] ?\[([^\]]*)\]/,SQUARE_BRACKETS_R=/(\[|\])/g,SHOULD_RENDER_AS_BLOCK_R=/(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s)/,TAB_R=/\t/g,TABLE_TRIM_PIPES=/(^ *\||\| *$)/g,TABLE_CENTER_ALIGN=/^ *:-+: *$/,TABLE_LEFT_ALIGN=/^ *:-+ *$/,TABLE_RIGHT_ALIGN=/^ *-+: *$/,TABLE_ROW_SPLIT=/ *\| */,TEXT_BOLD_R=/^([*_])\1((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1\1(?!\1)/,TEXT_EMPHASIZED_R=/^([*_])((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1(?!\1)/,TEXT_STRIKETHROUGHED_R=/^~~((?:\[.*?\]|<.*?>(?:.*?<.*?>)?|`.*?`|.)*?)~~/,TEXT_ESCAPED_R=/^\\([^0-9A-Za-z\s])/,TEXT_PLAIN_R=/^[\s\S]+?(?=[^0-9A-Z\s\u00c0-\uffff&;.()'"]|\d+\.|\n\n| {2,}\n|\w+:\S|$)/i,TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R=/(^\n+|(\n|\s)+$)/g,HTML_LEFT_TRIM_AMOUNT_R=/^([ \t]*)/,UNESCAPE_URL_R=/\\([^0-9A-Z\s])/gi,LIST_BULLET='(?:[*+-]|\\d+\\.)',LIST_ITEM_PREFIX='( *)((?:[*+-]|\\d+\\.)) +',LIST_ITEM_PREFIX_R=/^( *)((?:[*+-]|\d+\.)) +/,LIST_ITEM_R=/( *)((?:[*+-]|\d+\.)) +[^\n]*(?:\n(?!\1(?:[*+-]|\d+\.) )[^\n]*)*(\n|$)/gm,LIST_R=/^( *)((?:[*+-]|\d+\.)) [\s\S]+?(?:\n{2,}(?! )(?!\1(?:[*+-]|\d+\.) (?!(?:[*+-]|\d+\.) ))\n*|\s*\n*$)/,LINK_INSIDE='(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*',LINK_HREF_AND_TITLE='\\s*<?((?:[^\\s\\\\]|\\\\.)*?)>?(?:\\s+[\'"]([\\s\\S]*?)[\'"])?\\s*',LINK_R=/^\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*<?((?:[^\s\\]|\\.)*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*\)/,IMAGE_R=/^!\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*<?((?:[^\s\\]|\\.)*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*\)/,BLOCK_SYNTAXES=[BLOCKQUOTE_R,CODE_BLOCK_R,CODE_BLOCK_FENCED_R,HEADING_R,HEADING_SETEXT_R,HTML_BLOCK_ELEMENT_R,HTML_COMMENT_R,HTML_SELF_CLOSING_ELEMENT_R,LIST_ITEM_R,LIST_R,NP_TABLE_R,PARAGRAPH_R];function containsBlockSyntax(a){return BLOCK_SYNTAXES.some(function(b){return b.test(a)})}function slugify(a){return a.replace(/[ÀÁÂÃÄÅàáâãä忯]/g,'a').replace(/[çÇ]/g,'c').replace(/[ðÐ]/g,'d').replace(/[ÈÉÊËéèêë]/g,'e').replace(/[ÏïÎîÍíÌì]/g,'i').replace(/[Ññ]/g,'n').replace(/[øØœŒÕõÔôÓóÒò]/g,'o').replace(/[ÜüÛûÚúÙù]/g,'u').replace(/[ŸÿÝý]/g,'y').replace(/[^a-z0-9- ]/gi,'').replace(/ /gi,'-').toLowerCase()}function parseTableAlignCapture(a){if(TABLE_RIGHT_ALIGN.test(a))return'right';return TABLE_CENTER_ALIGN.test(a)?'center':TABLE_LEFT_ALIGN.test(a)?'left':null}function parseTableHeader(a,b,c){var d=a[1].replace(TABLE_TRIM_PIPES,'').trim().split(TABLE_ROW_SPLIT);return d.map(function(a){return b(a,c)})}function parseTableAlign(a){var b=a[2].replace(TABLE_TRIM_PIPES,'').trim().split(TABLE_ROW_SPLIT);return b.map(parseTableAlignCapture)}function parseTableCells(a,b,c){var d=a[3].trim().split('\n');return d.map(function(a){return a.replace(TABLE_TRIM_PIPES,'').split(TABLE_ROW_SPLIT).map(function(a){return b(a.trim(),c)})})}function parseTable(a,b,c){c.inline=!0;var d=parseTableHeader(a,b,c),e=parseTableAlign(a,b,c),f=parseTableCells(a,b,c);return c.inline=!1,{align:e,cells:f,header:d,type:'table'}}function getTableStyle(a,b){return a.align[b]==null?{}:{textAlign:a.align[b]}}function normalizeAttributeKey(a){var b=a.indexOf('-');return b!==-1&&a.match(HTML_CUSTOM_ATTR_R)===null&&(a=a.replace(CAPTURE_LETTER_AFTER_HYPHEN,function(a,b){return b.toUpperCase()})),a}function attributeValueToJSXPropValue(a,b){return a==='style'?b.split(/;\s?/).reduce(function(a,b){var c=b.slice(0,b.indexOf(':')),d=c.replace(/(-[a-z])/g,function(a){return a[1].toUpperCase()});return a[d]=b.slice(c.length+1).trim(),a},{}):(b.match(INTERPOLATION_R)&&(b=b.slice(1,b.length-1)),b==='true'||b!=='false'&&b)}function normalizeWhitespace(a){return a.replace(CR_NEWLINE_R,'\n').replace(FORMFEED_R,'').replace(TAB_R,' ')}function parserFor(a){function b(d,e){for(var f=[],g='';d;)for(var l=0;l<c.length;){var h=c[l],j=a[h],k=j.match(d,e,g);if(k){var i=k[0];d=d.substring(i.length);var m=j.parse(k,b,e);m.type==null&&(m.type=h),f.push(m),g=i;break}l++}return f}var c=Object.keys(a);return process.env.NODE_ENV!=='production'&&c.forEach(function(b){var c=a[b].order;process.env.NODE_ENV==='production'||typeof c=='number'&&isFinite(c)||console.warn('markdown-to-jsx: Invalid order for rule `'+b+'`: '+c)}),c.sort(function(b,c){var d=a[b].order,e=a[c].order;return d===e?b<c?-1:1:d-e}),function(a,c){return b(normalizeWhitespace(a),c)}}function inlineRegex(a){return function(b,c){return c.inline?a.exec(b):null}}function simpleInlineRegex(a){return function(b,c){return c.inline||c.simple?a.exec(b):null}}function blockRegex(a){return function(b,c){return c.inline||c.simple?null:a.exec(b)}}function anyScopeRegex(a){return function(b){return a.exec(b)}}function reactFor(a){return function b(c,d){if(d=d||{},Array.isArray(c)){for(var e=d.key,f=[],g=!1,h=0;h<c.length;h++){d.key=h;var j=b(c[h],d),k=typeof j=='string';k&&g?f[f.length-1]+=j:f.push(j),g=k}return d.key=e,f}return a(c,b,d)}}function sanitizeUrl(a){try{var b=decodeURIComponent(a);if(b.match(/^\s*javascript:/i))return process.env.NODE_ENV!=='production'&&console.warn('Anchor URL contains an unsafe JavaScript expression, it will not be rendered.',b),null}catch(b){return process.env.NODE_ENV!=='production'&&console.warn('Anchor URL could not be decoded due to malformed syntax or characters, it will not be rendered.',a),null}return a}function unescapeUrl(a){return a.replace(UNESCAPE_URL_R,'$1')}function parseInline(a,b,c){var d=c.inline||!1,e=c.simple||!1;c.inline=!0,c.simple=!0;var f=a(b,c);return c.inline=d,c.simple=e,f}function parseSimpleInline(a,b,c){var d=c.inline||!1,e=c.simple||!1;c.inline=!1,c.simple=!0;var f=a(b,c);return c.inline=d,c.simple=e,f}function parseBlock(a,b,c){return c.inline=!1,a(b+'\n\n',c)}function parseCaptureInline(a,b,c){return{content:parseInline(b,a[1],c)}}function captureNothing(){return{}}function renderNothing(){return null}function ruleOutput(a){return function(b,c,d){return a[b.type].react(b,c,d)}}function cx(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return b.filter(Boolean).join(' ')}function get(a,b,c){for(var d=a,e=b.split('.');e.length&&(d=d[e[0]],d!==void 0);)e.shift();return d||c}function getTag(a,b){var c=get(b,a);return c?typeof c=='function'||(typeof c=='undefined'?'undefined':_typeof(c))==='object'&&'render'in c?c:get(b,a+'.component',a):a}var PARSE_PRIORITY_MAX=1,PARSE_PRIORITY_HIGH=2,PARSE_PRIORITY_MED=3,PARSE_PRIORITY_LOW=4,PARSE_PRIORITY_MIN=5;export function compiler(a,b){function d(a,c){for(var d=get(b.overrides,a+'.props',{}),e=arguments.length,g=Array(e>2?e-2:0),h=2;h<e;h++)g[h-2]=arguments[h];return f.apply(void 0,[getTag(a,b.overrides),_extends({},c,d,{className:cx(c&&c.className,d.className)||void 0})].concat(g))}function c(a){var c=!1;b.forceInline?c=!0:!b.forceBlock&&(c=SHOULD_RENDER_AS_BLOCK_R.test(a)===!1);var e=k(j(c?a:a.replace(TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R,'')+'\n\n',{inline:c})),f=void 0;return e.length>1?f=c?d('span',{key:'outer'},e):d('div',{key:'outer'},e):e.length===1?(f=e[0],typeof f=='string'&&(f=d('span',{key:'outer'},f))):f=d('span',{key:'outer'}),f}function e(a){var b=a.match(ATTR_EXTRACTOR_R);return b?b.reduce(function(a,b,d){var e=b.indexOf('=');if(e!==-1){var f=normalizeAttributeKey(b.slice(0,e)).trim(),g=unquote(b.slice(e+1).trim()),h=ATTRIBUTE_TO_JSX_PROP_MAP[f]||f,i=a[h]=attributeValueToJSXPropValue(f,g);(HTML_BLOCK_ELEMENT_R.test(i)||HTML_SELF_CLOSING_ELEMENT_R.test(i))&&(a[h]=React.cloneElement(c(i.trim()),{key:d}))}else a[ATTRIBUTE_TO_JSX_PROP_MAP[b]||b]=!0;return a},{}):void 0}b=b||{},b.overrides=b.overrides||{},b.slugify=b.slugify||slugify;var f=b.createElement||React.createElement;if(process.env.NODE_ENV!=='production'){if(typeof a!='string')throw new Error('markdown-to-jsx: the first argument must be\n a string');if(Object.prototype.toString.call(b.overrides)!=='[object Object]')throw new Error('markdown-to-jsx: options.overrides (second argument property) must be\n undefined or an object literal with shape:\n {\n htmltagname: {\n component: string|ReactComponent(optional),\n props: object(optional)\n }\n }')}var g=[],h={},i={blockQuote:{match:blockRegex(BLOCKQUOTE_R),order:PARSE_PRIORITY_HIGH,parse:function d(a,b,c){return{content:b(a[0].replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R,''),c)}},react:function e(a,b,c){return d('blockquote',{key:c.key},b(a.content,c))}},breakLine:{match:anyScopeRegex(BREAK_LINE_R),order:PARSE_PRIORITY_HIGH,parse:captureNothing,react:function e(a,b,c){return d('br',{key:c.key})}},breakThematic:{match:blockRegex(BREAK_THEMATIC_R),order:PARSE_PRIORITY_HIGH,parse:captureNothing,react:function e(a,b,c){return d('hr',{key:c.key})}},codeBlock:{match:blockRegex(CODE_BLOCK_R),order:PARSE_PRIORITY_MAX,parse:function c(a){var b=a[0].replace(/^ {4}/gm,'').replace(/\n+$/,'');return{content:b,lang:void 0}},react:function e(a,b,c){return d('pre',{key:c.key},d('code',{className:a.lang?'lang-'+a.lang:''},a.content))}},codeFenced:{match:blockRegex(CODE_BLOCK_FENCED_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:a[3],lang:a[2]||void 0,type:'codeBlock'}}},codeInline:{match:simpleInlineRegex(CODE_INLINE_R),order:PARSE_PRIORITY_LOW,parse:function b(a){return{content:a[2]}},react:function e(a,b,c){return d('code',{key:c.key},a.content)}},footnote:{match:blockRegex(FOOTNOTE_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return g.push({footnote:a[2],identifier:a[1]}),{}},react:renderNothing},footnoteReference:{match:inlineRegex(FOOTNOTE_REFERENCE_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{content:a[1],target:'#'+a[1]}},react:function e(a,b,c){return d('a',{key:c.key,href:sanitizeUrl(a.target)},d('sup',{key:c.key},a.content))}},gfmTask:{match:inlineRegex(GFM_TASK_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{completed:a[1].toLowerCase()==='x'}},react:function e(a,b,c){return d('input',{checked:a.completed,key:c.key,readOnly:!0,type:'checkbox'})}},heading:{match:blockRegex(HEADING_R),order:PARSE_PRIORITY_HIGH,parse:function e(a,c,d){return{content:parseInline(c,a[2],d),id:b.slugify(a[2]),level:a[1].length}},react:function f(a,b,c){var e='h'+a.level;return d(e,{id:a.id,key:c.key},b(a.content,c))}},headingSetext:{match:blockRegex(HEADING_SETEXT_R),order:PARSE_PRIORITY_MAX,parse:function d(a,b,c){return{content:parseInline(b,a[1],c),level:a[2]==='='?1:2,type:'heading'}}},htmlBlock:{match:anyScopeRegex(HTML_BLOCK_ELEMENT_R),order:PARSE_PRIORITY_HIGH,parse:function k(a,b,c){var d=a[3].match(HTML_LEFT_TRIM_AMOUNT_R),f=d[1],g=new RegExp('^'+f,'gm'),h=a[3].replace(g,''),i=containsBlockSyntax(h)?parseBlock:parseInline,j=DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(a[1])!==-1;return{attrs:e(a[2]),content:j?a[3]:i(b,h,c),noInnerParse:j,tag:a[1]}},react:function e(a,b,c){return d(a.tag,_extends({key:c.key},a.attrs),a.noInnerParse?a.content:b(a.content,c))}},htmlComment:{match:anyScopeRegex(HTML_COMMENT_R),order:PARSE_PRIORITY_HIGH,parse:function a(){return{}},react:renderNothing},htmlSelfClosing:{match:anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{attrs:e(a[2]||''),tag:a[1]}},react:function e(a,b,c){return d(a.tag,_extends({},a.attrs,{key:c.key}))}},image:{match:simpleInlineRegex(IMAGE_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{alt:a[1],target:unescapeUrl(a[2]),title:a[3]}},react:function e(a,b,c){return d('img',{key:c.key,alt:a.alt||void 0,title:a.title||void 0,src:sanitizeUrl(a.target)})}},link:{match:inlineRegex(LINK_R,!1),order:PARSE_PRIORITY_LOW,parse:function d(a,b,c){return{content:parseSimpleInline(b,a[1],c),target:unescapeUrl(a[2]),title:a[3]}},react:function e(a,b,c){return d('a',{key:c.key,href:sanitizeUrl(a.target),title:a.title},b(a.content,c))}},linkAngleBraceStyleDetector:{match:inlineRegex(LINK_AUTOLINK_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:[{content:a[1],type:'text'}],target:a[1],type:'link'}}},linkBareUrlDetector:{match:inlineRegex(LINK_AUTOLINK_BARE_URL_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:[{content:a[1],type:'text'}],target:a[1],title:void 0,type:'link'}}},linkMailtoDetector:{match:inlineRegex(LINK_AUTOLINK_MAILTO_R),order:PARSE_PRIORITY_MAX,parse:function d(a){var b=a[1],c=a[1];return AUTOLINK_MAILTO_CHECK_R.test(c)||(c='mailto:'+c),{content:[{content:b.replace('mailto:',''),type:'text'}],target:c,type:'link'}}},list:{match:function f(a,b,c){var d=LIST_LOOKBEHIND_R.exec(c),e=b._list||!b.inline;return d&&e?(a=d[1]+a,LIST_R.exec(a)):null},order:PARSE_PRIORITY_HIGH,parse:function j(a,b,c){var d=a[2],e=d.length>1,f=e?+d:void 0,g=a[0].replace(BLOCK_END_R,'\n').match(LIST_ITEM_R),h=!1,i=g.map(function(a,d){var e=LIST_ITEM_PREFIX_R.exec(a)[0].length,f=new RegExp('^ {1,'+e+'}','gm'),i=a.replace(f,'').replace(LIST_ITEM_PREFIX_R,''),j=d===g.length-1,k=i.indexOf('\n\n')!==-1,l=k||j&&h;h=l;var m=c.inline,n=c._list;c._list=!0;var o;l?(c.inline=!1,o=i.replace(LIST_ITEM_END_R,'\n\n')):(c.inline=!0,o=i.replace(LIST_ITEM_END_R,''));var p=b(o,c);return c.inline=m,c._list=n,p});return{items:i,ordered:e,start:f}},react:function f(a,b,c){var e=a.ordered?'ol':'ul';return d(e,{key:c.key,start:a.start},a.items.map(function(a,e){return d('li',{key:e},b(a,c))}))}},newlineCoalescer:{match:blockRegex(CONSECUTIVE_NEWLINE_R),order:PARSE_PRIORITY_LOW,parse:captureNothing,react:function a(){return'\n'}},paragraph:{match:blockRegex(PARAGRAPH_R),order:PARSE_PRIORITY_LOW,parse:parseCaptureInline,react:function e(a,b,c){return d('p',{key:c.key},b(a.content,c))}},ref:{match:inlineRegex(REFERENCE_IMAGE_OR_LINK),order:PARSE_PRIORITY_MAX,parse:function b(a){return h[a[1]]={target:a[2],title:a[4]},{}},react:renderNothing},refImage:{match:simpleInlineRegex(REFERENCE_IMAGE_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{alt:a[1]||void 0,ref:a[2]}},react:function e(a,b,c){return d('img',{key:c.key,alt:a.alt,src:sanitizeUrl(h[a.ref].target),title:h[a.ref].title})}},refLink:{match:inlineRegex(REFERENCE_LINK_R),order:PARSE_PRIORITY_MAX,parse:function d(a,b,c){return{content:b(a[1],c),fallbackContent:b(a[0].replace(SQUARE_BRACKETS_R,'\\$1'),c),ref:a[2]}},react:function e(a,b,c){return h[a.ref]?d('a',{key:c.key,href:sanitizeUrl(h[a.ref].target),title:h[a.ref].title},b(a.content,c)):d('span',{key:c.key},b(a.fallbackContent,c))}},table:{match:blockRegex(NP_TABLE_R),order:PARSE_PRIORITY_HIGH,parse:parseTable,react:function f(a,b,e){return d('table',{key:e.key},d('thead',null,d('tr',null,a.header.map(function(c,f){return d('th',{key:f,style:getTableStyle(a,f)},b(c,e))}))),d('tbody',null,a.cells.map(function(c,f){return d('tr',{key:f},c.map(function(f,g){return d('td',{key:g,style:getTableStyle(a,g)},b(f,e))}))})))}},text:{match:anyScopeRegex(TEXT_PLAIN_R),order:PARSE_PRIORITY_MIN,parse:function b(a){return{content:a[0].replace(HTML_CHAR_CODE_R,function(a,b){return namedCodesToUnicode[b]?namedCodesToUnicode[b]:a})}},react:function b(a){return a.content}},textBolded:{match:simpleInlineRegex(TEXT_BOLD_R),order:PARSE_PRIORITY_MED,parse:function d(a,b,c){return{content:b(a[2],c)}},react:function e(a,b,c){return d('strong',{key:c.key},b(a.content,c))}},textEmphasized:{match:simpleInlineRegex(TEXT_EMPHASIZED_R),order:PARSE_PRIORITY_LOW,parse:function d(a,b,c){return{content:b(a[2],c)}},react:function e(a,b,c){return d('em',{key:c.key},b(a.content,c))}},textEscaped:{match:simpleInlineRegex(TEXT_ESCAPED_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{content:a[1],type:'text'}}},textStrikethroughed:{match:simpleInlineRegex(TEXT_STRIKETHROUGHED_R),order:PARSE_PRIORITY_LOW,parse:parseCaptureInline,react:function e(a,b,c){return d('del',{key:c.key},b(a.content,c))}}},j=parserFor(i),k=reactFor(ruleOutput(i)),l=c(a);return g.length&&l.props.children.push(d('footer',{key:'footer'},g.map(function(a){return d('div',{id:a.identifier,key:a.identifier},a.identifier,k(j(a.footnote,{inline:!0})))}))),l}export default function Markdown(a){var b=a.children,c=a.options,d=_objectWithoutProperties(a,['children','options']);return React.cloneElement(compiler(b,c),d)}if(process.env.NODE_ENV!=='production'){var PropTypes=require('prop-types');Markdown.propTypes={children:PropTypes.string.isRequired,options:PropTypes.object}}
|
|
1
|
+
var _extends=Object.assign||function(a){for(var b,c=1;c<arguments.length;c++)for(var d in b=arguments[c],b)Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d]);return a},_typeof=typeof Symbol=='function'&&typeof Symbol.iterator=='symbol'?function(a){return typeof a}:function(a){return a&&typeof Symbol=='function'&&a.constructor===Symbol&&a!==Symbol.prototype?'symbol':typeof a};function _objectWithoutProperties(a,b){var c={};for(var d in a)b.indexOf(d)>=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}import React from'react';import unquote from'unquote';var ATTRIBUTE_TO_JSX_PROP_MAP={accesskey:'accessKey',allowfullscreen:'allowFullScreen',allowtransparency:'allowTransparency',autocomplete:'autoComplete',autofocus:'autoFocus',autoplay:'autoPlay',cellpadding:'cellPadding',cellspacing:'cellSpacing',charset:'charSet',class:'className',classid:'classId',colspan:'colSpan',contenteditable:'contentEditable',contextmenu:'contextMenu',crossorigin:'crossOrigin',enctype:'encType',for:'htmlFor',formaction:'formAction',formenctype:'formEncType',formmethod:'formMethod',formnovalidate:'formNoValidate',formtarget:'formTarget',frameborder:'frameBorder',hreflang:'hrefLang',inputmode:'inputMode',keyparams:'keyParams',keytype:'keyType',marginheight:'marginHeight',marginwidth:'marginWidth',maxlength:'maxLength',mediagroup:'mediaGroup',minlength:'minLength',novalidate:'noValidate',radiogroup:'radioGroup',readonly:'readOnly',rowspan:'rowSpan',spellcheck:'spellCheck',srcdoc:'srcDoc',srclang:'srcLang',srcset:'srcSet',tabindex:'tabIndex',usemap:'useMap'},namedCodesToUnicode={amp:'&',apos:'\'',gt:'>',lt:'<',nbsp:'\xA0',quot:'\u201C'},DO_NOT_PROCESS_HTML_ELEMENTS=['style','script'],ATTR_EXTRACTOR_R=/([-A-Z0-9_:]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|(?:\{((?:\\.|{[^}]*?}|[^}])*)\})))?/gi,AUTOLINK_MAILTO_CHECK_R=/mailto:/i,BLOCK_END_R=/\n{2,}$/,BLOCKQUOTE_R=/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/,BLOCKQUOTE_TRIM_LEFT_MULTILINE_R=/^ *> ?/gm,BREAK_LINE_R=/^ {2,}\n/,BREAK_THEMATIC_R=/^(?:( *[-*_]) *){3,}(?:\n *)+\n/,CODE_BLOCK_FENCED_R=/^\s*(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n *)+\n?/,CODE_BLOCK_R=/^(?: {4}[^\n]+\n*)+(?:\n *)+\n?/,CODE_INLINE_R=/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,CONSECUTIVE_NEWLINE_R=/^(?:\n *)*\n/,CR_NEWLINE_R=/\r\n?/g,FOOTNOTE_R=/^\[\^(.*)\](:.*)\n/,FOOTNOTE_REFERENCE_R=/^\[\^(.*)\]/,FORMFEED_R=/\f/g,GFM_TASK_R=/^\s*?\[(x|\s)\]/,HEADING_R=/^ *(#{1,6}) *([^\n]+)\n{0,2}/,HEADING_SETEXT_R=/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/,HTML_BLOCK_ELEMENT_R=/^ *(?!<[a-z][^ >/]* ?\/>)<([a-z][^ >/]*) ?([^>]*)\/{0}>\n?(\s*(?:<\1[^>]*?>[\s\S]*?<\/\1>|(?!<\1)[\s\S])*?)<\/\1>\n*/i,HTML_CHAR_CODE_R=/&([a-z]+);/g,HTML_COMMENT_R=/^<!--.*?-->/,HTML_CUSTOM_ATTR_R=/^(data|aria|x)-[a-z_][a-z\d_.-]*$/,HTML_SELF_CLOSING_ELEMENT_R=/^ *<([a-z][a-z0-9:]*)(?:\s+((?:<.*?>|[^>])*))?\/?>(?!<\/\1>)(\s*\n)?/i,INTERPOLATION_R=/^\{.*\}$/,LINK_AUTOLINK_BARE_URL_R=/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,LINK_AUTOLINK_MAILTO_R=/^<([^ >]+@[^ >]+)>/,LINK_AUTOLINK_R=/^<([^ >]+:\/[^ >]+)>/,LIST_ITEM_END_R=/ *\n+$/,LIST_LOOKBEHIND_R=/(?:^|\n)( *)$/,CAPTURE_LETTER_AFTER_HYPHEN=/-([a-z])?/gi,NP_TABLE_R=/^(.*\|?.*)\n *(\|? *[-:]+ *\|[-| :]*)\n((?:.*\|.*\n)*)\n?/,PARAGRAPH_R=/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/,REFERENCE_IMAGE_OR_LINK=/^\[([^\]]*)\]:\s*(\S+)\s*("([^"]*)")?/,REFERENCE_IMAGE_R=/^!\[([^\]]*)\] ?\[([^\]]*)\]/,REFERENCE_LINK_R=/^\[([^\]]*)\] ?\[([^\]]*)\]/,SQUARE_BRACKETS_R=/(\[|\])/g,SHOULD_RENDER_AS_BLOCK_R=/(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s)/,TAB_R=/\t/g,TABLE_SEPARATOR_R=/^ *\| */,TABLE_TRIM_PIPES=/(^ *\||\| *$)/g,TABLE_CELL_END_TRIM=/ *$/,TABLE_CENTER_ALIGN=/^ *:-+: *$/,TABLE_LEFT_ALIGN=/^ *:-+ *$/,TABLE_RIGHT_ALIGN=/^ *-+: *$/,TEXT_BOLD_R=/^([*_])\1((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1\1(?!\1)/,TEXT_EMPHASIZED_R=/^([*_])((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1(?!\1)/,TEXT_STRIKETHROUGHED_R=/^~~((?:\[.*?\]|<.*?>(?:.*?<.*?>)?|`.*?`|.)*?)~~/,TEXT_ESCAPED_R=/^\\([^0-9A-Za-z\s])/,TEXT_PLAIN_R=/^[\s\S]+?(?=[^0-9A-Z\s\u00c0-\uffff&;.()'"]|\d+\.|\n\n| {2,}\n|\w+:\S|$)/i,TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R=/(^\n+|\n+$|\s+$)/g,HTML_LEFT_TRIM_AMOUNT_R=/^([ \t]*)/,UNESCAPE_URL_R=/\\([^0-9A-Z\s])/gi,LIST_BULLET='(?:[*+-]|\\d+\\.)',LIST_ITEM_PREFIX='( *)((?:[*+-]|\\d+\\.)) +',LIST_ITEM_PREFIX_R=/^( *)((?:[*+-]|\d+\.)) +/,LIST_ITEM_R=/( *)((?:[*+-]|\d+\.)) +[^\n]*(?:\n(?!\1(?:[*+-]|\d+\.) )[^\n]*)*(\n|$)/gm,LIST_R=/^( *)((?:[*+-]|\d+\.)) [\s\S]+?(?:\n{2,}(?! )(?!\1(?:[*+-]|\d+\.) (?!(?:[*+-]|\d+\.) ))\n*|\s*\n*$)/,LINK_INSIDE='(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*',LINK_HREF_AND_TITLE='\\s*<?((?:[^\\s\\\\]|\\\\.)*?)>?(?:\\s+[\'"]([\\s\\S]*?)[\'"])?\\s*',LINK_R=/^\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*<?((?:[^\s\\]|\\.)*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*\)/,IMAGE_R=/^!\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*<?((?:[^\s\\]|\\.)*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*\)/,BLOCK_SYNTAXES=[BLOCKQUOTE_R,CODE_BLOCK_R,CODE_BLOCK_FENCED_R,HEADING_R,HEADING_SETEXT_R,HTML_BLOCK_ELEMENT_R,HTML_COMMENT_R,HTML_SELF_CLOSING_ELEMENT_R,LIST_ITEM_R,LIST_R,NP_TABLE_R,PARAGRAPH_R];function containsBlockSyntax(a){return BLOCK_SYNTAXES.some(function(b){return b.test(a)})}function slugify(a){return a.replace(/[ÀÁÂÃÄÅàáâãä忯]/g,'a').replace(/[çÇ]/g,'c').replace(/[ðÐ]/g,'d').replace(/[ÈÉÊËéèêë]/g,'e').replace(/[ÏïÎîÍíÌì]/g,'i').replace(/[Ññ]/g,'n').replace(/[øØœŒÕõÔôÓóÒò]/g,'o').replace(/[ÜüÛûÚúÙù]/g,'u').replace(/[ŸÿÝý]/g,'y').replace(/[^a-z0-9- ]/gi,'').replace(/ /gi,'-').toLowerCase()}function parseTableAlignCapture(a){if(TABLE_RIGHT_ALIGN.test(a))return'right';return TABLE_CENTER_ALIGN.test(a)?'center':TABLE_LEFT_ALIGN.test(a)?'left':null}function parseTableRow(a,b,c){var d=c.inTable;c.inTable=!0;var e=b(a.trim(),c);c.inTable=d;var f=[[]];return e.forEach(function(a,b){a.type==='tableSeparator'?b!==0&&b!==e.length-1&&f.push([]):(a.type==='text'&&(e[b+1]==null||e[b+1].type==='tableSeparator')&&(a.content=a.content.replace(TABLE_CELL_END_TRIM,'')),f[f.length-1].push(a))}),f}function parseTableAlign(a){var b=a.replace(TABLE_TRIM_PIPES,'').split('|');return b.map(parseTableAlignCapture)}function parseTableCells(a,b,c){var d=a.trim().split('\n');return d.map(function(a){return parseTableRow(a,b,c)})}function parseTable(a,b,c){c.inline=!0;var d=parseTableRow(a[1],b,c),e=parseTableAlign(a[2],b,c),f=parseTableCells(a[3],b,c);return c.inline=!1,{align:e,cells:f,header:d,type:'table'}}function getTableStyle(a,b){return a.align[b]==null?{}:{textAlign:a.align[b]}}function normalizeAttributeKey(a){var b=a.indexOf('-');return b!==-1&&a.match(HTML_CUSTOM_ATTR_R)===null&&(a=a.replace(CAPTURE_LETTER_AFTER_HYPHEN,function(a,b){return b.toUpperCase()})),a}function attributeValueToJSXPropValue(a,b){return a==='style'?b.split(/;\s?/).reduce(function(a,b){var c=b.slice(0,b.indexOf(':')),d=c.replace(/(-[a-z])/g,function(a){return a[1].toUpperCase()});return a[d]=b.slice(c.length+1).trim(),a},{}):a==='href'?sanitizeUrl(b):(b.match(INTERPOLATION_R)&&(b=b.slice(1,b.length-1)),b==='true'||b!=='false'&&b)}function normalizeWhitespace(a){return a.replace(CR_NEWLINE_R,'\n').replace(FORMFEED_R,'').replace(TAB_R,' ')}function parserFor(a){function b(d,e){for(var f=[],g='';d;)for(var l=0;l<c.length;){var h=c[l],j=a[h],k=j.match(d,e,g);if(k){var i=k[0];d=d.substring(i.length);var m=j.parse(k,b,e);m.type==null&&(m.type=h),f.push(m),g=i;break}l++}return f}var c=Object.keys(a);return process.env.NODE_ENV!=='production'&&c.forEach(function(b){var c=a[b].order;process.env.NODE_ENV==='production'||typeof c=='number'&&isFinite(c)||console.warn('markdown-to-jsx: Invalid order for rule `'+b+'`: '+c)}),c.sort(function(b,c){var d=a[b].order,e=a[c].order;return d===e?b<c?-1:1:d-e}),function(a,c){return b(normalizeWhitespace(a),c)}}function inlineRegex(a){return function(b,c){return c.inline?a.exec(b):null}}function simpleInlineRegex(a){return function(b,c){return c.inline||c.simple?a.exec(b):null}}function blockRegex(a){return function(b,c){return c.inline||c.simple?null:a.exec(b)}}function anyScopeRegex(a){return function(b){return a.exec(b)}}function reactFor(a){return function b(c,d){if(d=d||{},Array.isArray(c)){for(var e=d.key,f=[],g=!1,h=0;h<c.length;h++){d.key=h;var j=b(c[h],d),k=typeof j=='string';k&&g?f[f.length-1]+=j:f.push(j),g=k}return d.key=e,f}return a(c,b,d)}}function sanitizeUrl(a){try{var b=decodeURIComponent(a);if(b.match(/^\s*javascript:/i))return process.env.NODE_ENV!=='production'&&console.warn('Anchor URL contains an unsafe JavaScript expression, it will not be rendered.',b),null}catch(b){return process.env.NODE_ENV!=='production'&&console.warn('Anchor URL could not be decoded due to malformed syntax or characters, it will not be rendered.',a),null}return a}function unescapeUrl(a){return a.replace(UNESCAPE_URL_R,'$1')}function parseInline(a,b,c){var d=c.inline||!1,e=c.simple||!1;c.inline=!0,c.simple=!0;var f=a(b,c);return c.inline=d,c.simple=e,f}function parseSimpleInline(a,b,c){var d=c.inline||!1,e=c.simple||!1;c.inline=!1,c.simple=!0;var f=a(b,c);return c.inline=d,c.simple=e,f}function parseBlock(a,b,c){return c.inline=!1,a(b+'\n\n',c)}function parseCaptureInline(a,b,c){return{content:parseInline(b,a[1],c)}}function captureNothing(){return{}}function renderNothing(){return null}function ruleOutput(a){return function(b,c,d){return a[b.type].react(b,c,d)}}function cx(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return b.filter(Boolean).join(' ')}function get(a,b,c){for(var d=a,e=b.split('.');e.length&&(d=d[e[0]],d!==void 0);)e.shift();return d||c}function getTag(a,b){var c=get(b,a);return c?typeof c=='function'||(typeof c=='undefined'?'undefined':_typeof(c))==='object'&&'render'in c?c:get(b,a+'.component',a):a}var PARSE_PRIORITY_MAX=1,PARSE_PRIORITY_HIGH=2,PARSE_PRIORITY_MED=3,PARSE_PRIORITY_LOW=4,PARSE_PRIORITY_MIN=5;export function compiler(a,b){function d(a,c){for(var d=get(b.overrides,a+'.props',{}),e=arguments.length,g=Array(e>2?e-2:0),h=2;h<e;h++)g[h-2]=arguments[h];return f.apply(void 0,[getTag(a,b.overrides),_extends({},c,d,{className:cx(c&&c.className,d.className)||void 0})].concat(g))}function c(a){var c=!1;b.forceInline?c=!0:!b.forceBlock&&(c=SHOULD_RENDER_AS_BLOCK_R.test(a)===!1);var e=k(j(c?a:a.replace(TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R,'')+'\n\n',{inline:c})),f=void 0;return e.length>1?f=c?d('span',{key:'outer'},e):d('div',{key:'outer'},e):e.length===1?(f=e[0],typeof f=='string'&&(f=d('span',{key:'outer'},f))):f=d('span',{key:'outer'}),f}function e(a){var b=a.match(ATTR_EXTRACTOR_R);return b?b.reduce(function(a,b,d){var e=b.indexOf('=');if(e!==-1){var f=normalizeAttributeKey(b.slice(0,e)).trim(),g=unquote(b.slice(e+1).trim()),h=ATTRIBUTE_TO_JSX_PROP_MAP[f]||f,i=a[h]=attributeValueToJSXPropValue(f,g);(HTML_BLOCK_ELEMENT_R.test(i)||HTML_SELF_CLOSING_ELEMENT_R.test(i))&&(a[h]=React.cloneElement(c(i.trim()),{key:d}))}else a[ATTRIBUTE_TO_JSX_PROP_MAP[b]||b]=!0;return a},{}):void 0}b=b||{},b.overrides=b.overrides||{},b.slugify=b.slugify||slugify,b.namedCodesToUnicode=b.namedCodesToUnicode?_extends({},namedCodesToUnicode,b.namedCodesToUnicode):namedCodesToUnicode;var f=b.createElement||React.createElement;if(process.env.NODE_ENV!=='production'){if(typeof a!='string')throw new Error('markdown-to-jsx: the first argument must be\n a string');if(Object.prototype.toString.call(b.overrides)!=='[object Object]')throw new Error('markdown-to-jsx: options.overrides (second argument property) must be\n undefined or an object literal with shape:\n {\n htmltagname: {\n component: string|ReactComponent(optional),\n props: object(optional)\n }\n }')}var g=[],h={},i={blockQuote:{match:blockRegex(BLOCKQUOTE_R),order:PARSE_PRIORITY_HIGH,parse:function d(a,b,c){return{content:b(a[0].replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R,''),c)}},react:function e(a,b,c){return d('blockquote',{key:c.key},b(a.content,c))}},breakLine:{match:anyScopeRegex(BREAK_LINE_R),order:PARSE_PRIORITY_HIGH,parse:captureNothing,react:function e(a,b,c){return d('br',{key:c.key})}},breakThematic:{match:blockRegex(BREAK_THEMATIC_R),order:PARSE_PRIORITY_HIGH,parse:captureNothing,react:function e(a,b,c){return d('hr',{key:c.key})}},codeBlock:{match:blockRegex(CODE_BLOCK_R),order:PARSE_PRIORITY_MAX,parse:function c(a){var b=a[0].replace(/^ {4}/gm,'').replace(/\n+$/,'');return{content:b,lang:void 0}},react:function e(a,b,c){return d('pre',{key:c.key},d('code',{className:a.lang?'lang-'+a.lang:''},a.content))}},codeFenced:{match:blockRegex(CODE_BLOCK_FENCED_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:a[3],lang:a[2]||void 0,type:'codeBlock'}}},codeInline:{match:simpleInlineRegex(CODE_INLINE_R),order:PARSE_PRIORITY_LOW,parse:function b(a){return{content:a[2]}},react:function e(a,b,c){return d('code',{key:c.key},a.content)}},footnote:{match:blockRegex(FOOTNOTE_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return g.push({footnote:a[2],identifier:a[1]}),{}},react:renderNothing},footnoteReference:{match:inlineRegex(FOOTNOTE_REFERENCE_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{content:a[1],target:'#'+a[1]}},react:function e(a,b,c){return d('a',{key:c.key,href:sanitizeUrl(a.target)},d('sup',{key:c.key},a.content))}},gfmTask:{match:inlineRegex(GFM_TASK_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{completed:a[1].toLowerCase()==='x'}},react:function e(a,b,c){return d('input',{checked:a.completed,key:c.key,readOnly:!0,type:'checkbox'})}},heading:{match:blockRegex(HEADING_R),order:PARSE_PRIORITY_HIGH,parse:function e(a,c,d){return{content:parseInline(c,a[2],d),id:b.slugify(a[2]),level:a[1].length}},react:function f(a,b,c){var e='h'+a.level;return d(e,{id:a.id,key:c.key},b(a.content,c))}},headingSetext:{match:blockRegex(HEADING_SETEXT_R),order:PARSE_PRIORITY_MAX,parse:function d(a,b,c){return{content:parseInline(b,a[1],c),level:a[2]==='='?1:2,type:'heading'}}},htmlBlock:{match:anyScopeRegex(HTML_BLOCK_ELEMENT_R),order:PARSE_PRIORITY_HIGH,parse:function l(a,b,c){var d=a[3].match(HTML_LEFT_TRIM_AMOUNT_R),f=d[1],g=new RegExp('^'+f,'gm'),h=a[3].replace(g,''),i=containsBlockSyntax(h)?parseBlock:parseInline,j=a[1].toLowerCase(),k=DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(j)!==-1;return{attrs:e(a[2]),content:k?a[3]:i(b,h,c),noInnerParse:k,tag:k?j:a[1]}},react:function e(a,b,c){return d(a.tag,_extends({key:c.key},a.attrs),a.noInnerParse?a.content:b(a.content,c))}},htmlComment:{match:anyScopeRegex(HTML_COMMENT_R),order:PARSE_PRIORITY_HIGH,parse:function a(){return{}},react:renderNothing},htmlSelfClosing:{match:anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{attrs:e(a[2]||''),tag:a[1]}},react:function e(a,b,c){return d(a.tag,_extends({},a.attrs,{key:c.key}))}},image:{match:simpleInlineRegex(IMAGE_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{alt:a[1],target:unescapeUrl(a[2]),title:a[3]}},react:function e(a,b,c){return d('img',{key:c.key,alt:a.alt||void 0,title:a.title||void 0,src:sanitizeUrl(a.target)})}},link:{match:inlineRegex(LINK_R,!1),order:PARSE_PRIORITY_LOW,parse:function d(a,b,c){return{content:parseSimpleInline(b,a[1],c),target:unescapeUrl(a[2]),title:a[3]}},react:function e(a,b,c){return d('a',{key:c.key,href:sanitizeUrl(a.target),title:a.title},b(a.content,c))}},linkAngleBraceStyleDetector:{match:inlineRegex(LINK_AUTOLINK_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:[{content:a[1],type:'text'}],target:a[1],type:'link'}}},linkBareUrlDetector:{match:inlineRegex(LINK_AUTOLINK_BARE_URL_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{content:[{content:a[1],type:'text'}],target:a[1],title:void 0,type:'link'}}},linkMailtoDetector:{match:inlineRegex(LINK_AUTOLINK_MAILTO_R),order:PARSE_PRIORITY_MAX,parse:function d(a){var b=a[1],c=a[1];return AUTOLINK_MAILTO_CHECK_R.test(c)||(c='mailto:'+c),{content:[{content:b.replace('mailto:',''),type:'text'}],target:c,type:'link'}}},list:{match:function f(a,b,c){var d=LIST_LOOKBEHIND_R.exec(c),e=b._list||!b.inline;return d&&e?(a=d[1]+a,LIST_R.exec(a)):null},order:PARSE_PRIORITY_HIGH,parse:function j(a,b,c){var d=a[2],e=d.length>1,f=e?+d:void 0,g=a[0].replace(BLOCK_END_R,'\n').match(LIST_ITEM_R),h=!1,i=g.map(function(a,d){var e=LIST_ITEM_PREFIX_R.exec(a)[0].length,f=new RegExp('^ {1,'+e+'}','gm'),i=a.replace(f,'').replace(LIST_ITEM_PREFIX_R,''),j=d===g.length-1,k=i.indexOf('\n\n')!==-1,l=k||j&&h;h=l;var m=c.inline,n=c._list;c._list=!0;var o;l?(c.inline=!1,o=i.replace(LIST_ITEM_END_R,'\n\n')):(c.inline=!0,o=i.replace(LIST_ITEM_END_R,''));var p=b(o,c);return c.inline=m,c._list=n,p});return{items:i,ordered:e,start:f}},react:function f(a,b,c){var e=a.ordered?'ol':'ul';return d(e,{key:c.key,start:a.start},a.items.map(function(a,e){return d('li',{key:e},b(a,c))}))}},newlineCoalescer:{match:blockRegex(CONSECUTIVE_NEWLINE_R),order:PARSE_PRIORITY_LOW,parse:captureNothing,react:function a(){return'\n'}},paragraph:{match:blockRegex(PARAGRAPH_R),order:PARSE_PRIORITY_LOW,parse:parseCaptureInline,react:function e(a,b,c){return d('p',{key:c.key},b(a.content,c))}},ref:{match:inlineRegex(REFERENCE_IMAGE_OR_LINK),order:PARSE_PRIORITY_MAX,parse:function b(a){return h[a[1]]={target:a[2],title:a[4]},{}},react:renderNothing},refImage:{match:simpleInlineRegex(REFERENCE_IMAGE_R),order:PARSE_PRIORITY_MAX,parse:function b(a){return{alt:a[1]||void 0,ref:a[2]}},react:function e(a,b,c){return d('img',{key:c.key,alt:a.alt,src:sanitizeUrl(h[a.ref].target),title:h[a.ref].title})}},refLink:{match:inlineRegex(REFERENCE_LINK_R),order:PARSE_PRIORITY_MAX,parse:function d(a,b,c){return{content:b(a[1],c),fallbackContent:b(a[0].replace(SQUARE_BRACKETS_R,'\\$1'),c),ref:a[2]}},react:function e(a,b,c){return h[a.ref]?d('a',{key:c.key,href:sanitizeUrl(h[a.ref].target),title:h[a.ref].title},b(a.content,c)):d('span',{key:c.key},b(a.fallbackContent,c))}},table:{match:blockRegex(NP_TABLE_R),order:PARSE_PRIORITY_HIGH,parse:parseTable,react:function f(a,b,e){return d('table',{key:e.key},d('thead',null,d('tr',null,a.header.map(function(c,f){return d('th',{key:f,style:getTableStyle(a,f)},b(c,e))}))),d('tbody',null,a.cells.map(function(c,f){return d('tr',{key:f},c.map(function(f,g){return d('td',{key:g,style:getTableStyle(a,g)},b(f,e))}))})))}},tableSeparator:{match:function c(a,b){return b.inTable?TABLE_SEPARATOR_R.exec(a):null},order:PARSE_PRIORITY_HIGH,parse:function a(){return{type:'tableSeparator'}},react:function a(){return' | '}},text:{match:anyScopeRegex(TEXT_PLAIN_R),order:PARSE_PRIORITY_MIN,parse:function c(a){return{content:a[0].replace(HTML_CHAR_CODE_R,function(a,c){return b.namedCodesToUnicode[c]?b.namedCodesToUnicode[c]:a})}},react:function b(a){return a.content}},textBolded:{match:simpleInlineRegex(TEXT_BOLD_R),order:PARSE_PRIORITY_MED,parse:function d(a,b,c){return{content:b(a[2],c)}},react:function e(a,b,c){return d('strong',{key:c.key},b(a.content,c))}},textEmphasized:{match:simpleInlineRegex(TEXT_EMPHASIZED_R),order:PARSE_PRIORITY_LOW,parse:function d(a,b,c){return{content:b(a[2],c)}},react:function e(a,b,c){return d('em',{key:c.key},b(a.content,c))}},textEscaped:{match:simpleInlineRegex(TEXT_ESCAPED_R),order:PARSE_PRIORITY_HIGH,parse:function b(a){return{content:a[1],type:'text'}}},textStrikethroughed:{match:simpleInlineRegex(TEXT_STRIKETHROUGHED_R),order:PARSE_PRIORITY_LOW,parse:parseCaptureInline,react:function e(a,b,c){return d('del',{key:c.key},b(a.content,c))}}},j=parserFor(i),k=reactFor(ruleOutput(i)),l=c(a);return g.length&&l.props.children.push(d('footer',{key:'footer'},g.map(function(a){return d('div',{id:a.identifier,key:a.identifier},a.identifier,k(j(a.footnote,{inline:!0})))}))),l}export default function Markdown(a){var b=a.children,c=a.options,d=_objectWithoutProperties(a,['children','options']);return React.cloneElement(compiler(b,c),d)}if(process.env.NODE_ENV!=='production'){var PropTypes=require('prop-types');Markdown.propTypes={children:PropTypes.string.isRequired,options:PropTypes.object}}
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=esm.js.map
|
package/dist/esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.js"],"names":[],"mappings":"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","file":"esm.js","sourcesContent":["/* @jsx h */\n/**\n * markdown-to-jsx@6 is a fork of [simple-markdown v0.2.2](https://github.com/Khan/simple-markdown)\n * from Khan Academy. Thank you Khan devs for making such an awesome and extensible\n * parsing infra... without it, half of the optimizations here wouldn't be feasible. 🙏🏼\n */\nimport React from 'react';\nimport unquote from 'unquote';\n\n/** TODO: Drop for React 16? */\nconst ATTRIBUTE_TO_JSX_PROP_MAP = {\n accesskey: 'accessKey',\n allowfullscreen: 'allowFullScreen',\n allowtransparency: 'allowTransparency',\n autocomplete: 'autoComplete',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n charset: 'charSet',\n class: 'className',\n classid: 'classId',\n colspan: 'colSpan',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n crossorigin: 'crossOrigin',\n enctype: 'encType',\n for: 'htmlFor',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formmethod: 'formMethod',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n hreflang: 'hrefLang',\n inputmode: 'inputMode',\n keyparams: 'keyParams',\n keytype: 'keyType',\n marginheight: 'marginHeight',\n marginwidth: 'marginWidth',\n maxlength: 'maxLength',\n mediagroup: 'mediaGroup',\n minlength: 'minLength',\n novalidate: 'noValidate',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n rowspan: 'rowSpan',\n spellcheck: 'spellCheck',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n tabindex: 'tabIndex',\n usemap: 'useMap',\n};\n\nconst namedCodesToUnicode = {\n amp: '\\u0026',\n apos: '\\u0027',\n gt: '\\u003e',\n lt: '\\u003c',\n nbsp: '\\u00a0',\n quot: '\\u201c',\n};\n\nconst DO_NOT_PROCESS_HTML_ELEMENTS = ['style', 'script'];\n\n/**\n * the attribute extractor regex looks for a valid attribute name,\n * followed by an equal sign (whitespace around the equal sign is allowed), followed\n * by one of the following:\n *\n * 1. a single quote-bounded string, e.g. 'foo'\n * 2. a double quote-bounded string, e.g. \"bar\"\n * 3. an interpolation, e.g. {something}\n *\n * JSX can be be interpolated into itself and is passed through the compiler using\n * the same options and setup as the current run.\n *\n * <Something children={<SomeOtherThing />} />\n * ==================\n * ↳ children: [<SomeOtherThing />]\n *\n * Otherwise, interpolations are handled as strings or simple booleans\n * unless HTML syntax is detected.\n *\n * <Something color={green} disabled={true} />\n * ===== ====\n * ↓ ↳ disabled: true\n * ↳ color: \"green\"\n *\n * Numbers are not parsed at this time due to complexities around int, float,\n * and the upcoming bigint functionality that would make handling it unwieldy.\n * Parse the string in your component as desired.\n *\n * <Something someBigNumber={123456789123456789} />\n * ==================\n * ↳ someBigNumber: \"123456789123456789\"\n */\nconst ATTR_EXTRACTOR_R = /([-A-Z0-9_:]+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|(?:\\{((?:\\\\.|{[^}]*?}|[^}])*)\\})))?/gi;\n\n/** TODO: Write explainers for each of these */\n\nconst AUTOLINK_MAILTO_CHECK_R = /mailto:/i;\nconst BLOCK_END_R = /\\n{2,}$/;\nconst BLOCKQUOTE_R = /^( *>[^\\n]+(\\n[^\\n]+)*\\n*)+\\n{2,}/;\nconst BLOCKQUOTE_TRIM_LEFT_MULTILINE_R = /^ *> ?/gm;\nconst BREAK_LINE_R = /^ {2,}\\n/;\nconst BREAK_THEMATIC_R = /^(?:( *[-*_]) *){3,}(?:\\n *)+\\n/;\nconst CODE_BLOCK_FENCED_R = /^\\s*(`{3,}|~{3,}) *(\\S+)? *\\n([\\s\\S]+?)\\s*\\1 *(?:\\n *)+\\n?/;\nconst CODE_BLOCK_R = /^(?: {4}[^\\n]+\\n*)+(?:\\n *)+\\n?/;\nconst CODE_INLINE_R = /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/;\nconst CONSECUTIVE_NEWLINE_R = /^(?:\\n *)*\\n/;\nconst CR_NEWLINE_R = /\\r\\n?/g;\nconst FOOTNOTE_R = /^\\[\\^(.*)\\](:.*)\\n/;\nconst FOOTNOTE_REFERENCE_R = /^\\[\\^(.*)\\]/;\nconst FORMFEED_R = /\\f/g;\nconst GFM_TASK_R = /^\\s*?\\[(x|\\s)\\]/;\nconst HEADING_R = /^ *(#{1,6}) *([^\\n]+)\\n{0,2}/;\nconst HEADING_SETEXT_R = /^([^\\n]+)\\n *(=|-){3,} *(?:\\n *)+\\n/;\n\n/**\n * Explanation:\n *\n * 1. Look for a starting tag, preceeded by any amount of spaces\n * ^ *<\n *\n * 2. Capture the tag name (capture 1)\n * ([^ >/]+)\n *\n * 3. Ignore a space after the starting tag and capture the attribute portion of the tag (capture 2)\n * ?([^>]*)\\/{0}>\n *\n * 4. Ensure a matching closing tag is present in the rest of the input string\n * (?=[\\s\\S]*<\\/\\1>)\n *\n * 5. Capture everything until the matching closing tag -- this might include additional pairs\n * of the same tag type found in step 2 (capture 3)\n * ((?:[\\s\\S]*?(?:<\\1[^>]*>[\\s\\S]*?<\\/\\1>)*[\\s\\S]*?)*?)<\\/\\1>\n *\n * 6. Capture excess newlines afterward\n * \\n*\n */\nconst HTML_BLOCK_ELEMENT_R = /^ *(?!<[a-z][^ >/]* ?\\/>)<([a-z][^ >/]*) ?([^>]*)\\/{0}>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1)[\\s\\S])*?)<\\/\\1>\\n*/i;\n\nconst HTML_CHAR_CODE_R = /&([a-z]+);/g;\n\nconst HTML_COMMENT_R = /^<!--.*?-->/;\n\n/**\n * borrowed from React 15(https://github.com/facebook/react/blob/894d20744cba99383ffd847dbd5b6e0800355a5c/src/renderers/dom/shared/HTMLDOMPropertyConfig.js)\n */\nconst HTML_CUSTOM_ATTR_R = /^(data|aria|x)-[a-z_][a-z\\d_.-]*$/;\n\nconst HTML_SELF_CLOSING_ELEMENT_R = /^ *<([a-z][a-z0-9:]*)(?:\\s+((?:<.*?>|[^>])*))?\\/?>(?!<\\/\\1>)(\\s*\\n)?/i;\nconst INTERPOLATION_R = /^\\{.*\\}$/;\nconst LINK_AUTOLINK_BARE_URL_R = /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/;\nconst LINK_AUTOLINK_MAILTO_R = /^<([^ >]+@[^ >]+)>/;\nconst LINK_AUTOLINK_R = /^<([^ >]+:\\/[^ >]+)>/;\nconst LIST_ITEM_END_R = / *\\n+$/;\nconst LIST_LOOKBEHIND_R = /(?:^|\\n)( *)$/;\nconst CAPTURE_LETTER_AFTER_HYPHEN = /-([a-z])?/gi;\nconst NP_TABLE_R = /^(.*\\|?.*)\\n *(\\|? *[-:]+ *\\|[-| :]*)\\n((?:.*\\|.*\\n)*)\\n?/;\nconst PARAGRAPH_R = /^((?:[^\\n]|\\n(?! *\\n))+)(?:\\n *)+\\n/;\nconst REFERENCE_IMAGE_OR_LINK = /^\\[([^\\]]*)\\]:\\s*(\\S+)\\s*(\"([^\"]*)\")?/;\nconst REFERENCE_IMAGE_R = /^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nconst REFERENCE_LINK_R = /^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nconst SQUARE_BRACKETS_R = /(\\[|\\])/g;\nconst SHOULD_RENDER_AS_BLOCK_R = /(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s)/;\nconst TAB_R = /\\t/g;\nconst TABLE_TRIM_PIPES = /(^ *\\||\\| *$)/g;\nconst TABLE_CENTER_ALIGN = /^ *:-+: *$/;\nconst TABLE_LEFT_ALIGN = /^ *:-+ *$/;\nconst TABLE_RIGHT_ALIGN = /^ *-+: *$/;\nconst TABLE_ROW_SPLIT = / *\\| */;\n\nconst TEXT_BOLD_R = /^([*_])\\1((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\\1\\1(?!\\1)/;\nconst TEXT_EMPHASIZED_R = /^([*_])((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\\1(?!\\1)/;\nconst TEXT_STRIKETHROUGHED_R = /^~~((?:\\[.*?\\]|<.*?>(?:.*?<.*?>)?|`.*?`|.)*?)~~/;\n\nconst TEXT_ESCAPED_R = /^\\\\([^0-9A-Za-z\\s])/;\nconst TEXT_PLAIN_R = /^[\\s\\S]+?(?=[^0-9A-Z\\s\\u00c0-\\uffff&;.()'\"]|\\d+\\.|\\n\\n| {2,}\\n|\\w+:\\S|$)/i;\nconst TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R = /(^\\n+|(\\n|\\s)+$)/g;\n\nconst HTML_LEFT_TRIM_AMOUNT_R = /^([ \\t]*)/;\n\nconst UNESCAPE_URL_R = /\\\\([^0-9A-Z\\s])/gi;\n\n// recognize a `*` `-`, `+`, `1.`, `2.`... list bullet\nconst LIST_BULLET = '(?:[*+-]|\\\\d+\\\\.)';\n\n// recognize the start of a list item:\n// leading space plus a bullet plus a space (` * `)\nconst LIST_ITEM_PREFIX = '( *)(' + LIST_BULLET + ') +';\nconst LIST_ITEM_PREFIX_R = new RegExp('^' + LIST_ITEM_PREFIX);\n\n// recognize an individual list item:\n// * hi\n// this is part of the same item\n//\n// as is this, which is a new paragraph in the same item\n//\n// * but this is not part of the same item\nconst LIST_ITEM_R = new RegExp(\n LIST_ITEM_PREFIX +\n '[^\\\\n]*(?:\\\\n' +\n '(?!\\\\1' +\n LIST_BULLET +\n ' )[^\\\\n]*)*(\\\\n|$)',\n 'gm'\n);\n\n// check whether a list item has paragraphs: if it does,\n// we leave the newlines at the end\nconst LIST_R = new RegExp(\n '^( *)(' +\n LIST_BULLET +\n ') ' +\n '[\\\\s\\\\S]+?(?:\\\\n{2,}(?! )' +\n '(?!\\\\1' +\n LIST_BULLET +\n ' (?!' +\n LIST_BULLET +\n ' ))\\\\n*' +\n // the \\\\s*$ here is so that we can parse the inside of nested\n // lists, where our content might end before we receive two `\\n`s\n '|\\\\s*\\\\n*$)'\n);\n\nconst LINK_INSIDE = '(?:\\\\[[^\\\\]]*\\\\]|[^\\\\[\\\\]]|\\\\](?=[^\\\\[]*\\\\]))*';\nconst LINK_HREF_AND_TITLE =\n '\\\\s*<?((?:[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+[\\'\"]([\\\\s\\\\S]*?)[\\'\"])?\\\\s*';\n\nconst LINK_R = new RegExp(\n '^\\\\[(' + LINK_INSIDE + ')\\\\]\\\\(' + LINK_HREF_AND_TITLE + '\\\\)'\n);\n\nconst IMAGE_R = new RegExp(\n '^!\\\\[(' + LINK_INSIDE + ')\\\\]\\\\(' + LINK_HREF_AND_TITLE + '\\\\)'\n);\n\nconst BLOCK_SYNTAXES = [\n BLOCKQUOTE_R,\n CODE_BLOCK_R,\n CODE_BLOCK_FENCED_R,\n HEADING_R,\n HEADING_SETEXT_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_COMMENT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n LIST_ITEM_R,\n LIST_R,\n NP_TABLE_R,\n PARAGRAPH_R,\n];\n\nfunction containsBlockSyntax(input) {\n return BLOCK_SYNTAXES.some(r => r.test(input));\n}\n\n// based on https://stackoverflow.com/a/18123682/1141611\n// not complete, but probably good enough\nfunction slugify(str) {\n return str\n .replace(/[ÀÁÂÃÄÅàáâãä忯]/g, 'a')\n .replace(/[çÇ]/g, 'c')\n .replace(/[ðÐ]/g, 'd')\n .replace(/[ÈÉÊËéèêë]/g, 'e')\n .replace(/[ÏïÎîÍíÌì]/g, 'i')\n .replace(/[Ññ]/g, 'n')\n .replace(/[øØœŒÕõÔôÓóÒò]/g, 'o')\n .replace(/[ÜüÛûÚúÙù]/g, 'u')\n .replace(/[ŸÿÝý]/g, 'y')\n .replace(/[^a-z0-9- ]/gi, '')\n .replace(/ /gi, '-')\n .toLowerCase();\n}\n\nfunction parseTableAlignCapture(alignCapture) {\n if (TABLE_RIGHT_ALIGN.test(alignCapture)) {\n return 'right';\n } else if (TABLE_CENTER_ALIGN.test(alignCapture)) {\n return 'center';\n } else if (TABLE_LEFT_ALIGN.test(alignCapture)) {\n return 'left';\n }\n\n return null;\n}\n\nfunction parseTableHeader(capture, parse, state) {\n const headerText = capture[1]\n .replace(TABLE_TRIM_PIPES, '')\n .trim()\n .split(TABLE_ROW_SPLIT);\n\n return headerText.map(function(text) {\n return parse(text, state);\n });\n}\n\nfunction parseTableAlign(capture /*, parse, state*/) {\n const alignText = capture[2]\n .replace(TABLE_TRIM_PIPES, '')\n .trim()\n .split(TABLE_ROW_SPLIT);\n\n return alignText.map(parseTableAlignCapture);\n}\n\nfunction parseTableCells(capture, parse, state) {\n const rowsText = capture[3]\n .trim()\n .split('\\n');\n\n return rowsText.map(function(rowText) {\n return rowText\n .replace(TABLE_TRIM_PIPES, '')\n .split(TABLE_ROW_SPLIT)\n .map(function(text) {\n return parse(text.trim(), state);\n });\n });\n}\n\nfunction parseTable(capture, parse, state) {\n state.inline = true;\n const header = parseTableHeader(capture, parse, state);\n const align = parseTableAlign(capture, parse, state);\n const cells = parseTableCells(capture, parse, state);\n state.inline = false;\n\n return {\n align: align,\n cells: cells,\n header: header,\n type: 'table',\n };\n}\n\nfunction getTableStyle(node, colIndex) {\n return node.align[colIndex] == null\n ? {}\n : {\n textAlign: node.align[colIndex],\n };\n}\n\n/** TODO: remove for react 16 */\nfunction normalizeAttributeKey(key) {\n const hyphenIndex = key.indexOf('-');\n\n if (hyphenIndex !== -1 && key.match(HTML_CUSTOM_ATTR_R) === null) {\n key = key.replace(CAPTURE_LETTER_AFTER_HYPHEN, function(_, letter) {\n return letter.toUpperCase();\n });\n }\n\n return key;\n}\n\nfunction attributeValueToJSXPropValue(key, value) {\n if (key === 'style') {\n return value.split(/;\\s?/).reduce(function(styles, kvPair) {\n const key = kvPair.slice(0, kvPair.indexOf(':'));\n\n // snake-case to camelCase\n // also handles PascalCasing vendor prefixes\n const camelCasedKey = key.replace(/(-[a-z])/g, substr =>\n substr[1].toUpperCase()\n );\n\n // key.length + 1 to skip over the colon\n styles[camelCasedKey] = kvPair.slice(key.length + 1).trim();\n\n return styles;\n }, {});\n } else if (value.match(INTERPOLATION_R)) {\n // return as a string and let the consumer decide what to do with it\n value = value.slice(1, value.length - 1);\n }\n\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n }\n\n return value;\n}\n\nfunction normalizeWhitespace(source) {\n return source\n .replace(CR_NEWLINE_R, '\\n')\n .replace(FORMFEED_R, '')\n .replace(TAB_R, ' ');\n}\n\n/**\n * Creates a parser for a given set of rules, with the precedence\n * specified as a list of rules.\n *\n * @rules: an object containing\n * rule type -> {match, order, parse} objects\n * (lower order is higher precedence)\n * (Note: `order` is added to defaultRules after creation so that\n * the `order` of defaultRules in the source matches the `order`\n * of defaultRules in terms of `order` fields.)\n *\n * @returns The resulting parse function, with the following parameters:\n * @source: the input source string to be parsed\n * @state: an optional object to be threaded through parse\n * calls. Allows clients to add stateful operations to\n * parsing, such as keeping track of how many levels deep\n * some nesting is. For an example use-case, see passage-ref\n * parsing in src/widgets/passage/passage-markdown.jsx\n */\nfunction parserFor(rules) {\n // Sorts rules in order of increasing order, then\n // ascending rule name in case of ties.\n let ruleList = Object.keys(rules);\n\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n ruleList.forEach(function(type) {\n let order = rules[type].order;\n if (\n process.env.NODE_ENV !== 'production' &&\n (typeof order !== 'number' || !isFinite(order))\n ) {\n console.warn(\n 'markdown-to-jsx: Invalid order for rule `' + type + '`: ' + order\n );\n }\n });\n }\n\n ruleList.sort(function(typeA, typeB) {\n let orderA = rules[typeA].order;\n let orderB = rules[typeB].order;\n\n // First sort based on increasing order\n if (orderA !== orderB) {\n return orderA - orderB;\n\n // Then based on increasing unicode lexicographic ordering\n } else if (typeA < typeB) {\n return -1;\n }\n\n return 1;\n });\n\n function nestedParse(source, state) {\n let result = [];\n\n // We store the previous capture so that match functions can\n // use some limited amount of lookbehind. Lists use this to\n // ensure they don't match arbitrary '- ' or '* ' in inline\n // text (see the list rule for more information).\n let prevCapture = '';\n while (source) {\n let i = 0;\n while (i < ruleList.length) {\n const ruleType = ruleList[i];\n const rule = rules[ruleType];\n const capture = rule.match(source, state, prevCapture);\n\n if (capture) {\n const currCaptureString = capture[0];\n source = source.substring(currCaptureString.length);\n const parsed = rule.parse(capture, nestedParse, state);\n\n // We also let rules override the default type of\n // their parsed node if they would like to, so that\n // there can be a single output function for all links,\n // even if there are several rules to parse them.\n if (parsed.type == null) {\n parsed.type = ruleType;\n }\n\n result.push(parsed);\n\n prevCapture = currCaptureString;\n break;\n }\n\n i++;\n }\n }\n\n return result;\n }\n\n return function outerParse(source, state) {\n return nestedParse(normalizeWhitespace(source), state);\n };\n}\n\n// Creates a match function for an inline scoped or simple element from a regex\nfunction inlineRegex(regex) {\n return function match(source, state) {\n if (state.inline) {\n return regex.exec(source);\n } else {\n return null;\n }\n };\n}\n\n// basically any inline element except links\nfunction simpleInlineRegex(regex) {\n return function match(source, state) {\n if (state.inline || state.simple) {\n return regex.exec(source);\n } else {\n return null;\n }\n };\n}\n\n// Creates a match function for a block scoped element from a regex\nfunction blockRegex(regex) {\n return function match(source, state) {\n if (state.inline || state.simple) {\n return null;\n } else {\n return regex.exec(source);\n }\n };\n}\n\n// Creates a match function from a regex, ignoring block/inline scope\nfunction anyScopeRegex(regex) {\n return function match(source /*, state*/) {\n return regex.exec(source);\n };\n}\n\nfunction reactFor(outputFunc) {\n return function nestedReactOutput(ast, state) {\n state = state || {};\n if (Array.isArray(ast)) {\n const oldKey = state.key;\n const result = [];\n\n // map nestedOutput over the ast, except group any text\n // nodes together into a single string output.\n let lastWasString = false;\n\n for (let i = 0; i < ast.length; i++) {\n state.key = i;\n\n const nodeOut = nestedReactOutput(ast[i], state);\n const isString = typeof nodeOut === 'string';\n\n if (isString && lastWasString) {\n result[result.length - 1] += nodeOut;\n } else {\n result.push(nodeOut);\n }\n\n lastWasString = isString;\n }\n\n state.key = oldKey;\n\n return result;\n }\n\n return outputFunc(ast, nestedReactOutput, state);\n };\n}\n\nfunction sanitizeUrl(url) {\n try {\n const decoded = decodeURIComponent(url);\n\n if (decoded.match(/^\\s*javascript:/i)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Anchor URL contains an unsafe JavaScript expression, it will not be rendered.',\n decoded\n );\n }\n\n return null;\n }\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Anchor URL could not be decoded due to malformed syntax or characters, it will not be rendered.',\n url\n );\n }\n\n // decodeURIComponent sometimes throws a URIError\n // See `decodeURIComponent('a%AFc');`\n // http://stackoverflow.com/questions/9064536/javascript-decodeuricomponent-malformed-uri-exception\n return null;\n }\n\n return url;\n}\n\nfunction unescapeUrl(rawUrlString) {\n return rawUrlString.replace(UNESCAPE_URL_R, '$1');\n}\n\n/**\n * Everything inline, including links.\n */\nfunction parseInline(parse, content, state) {\n const isCurrentlyInline = state.inline || false;\n const isCurrentlySimple = state.simple || false;\n state.inline = true;\n state.simple = true;\n const result = parse(content, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n return result;\n}\n\n/**\n * Anything inline that isn't a link.\n */\nfunction parseSimpleInline(parse, content, state) {\n const isCurrentlyInline = state.inline || false;\n const isCurrentlySimple = state.simple || false;\n state.inline = false;\n state.simple = true;\n const result = parse(content, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n return result;\n}\n\nfunction parseBlock(parse, content, state) {\n state.inline = false;\n return parse(content + '\\n\\n', state);\n}\n\nfunction parseCaptureInline(capture, parse, state) {\n return {\n content: parseInline(parse, capture[1], state),\n };\n}\n\nfunction captureNothing() {\n return {};\n}\n\nfunction renderNothing() {\n return null;\n}\n\nfunction ruleOutput(rules) {\n return function nestedRuleOutput(ast, outputFunc, state) {\n return rules[ast.type].react(ast, outputFunc, state);\n };\n}\n\nfunction cx(...args) {\n return args.filter(Boolean).join(' ');\n}\n\nfunction get(src, path, fb) {\n let ptr = src;\n const frags = path.split('.');\n\n while (frags.length) {\n ptr = ptr[frags[0]];\n\n if (ptr === undefined) break;\n else frags.shift();\n }\n\n return ptr || fb;\n}\n\nfunction getTag(tag, overrides) {\n const override = get(overrides, tag);\n\n if (!override) return tag;\n\n return typeof override === 'function' || (typeof override === 'object' && 'render' in override)\n ? override\n : get(overrides, `${tag}.component`, tag);\n}\n\n/**\n * anything that must scan the tree before everything else\n */\nconst PARSE_PRIORITY_MAX = 1;\n\n/**\n * scans for block-level constructs\n */\nconst PARSE_PRIORITY_HIGH = 2;\n\n/**\n * inline w/ more priority than other inline\n */\nconst PARSE_PRIORITY_MED = 3;\n\n/**\n * inline elements\n */\nconst PARSE_PRIORITY_LOW = 4;\n\n/**\n * bare text and stuff that is considered leftovers\n */\nconst PARSE_PRIORITY_MIN = 5;\n\nexport function compiler(markdown, options) {\n options = options || {};\n options.overrides = options.overrides || {};\n options.slugify = options.slugify || slugify;\n\n const createElementFn = options.createElement || React.createElement;\n\n // eslint-disable-next-line no-unused-vars\n function h(tag, props, ...children) {\n const overrideProps = get(options.overrides, `${tag}.props`, {});\n\n return createElementFn(\n getTag(tag, options.overrides),\n {\n ...props,\n ...overrideProps,\n className:\n cx(props && props.className, overrideProps.className) || undefined,\n },\n ...children\n );\n }\n\n function compile(input) {\n let inline = false;\n\n if (options.forceInline) {\n inline = true;\n } else if (!options.forceBlock) {\n /**\n * should not contain any block-level markdown like newlines, lists, headings,\n * thematic breaks, blockquotes, tables, etc\n */\n inline = SHOULD_RENDER_AS_BLOCK_R.test(input) === false;\n }\n\n const arr = emitter(\n parser(\n inline\n ? input\n : `${input.replace(TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R, '')}\\n\\n`,\n { inline }\n )\n );\n\n let jsx;\n if (arr.length > 1) {\n jsx = inline ? <span key=\"outer\">{arr}</span> : <div key=\"outer\">{arr}</div>;\n } else if (arr.length === 1) {\n jsx = arr[0];\n\n // TODO: remove this for React 16\n if (typeof jsx === 'string') {\n jsx = <span key=\"outer\">{jsx}</span>;\n }\n } else {\n // TODO: return null for React 16\n jsx = <span key=\"outer\" />;\n }\n\n return jsx;\n }\n\n function attrStringToMap(str) {\n const attributes = str.match(ATTR_EXTRACTOR_R);\n\n return attributes\n ? attributes.reduce(function(map, raw, index) {\n const delimiterIdx = raw.indexOf('=');\n\n if (delimiterIdx !== -1) {\n const key = normalizeAttributeKey(\n raw.slice(0, delimiterIdx)\n ).trim();\n const value = unquote(raw.slice(delimiterIdx + 1).trim());\n\n const mappedKey = ATTRIBUTE_TO_JSX_PROP_MAP[key] || key;\n const normalizedValue = (map[\n mappedKey\n ] = attributeValueToJSXPropValue(key, value));\n\n if (\n HTML_BLOCK_ELEMENT_R.test(normalizedValue) ||\n HTML_SELF_CLOSING_ELEMENT_R.test(normalizedValue)\n ) {\n map[mappedKey] = React.cloneElement(\n compile(normalizedValue.trim()),\n { key: index }\n );\n }\n } else {\n map[ATTRIBUTE_TO_JSX_PROP_MAP[raw] || raw] = true;\n }\n\n return map;\n }, {})\n : undefined;\n }\n\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n if (typeof markdown !== 'string') {\n throw new Error(`markdown-to-jsx: the first argument must be\n a string`);\n }\n\n if (\n Object.prototype.toString.call(options.overrides) !== '[object Object]'\n ) {\n throw new Error(`markdown-to-jsx: options.overrides (second argument property) must be\n undefined or an object literal with shape:\n {\n htmltagname: {\n component: string|ReactComponent(optional),\n props: object(optional)\n }\n }`);\n }\n }\n\n const footnotes = [];\n const refs = {};\n\n /**\n * each rule's react() output function goes through our custom h() JSX pragma;\n * this allows the override functionality to be automatically applied\n */\n const rules = {\n blockQuote: {\n match: blockRegex(BLOCKQUOTE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n return {\n content: parse(\n capture[0].replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, ''),\n state\n ),\n };\n },\n react(node, output, state) {\n return (\n <blockquote key={state.key}>{output(node.content, state)}</blockquote>\n );\n },\n },\n\n breakLine: {\n match: anyScopeRegex(BREAK_LINE_R),\n order: PARSE_PRIORITY_HIGH,\n parse: captureNothing,\n react(_, __, state) {\n return <br key={state.key} />;\n },\n },\n\n breakThematic: {\n match: blockRegex(BREAK_THEMATIC_R),\n order: PARSE_PRIORITY_HIGH,\n parse: captureNothing,\n react(_, __, state) {\n return <hr key={state.key} />;\n },\n },\n\n codeBlock: {\n match: blockRegex(CODE_BLOCK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n let content = capture[0].replace(/^ {4}/gm, '').replace(/\\n+$/, '');\n return {\n content: content,\n lang: undefined,\n };\n },\n\n react(node, output, state) {\n return (\n <pre key={state.key}>\n <code className={node.lang ? `lang-${node.lang}` : ''}>\n {node.content}\n </code>\n </pre>\n );\n },\n },\n\n codeFenced: {\n match: blockRegex(CODE_BLOCK_FENCED_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[3],\n lang: capture[2] || undefined,\n type: 'codeBlock',\n };\n },\n },\n\n codeInline: {\n match: simpleInlineRegex(CODE_INLINE_R),\n order: PARSE_PRIORITY_LOW,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[2],\n };\n },\n react(node, output, state) {\n return <code key={state.key}>{node.content}</code>;\n },\n },\n\n /**\n * footnotes are emitted at the end of compilation in a special <footer> block\n */\n footnote: {\n match: blockRegex(FOOTNOTE_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n footnotes.push({\n footnote: capture[2],\n identifier: capture[1],\n });\n\n return {};\n },\n react: renderNothing,\n },\n\n footnoteReference: {\n match: inlineRegex(FOOTNOTE_REFERENCE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse*/) {\n return {\n content: capture[1],\n target: `#${capture[1]}`,\n };\n },\n react(node, output, state) {\n return (\n <a key={state.key} href={sanitizeUrl(node.target)}>\n <sup key={state.key}>{node.content}</sup>\n </a>\n );\n },\n },\n\n gfmTask: {\n match: inlineRegex(GFM_TASK_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n completed: capture[1].toLowerCase() === 'x',\n };\n },\n react(node, output, state) {\n return (\n <input\n checked={node.completed}\n key={state.key}\n readOnly\n type=\"checkbox\"\n />\n );\n },\n },\n\n heading: {\n match: blockRegex(HEADING_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n return {\n content: parseInline(parse, capture[2], state),\n id: options.slugify(capture[2]),\n level: capture[1].length,\n };\n },\n react(node, output, state) {\n const Tag = `h${node.level}`;\n return (\n <Tag id={node.id} key={state.key}>\n {output(node.content, state)}\n </Tag>\n );\n },\n },\n\n headingSetext: {\n match: blockRegex(HEADING_SETEXT_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture, parse, state) {\n return {\n content: parseInline(parse, capture[1], state),\n level: capture[2] === '=' ? 1 : 2,\n type: 'heading',\n };\n },\n },\n\n htmlBlock: {\n /**\n * find the first matching end tag and process the interior\n */\n match: anyScopeRegex(HTML_BLOCK_ELEMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n const [, whitespace] = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const trimmer = new RegExp(`^${whitespace}`, 'gm');\n const trimmed = capture[3].replace(trimmer, '');\n\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n\n const noInnerParse =\n DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(capture[1]) !== -1;\n\n return {\n attrs: attrStringToMap(capture[2]),\n /**\n * if another html block is detected within, parse as block,\n * otherwise parse as inline to pick up any further markdown\n */\n content: noInnerParse ? capture[3] : parseFunc(parse, trimmed, state),\n\n noInnerParse,\n\n tag: capture[1],\n };\n },\n react(node, output, state) {\n return (\n <node.tag key={state.key} {...node.attrs}>\n {node.noInnerParse ? node.content : output(node.content, state)}\n </node.tag>\n );\n },\n },\n\n htmlComment: {\n match: anyScopeRegex(HTML_COMMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse() {\n return {};\n },\n react: renderNothing,\n },\n\n htmlSelfClosing: {\n /**\n * find the first matching end tag and process the interior\n */\n match: anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n attrs: attrStringToMap(capture[2] || ''),\n tag: capture[1],\n };\n },\n react(node, output, state) {\n return <node.tag {...node.attrs} key={state.key} />;\n },\n },\n\n image: {\n match: simpleInlineRegex(IMAGE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n alt: capture[1],\n target: unescapeUrl(capture[2]),\n title: capture[3],\n };\n },\n react(node, output, state) {\n return (\n <img\n key={state.key}\n alt={node.alt || undefined}\n title={node.title || undefined}\n src={sanitizeUrl(node.target)}\n />\n );\n },\n },\n\n link: {\n match: inlineRegex(LINK_R, false),\n order: PARSE_PRIORITY_LOW,\n parse(capture, parse, state) {\n return {\n content: parseSimpleInline(parse, capture[1], state),\n target: unescapeUrl(capture[2]),\n title: capture[3],\n };\n },\n react(node, output, state) {\n return (\n <a key={state.key} href={sanitizeUrl(node.target)} title={node.title}>\n {output(node.content, state)}\n </a>\n );\n },\n },\n\n // https://daringfireball.net/projects/markdown/syntax#autolink\n linkAngleBraceStyleDetector: {\n match: inlineRegex(LINK_AUTOLINK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: [\n {\n content: capture[1],\n type: 'text',\n },\n ],\n target: capture[1],\n type: 'link',\n };\n },\n },\n\n linkBareUrlDetector: {\n match: inlineRegex(LINK_AUTOLINK_BARE_URL_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: [\n {\n content: capture[1],\n type: 'text',\n },\n ],\n target: capture[1],\n title: undefined,\n type: 'link',\n };\n },\n },\n\n linkMailtoDetector: {\n match: inlineRegex(LINK_AUTOLINK_MAILTO_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n let address = capture[1];\n let target = capture[1];\n\n // Check for a `mailto:` already existing in the link:\n if (!AUTOLINK_MAILTO_CHECK_R.test(target)) {\n target = 'mailto:' + target;\n }\n\n return {\n content: [\n {\n content: address.replace('mailto:', ''),\n type: 'text',\n },\n ],\n target: target,\n type: 'link',\n };\n },\n },\n\n list: {\n match(source, state, prevCapture) {\n // We only want to break into a list if we are at the start of a\n // line. This is to avoid parsing \"hi * there\" with \"* there\"\n // becoming a part of a list.\n // You might wonder, \"but that's inline, so of course it wouldn't\n // start a list?\". You would be correct! Except that some of our\n // lists can be inline, because they might be inside another list,\n // in which case we can parse with inline scope, but need to allow\n // nested lists inside this inline scope.\n const isStartOfLine = LIST_LOOKBEHIND_R.exec(prevCapture);\n const isListBlock = state._list || !state.inline;\n\n if (isStartOfLine && isListBlock) {\n source = isStartOfLine[1] + source;\n\n return LIST_R.exec(source);\n } else {\n return null;\n }\n },\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n const bullet = capture[2];\n const ordered = bullet.length > 1;\n const start = ordered ? +bullet : undefined;\n const items = capture[0]\n // recognize the end of a paragraph block inside a list item:\n // two or more newlines at end end of the item\n .replace(BLOCK_END_R, '\\n')\n .match(LIST_ITEM_R);\n\n let lastItemWasAParagraph = false;\n const itemContent = items.map(function(item, i) {\n // We need to see how far indented the item is:\n const space = LIST_ITEM_PREFIX_R.exec(item)[0].length;\n\n // And then we construct a regex to \"unindent\" the subsequent\n // lines of the items by that amount:\n const spaceRegex = new RegExp('^ {1,' + space + '}', 'gm');\n\n // Before processing the item, we need a couple things\n const content = item\n // remove indents on trailing lines:\n .replace(spaceRegex, '')\n // remove the bullet:\n .replace(LIST_ITEM_PREFIX_R, '');\n\n // Handling \"loose\" lists, like:\n //\n // * this is wrapped in a paragraph\n //\n // * as is this\n //\n // * as is this\n const isLastItem = i === items.length - 1;\n const containsBlocks = content.indexOf('\\n\\n') !== -1;\n\n // Any element in a list is a block if it contains multiple\n // newlines. The last element in the list can also be a block\n // if the previous item in the list was a block (this is\n // because non-last items in the list can end with \\n\\n, but\n // the last item can't, so we just \"inherit\" this property\n // from our previous element).\n const thisItemIsAParagraph =\n containsBlocks || (isLastItem && lastItemWasAParagraph);\n lastItemWasAParagraph = thisItemIsAParagraph;\n\n // backup our state for restoration afterwards. We're going to\n // want to set state._list to true, and state.inline depending\n // on our list's looseness.\n const oldStateInline = state.inline;\n const oldStateList = state._list;\n state._list = true;\n\n // Parse inline if we're in a tight list, or block if we're in\n // a loose list.\n let adjustedContent;\n if (thisItemIsAParagraph) {\n state.inline = false;\n adjustedContent = content.replace(LIST_ITEM_END_R, '\\n\\n');\n } else {\n state.inline = true;\n adjustedContent = content.replace(LIST_ITEM_END_R, '');\n }\n\n const result = parse(adjustedContent, state);\n\n // Restore our state before returning\n state.inline = oldStateInline;\n state._list = oldStateList;\n\n return result;\n });\n\n return {\n items: itemContent,\n ordered: ordered,\n start: start,\n };\n },\n react(node, output, state) {\n const Tag = node.ordered ? 'ol' : 'ul';\n\n return (\n <Tag key={state.key} start={node.start}>\n {node.items.map(function generateListItem(item, i) {\n return <li key={i}>{output(item, state)}</li>;\n })}\n </Tag>\n );\n },\n },\n\n newlineCoalescer: {\n match: blockRegex(CONSECUTIVE_NEWLINE_R),\n order: PARSE_PRIORITY_LOW,\n parse: captureNothing,\n react(/*node, output, state*/) {\n return '\\n';\n },\n },\n\n paragraph: {\n match: blockRegex(PARAGRAPH_R),\n order: PARSE_PRIORITY_LOW,\n parse: parseCaptureInline,\n react(node, output, state) {\n return <p key={state.key}>{output(node.content, state)}</p>;\n },\n },\n\n ref: {\n match: inlineRegex(REFERENCE_IMAGE_OR_LINK),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse*/) {\n refs[capture[1]] = {\n target: capture[2],\n title: capture[4],\n };\n\n return {};\n },\n react: renderNothing,\n },\n\n refImage: {\n match: simpleInlineRegex(REFERENCE_IMAGE_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture) {\n return {\n alt: capture[1] || undefined,\n ref: capture[2],\n };\n },\n react(node, output, state) {\n return (\n <img\n key={state.key}\n alt={node.alt}\n src={sanitizeUrl(refs[node.ref].target)}\n title={refs[node.ref].title}\n />\n );\n },\n },\n\n refLink: {\n match: inlineRegex(REFERENCE_LINK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture, parse, state) {\n return {\n content: parse(capture[1], state),\n fallbackContent: parse(capture[0].replace(SQUARE_BRACKETS_R, '\\\\$1'), state),\n ref: capture[2],\n };\n },\n react(node, output, state) {\n return refs[node.ref] ? (\n <a\n key={state.key}\n href={sanitizeUrl(refs[node.ref].target)}\n title={refs[node.ref].title}\n >\n {output(node.content, state)}\n </a>\n ) : <span key={state.key}>{output(node.fallbackContent, state)}</span>;\n },\n },\n\n table: {\n match: blockRegex(NP_TABLE_R),\n order: PARSE_PRIORITY_HIGH,\n parse: parseTable,\n react(node, output, state) {\n return (\n <table key={state.key}>\n <thead>\n <tr>\n {node.header.map(function generateHeaderCell(content, i) {\n return (\n <th key={i} style={getTableStyle(node, i)}>\n {output(content, state)}\n </th>\n );\n })}\n </tr>\n </thead>\n\n <tbody>\n {node.cells.map(function generateTableRow(row, i) {\n return (\n <tr key={i}>\n {row.map(function generateTableCell(content, c) {\n return (\n <td key={c} style={getTableStyle(node, c)}>\n {output(content, state)}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n },\n },\n\n text: {\n // Here we look for anything followed by non-symbols,\n // double newlines, or double-space-newlines\n // We break on any symbol characters so that this grammar\n // is easy to extend without needing to modify this regex\n match: anyScopeRegex(TEXT_PLAIN_R),\n order: PARSE_PRIORITY_MIN,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[0]\n // nbsp -> unicode equivalent for named chars\n .replace(HTML_CHAR_CODE_R, (full, inner) => {\n return namedCodesToUnicode[inner]\n ? namedCodesToUnicode[inner]\n : full;\n }),\n };\n },\n react(node /*, output, state*/) {\n return node.content;\n },\n },\n\n textBolded: {\n match: simpleInlineRegex(TEXT_BOLD_R),\n order: PARSE_PRIORITY_MED,\n parse(capture, parse, state) {\n return {\n // capture[1] -> the syntax control character\n // capture[2] -> inner content\n content: parse(capture[2], state),\n };\n },\n react(node, output, state) {\n return <strong key={state.key}>{output(node.content, state)}</strong>;\n },\n },\n\n textEmphasized: {\n match: simpleInlineRegex(TEXT_EMPHASIZED_R),\n order: PARSE_PRIORITY_LOW,\n parse(capture, parse, state) {\n return {\n // capture[1] -> opening * or _\n // capture[2] -> inner content\n content: parse(capture[2], state),\n };\n },\n react(node, output, state) {\n return <em key={state.key}>{output(node.content, state)}</em>;\n },\n },\n\n textEscaped: {\n // We don't allow escaping numbers, letters, or spaces here so that\n // backslashes used in plain text still get rendered. But allowing\n // escaping anything else provides a very flexible escape mechanism,\n // regardless of how this grammar is extended.\n match: simpleInlineRegex(TEXT_ESCAPED_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[1],\n type: 'text',\n };\n },\n },\n\n textStrikethroughed: {\n match: simpleInlineRegex(TEXT_STRIKETHROUGHED_R),\n order: PARSE_PRIORITY_LOW,\n parse: parseCaptureInline,\n react(node, output, state) {\n return <del key={state.key}>{output(node.content, state)}</del>;\n },\n },\n };\n\n // Object.keys(rules).forEach(key => {\n // let { match, parse } = rules[key];\n\n // rules[key].match = (...args) => {\n // const start = performance.now();\n // const result = match(...args);\n // const delta = performance.now() - start;\n\n // if (delta > 5)\n // console.warn(\n // `Slow match for ${key}: ${delta.toFixed(3)}ms, input: ${\n // args[0]\n // }`\n // );\n\n // return result;\n // };\n\n // rules[key].parse = (...args) => {\n // const start = performance.now();\n // const result = parse(...args);\n // const delta = performance.now() - start;\n\n // if (delta > 5)\n // console.warn(`Slow parse for ${key}: ${delta.toFixed(3)}ms`);\n\n // console.log(`${key}:parse`, `${delta.toFixed(3)}ms`, args[0]);\n\n // return result;\n // };\n // });\n\n const parser = parserFor(rules);\n const emitter = reactFor(ruleOutput(rules));\n\n const jsx = compile(markdown);\n\n if (footnotes.length) {\n jsx.props.children.push(\n <footer key=\"footer\">\n {footnotes.map(function createFootnote(def) {\n return (\n <div id={def.identifier} key={def.identifier}>\n {def.identifier}\n {emitter(parser(def.footnote, { inline: true }))}\n </div>\n );\n })}\n </footer>\n );\n }\n\n return jsx;\n}\n\n/**\n * A simple HOC for easy React use. Feed the markdown content as a direct child\n * and the rest is taken care of automatically.\n *\n * @param {String} options.children must be a string\n * @param {Object} options.options markdown-to-jsx options (arg 2 of the compiler)\n *\n * @return {ReactElement} the compiled JSX\n */\n\nexport default function Markdown({ children, options, ...props }) {\n return React.cloneElement(compiler(children, options), props);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n const PropTypes = require('prop-types');\n\n Markdown.propTypes = {\n children: PropTypes.string.isRequired,\n options: PropTypes.object,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../index.js"],"names":[],"mappings":"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","file":"esm.js","sourcesContent":["/* @jsx h */\n/**\n * markdown-to-jsx@6 is a fork of [simple-markdown v0.2.2](https://github.com/Khan/simple-markdown)\n * from Khan Academy. Thank you Khan devs for making such an awesome and extensible\n * parsing infra... without it, half of the optimizations here wouldn't be feasible. 🙏🏼\n */\nimport React from 'react';\nimport unquote from 'unquote';\n\n/** TODO: Drop for React 16? */\nconst ATTRIBUTE_TO_JSX_PROP_MAP = {\n accesskey: 'accessKey',\n allowfullscreen: 'allowFullScreen',\n allowtransparency: 'allowTransparency',\n autocomplete: 'autoComplete',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n charset: 'charSet',\n class: 'className',\n classid: 'classId',\n colspan: 'colSpan',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n crossorigin: 'crossOrigin',\n enctype: 'encType',\n for: 'htmlFor',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formmethod: 'formMethod',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n hreflang: 'hrefLang',\n inputmode: 'inputMode',\n keyparams: 'keyParams',\n keytype: 'keyType',\n marginheight: 'marginHeight',\n marginwidth: 'marginWidth',\n maxlength: 'maxLength',\n mediagroup: 'mediaGroup',\n minlength: 'minLength',\n novalidate: 'noValidate',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n rowspan: 'rowSpan',\n spellcheck: 'spellCheck',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n tabindex: 'tabIndex',\n usemap: 'useMap',\n};\n\nconst namedCodesToUnicode = {\n amp: '\\u0026',\n apos: '\\u0027',\n gt: '\\u003e',\n lt: '\\u003c',\n nbsp: '\\u00a0',\n quot: '\\u201c',\n};\n\nconst DO_NOT_PROCESS_HTML_ELEMENTS = ['style', 'script'];\n\n/**\n * the attribute extractor regex looks for a valid attribute name,\n * followed by an equal sign (whitespace around the equal sign is allowed), followed\n * by one of the following:\n *\n * 1. a single quote-bounded string, e.g. 'foo'\n * 2. a double quote-bounded string, e.g. \"bar\"\n * 3. an interpolation, e.g. {something}\n *\n * JSX can be be interpolated into itself and is passed through the compiler using\n * the same options and setup as the current run.\n *\n * <Something children={<SomeOtherThing />} />\n * ==================\n * ↳ children: [<SomeOtherThing />]\n *\n * Otherwise, interpolations are handled as strings or simple booleans\n * unless HTML syntax is detected.\n *\n * <Something color={green} disabled={true} />\n * ===== ====\n * ↓ ↳ disabled: true\n * ↳ color: \"green\"\n *\n * Numbers are not parsed at this time due to complexities around int, float,\n * and the upcoming bigint functionality that would make handling it unwieldy.\n * Parse the string in your component as desired.\n *\n * <Something someBigNumber={123456789123456789} />\n * ==================\n * ↳ someBigNumber: \"123456789123456789\"\n */\nconst ATTR_EXTRACTOR_R = /([-A-Z0-9_:]+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|(?:\\{((?:\\\\.|{[^}]*?}|[^}])*)\\})))?/gi;\n\n/** TODO: Write explainers for each of these */\n\nconst AUTOLINK_MAILTO_CHECK_R = /mailto:/i;\nconst BLOCK_END_R = /\\n{2,}$/;\nconst BLOCKQUOTE_R = /^( *>[^\\n]+(\\n[^\\n]+)*\\n*)+\\n{2,}/;\nconst BLOCKQUOTE_TRIM_LEFT_MULTILINE_R = /^ *> ?/gm;\nconst BREAK_LINE_R = /^ {2,}\\n/;\nconst BREAK_THEMATIC_R = /^(?:( *[-*_]) *){3,}(?:\\n *)+\\n/;\nconst CODE_BLOCK_FENCED_R = /^\\s*(`{3,}|~{3,}) *(\\S+)? *\\n([\\s\\S]+?)\\s*\\1 *(?:\\n *)+\\n?/;\nconst CODE_BLOCK_R = /^(?: {4}[^\\n]+\\n*)+(?:\\n *)+\\n?/;\nconst CODE_INLINE_R = /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/;\nconst CONSECUTIVE_NEWLINE_R = /^(?:\\n *)*\\n/;\nconst CR_NEWLINE_R = /\\r\\n?/g;\nconst FOOTNOTE_R = /^\\[\\^(.*)\\](:.*)\\n/;\nconst FOOTNOTE_REFERENCE_R = /^\\[\\^(.*)\\]/;\nconst FORMFEED_R = /\\f/g;\nconst GFM_TASK_R = /^\\s*?\\[(x|\\s)\\]/;\nconst HEADING_R = /^ *(#{1,6}) *([^\\n]+)\\n{0,2}/;\nconst HEADING_SETEXT_R = /^([^\\n]+)\\n *(=|-){3,} *(?:\\n *)+\\n/;\n\n/**\n * Explanation:\n *\n * 1. Look for a starting tag, preceeded by any amount of spaces\n * ^ *<\n *\n * 2. Capture the tag name (capture 1)\n * ([^ >/]+)\n *\n * 3. Ignore a space after the starting tag and capture the attribute portion of the tag (capture 2)\n * ?([^>]*)\\/{0}>\n *\n * 4. Ensure a matching closing tag is present in the rest of the input string\n * (?=[\\s\\S]*<\\/\\1>)\n *\n * 5. Capture everything until the matching closing tag -- this might include additional pairs\n * of the same tag type found in step 2 (capture 3)\n * ((?:[\\s\\S]*?(?:<\\1[^>]*>[\\s\\S]*?<\\/\\1>)*[\\s\\S]*?)*?)<\\/\\1>\n *\n * 6. Capture excess newlines afterward\n * \\n*\n */\nconst HTML_BLOCK_ELEMENT_R = /^ *(?!<[a-z][^ >/]* ?\\/>)<([a-z][^ >/]*) ?([^>]*)\\/{0}>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1)[\\s\\S])*?)<\\/\\1>\\n*/i;\n\nconst HTML_CHAR_CODE_R = /&([a-z]+);/g;\n\nconst HTML_COMMENT_R = /^<!--.*?-->/;\n\n/**\n * borrowed from React 15(https://github.com/facebook/react/blob/894d20744cba99383ffd847dbd5b6e0800355a5c/src/renderers/dom/shared/HTMLDOMPropertyConfig.js)\n */\nconst HTML_CUSTOM_ATTR_R = /^(data|aria|x)-[a-z_][a-z\\d_.-]*$/;\n\nconst HTML_SELF_CLOSING_ELEMENT_R = /^ *<([a-z][a-z0-9:]*)(?:\\s+((?:<.*?>|[^>])*))?\\/?>(?!<\\/\\1>)(\\s*\\n)?/i;\nconst INTERPOLATION_R = /^\\{.*\\}$/;\nconst LINK_AUTOLINK_BARE_URL_R = /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/;\nconst LINK_AUTOLINK_MAILTO_R = /^<([^ >]+@[^ >]+)>/;\nconst LINK_AUTOLINK_R = /^<([^ >]+:\\/[^ >]+)>/;\nconst LIST_ITEM_END_R = / *\\n+$/;\nconst LIST_LOOKBEHIND_R = /(?:^|\\n)( *)$/;\nconst CAPTURE_LETTER_AFTER_HYPHEN = /-([a-z])?/gi;\nconst NP_TABLE_R = /^(.*\\|?.*)\\n *(\\|? *[-:]+ *\\|[-| :]*)\\n((?:.*\\|.*\\n)*)\\n?/;\nconst PARAGRAPH_R = /^((?:[^\\n]|\\n(?! *\\n))+)(?:\\n *)+\\n/;\nconst REFERENCE_IMAGE_OR_LINK = /^\\[([^\\]]*)\\]:\\s*(\\S+)\\s*(\"([^\"]*)\")?/;\nconst REFERENCE_IMAGE_R = /^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nconst REFERENCE_LINK_R = /^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nconst SQUARE_BRACKETS_R = /(\\[|\\])/g;\nconst SHOULD_RENDER_AS_BLOCK_R = /(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s)/;\nconst TAB_R = /\\t/g;\nconst TABLE_SEPARATOR_R = /^ *\\| */;\nconst TABLE_TRIM_PIPES = /(^ *\\||\\| *$)/g;\nconst TABLE_CELL_END_TRIM = / *$/;\nconst TABLE_CENTER_ALIGN = /^ *:-+: *$/;\nconst TABLE_LEFT_ALIGN = /^ *:-+ *$/;\nconst TABLE_RIGHT_ALIGN = /^ *-+: *$/;\n\nconst TEXT_BOLD_R = /^([*_])\\1((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\\1\\1(?!\\1)/;\nconst TEXT_EMPHASIZED_R = /^([*_])((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\\1(?!\\1)/;\nconst TEXT_STRIKETHROUGHED_R = /^~~((?:\\[.*?\\]|<.*?>(?:.*?<.*?>)?|`.*?`|.)*?)~~/;\n\nconst TEXT_ESCAPED_R = /^\\\\([^0-9A-Za-z\\s])/;\nconst TEXT_PLAIN_R = /^[\\s\\S]+?(?=[^0-9A-Z\\s\\u00c0-\\uffff&;.()'\"]|\\d+\\.|\\n\\n| {2,}\\n|\\w+:\\S|$)/i;\nconst TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R = /(^\\n+|\\n+$|\\s+$)/g;\n\nconst HTML_LEFT_TRIM_AMOUNT_R = /^([ \\t]*)/;\n\nconst UNESCAPE_URL_R = /\\\\([^0-9A-Z\\s])/gi;\n\n// recognize a `*` `-`, `+`, `1.`, `2.`... list bullet\nconst LIST_BULLET = '(?:[*+-]|\\\\d+\\\\.)';\n\n// recognize the start of a list item:\n// leading space plus a bullet plus a space (` * `)\nconst LIST_ITEM_PREFIX = '( *)(' + LIST_BULLET + ') +';\nconst LIST_ITEM_PREFIX_R = new RegExp('^' + LIST_ITEM_PREFIX);\n\n// recognize an individual list item:\n// * hi\n// this is part of the same item\n//\n// as is this, which is a new paragraph in the same item\n//\n// * but this is not part of the same item\nconst LIST_ITEM_R = new RegExp(\n LIST_ITEM_PREFIX +\n '[^\\\\n]*(?:\\\\n' +\n '(?!\\\\1' +\n LIST_BULLET +\n ' )[^\\\\n]*)*(\\\\n|$)',\n 'gm'\n);\n\n// check whether a list item has paragraphs: if it does,\n// we leave the newlines at the end\nconst LIST_R = new RegExp(\n '^( *)(' +\n LIST_BULLET +\n ') ' +\n '[\\\\s\\\\S]+?(?:\\\\n{2,}(?! )' +\n '(?!\\\\1' +\n LIST_BULLET +\n ' (?!' +\n LIST_BULLET +\n ' ))\\\\n*' +\n // the \\\\s*$ here is so that we can parse the inside of nested\n // lists, where our content might end before we receive two `\\n`s\n '|\\\\s*\\\\n*$)'\n);\n\nconst LINK_INSIDE = '(?:\\\\[[^\\\\]]*\\\\]|[^\\\\[\\\\]]|\\\\](?=[^\\\\[]*\\\\]))*';\nconst LINK_HREF_AND_TITLE =\n '\\\\s*<?((?:[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+[\\'\"]([\\\\s\\\\S]*?)[\\'\"])?\\\\s*';\n\nconst LINK_R = new RegExp(\n '^\\\\[(' + LINK_INSIDE + ')\\\\]\\\\(' + LINK_HREF_AND_TITLE + '\\\\)'\n);\n\nconst IMAGE_R = new RegExp(\n '^!\\\\[(' + LINK_INSIDE + ')\\\\]\\\\(' + LINK_HREF_AND_TITLE + '\\\\)'\n);\n\nconst BLOCK_SYNTAXES = [\n BLOCKQUOTE_R,\n CODE_BLOCK_R,\n CODE_BLOCK_FENCED_R,\n HEADING_R,\n HEADING_SETEXT_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_COMMENT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n LIST_ITEM_R,\n LIST_R,\n NP_TABLE_R,\n PARAGRAPH_R,\n];\n\nfunction containsBlockSyntax(input) {\n return BLOCK_SYNTAXES.some(r => r.test(input));\n}\n\n// based on https://stackoverflow.com/a/18123682/1141611\n// not complete, but probably good enough\nfunction slugify(str) {\n return str\n .replace(/[ÀÁÂÃÄÅàáâãä忯]/g, 'a')\n .replace(/[çÇ]/g, 'c')\n .replace(/[ðÐ]/g, 'd')\n .replace(/[ÈÉÊËéèêë]/g, 'e')\n .replace(/[ÏïÎîÍíÌì]/g, 'i')\n .replace(/[Ññ]/g, 'n')\n .replace(/[øØœŒÕõÔôÓóÒò]/g, 'o')\n .replace(/[ÜüÛûÚúÙù]/g, 'u')\n .replace(/[ŸÿÝý]/g, 'y')\n .replace(/[^a-z0-9- ]/gi, '')\n .replace(/ /gi, '-')\n .toLowerCase();\n}\n\nfunction parseTableAlignCapture(alignCapture) {\n if (TABLE_RIGHT_ALIGN.test(alignCapture)) {\n return 'right';\n } else if (TABLE_CENTER_ALIGN.test(alignCapture)) {\n return 'center';\n } else if (TABLE_LEFT_ALIGN.test(alignCapture)) {\n return 'left';\n }\n\n return null;\n}\n\nfunction parseTableRow(source, parse, state) {\n const prevInTable = state.inTable;\n state.inTable = true;\n const tableRow = parse(source.trim(), state);\n state.inTable = prevInTable;\n\n let cells = [[]];\n tableRow.forEach(function(node, i) {\n if (node.type === 'tableSeparator') {\n // Filter out empty table separators at the start/end:\n if (i !== 0 && i !== tableRow.length - 1) {\n // Split the current row:\n cells.push([]);\n }\n } else {\n if (node.type === 'text' && (\n tableRow[i + 1] == null ||\n tableRow[i + 1].type === 'tableSeparator'\n )) {\n node.content = node.content.replace(TABLE_CELL_END_TRIM, \"\");\n }\n cells[cells.length - 1].push(node);\n }\n });\n return cells;\n}\n\nfunction parseTableAlign(source /*, parse, state*/) {\n const alignText = source\n .replace(TABLE_TRIM_PIPES, '')\n .split('|');\n\n return alignText.map(parseTableAlignCapture);\n}\n\nfunction parseTableCells(source, parse, state) {\n const rowsText = source\n .trim()\n .split('\\n');\n\n return rowsText.map(function(rowText) {\n return parseTableRow(rowText, parse, state);\n });\n}\n\nfunction parseTable(capture, parse, state) {\n state.inline = true;\n const header = parseTableRow(capture[1], parse, state);\n const align = parseTableAlign(capture[2], parse, state);\n const cells = parseTableCells(capture[3], parse, state);\n state.inline = false;\n\n return {\n align: align,\n cells: cells,\n header: header,\n type: 'table',\n };\n}\n\nfunction getTableStyle(node, colIndex) {\n return node.align[colIndex] == null\n ? {}\n : {\n textAlign: node.align[colIndex],\n };\n}\n\n/** TODO: remove for react 16 */\nfunction normalizeAttributeKey(key) {\n const hyphenIndex = key.indexOf('-');\n\n if (hyphenIndex !== -1 && key.match(HTML_CUSTOM_ATTR_R) === null) {\n key = key.replace(CAPTURE_LETTER_AFTER_HYPHEN, function(_, letter) {\n return letter.toUpperCase();\n });\n }\n\n return key;\n}\n\nfunction attributeValueToJSXPropValue(key, value) {\n if (key === 'style') {\n return value.split(/;\\s?/).reduce(function(styles, kvPair) {\n const key = kvPair.slice(0, kvPair.indexOf(':'));\n\n // snake-case to camelCase\n // also handles PascalCasing vendor prefixes\n const camelCasedKey = key.replace(/(-[a-z])/g, substr =>\n substr[1].toUpperCase()\n );\n\n // key.length + 1 to skip over the colon\n styles[camelCasedKey] = kvPair.slice(key.length + 1).trim();\n\n return styles;\n }, {});\n } else if (key === 'href') {\n return sanitizeUrl(value)\n } else if (value.match(INTERPOLATION_R)) {\n // return as a string and let the consumer decide what to do with it\n value = value.slice(1, value.length - 1);\n }\n\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n }\n\n return value;\n}\n\nfunction normalizeWhitespace(source) {\n return source\n .replace(CR_NEWLINE_R, '\\n')\n .replace(FORMFEED_R, '')\n .replace(TAB_R, ' ');\n}\n\n/**\n * Creates a parser for a given set of rules, with the precedence\n * specified as a list of rules.\n *\n * @rules: an object containing\n * rule type -> {match, order, parse} objects\n * (lower order is higher precedence)\n * (Note: `order` is added to defaultRules after creation so that\n * the `order` of defaultRules in the source matches the `order`\n * of defaultRules in terms of `order` fields.)\n *\n * @returns The resulting parse function, with the following parameters:\n * @source: the input source string to be parsed\n * @state: an optional object to be threaded through parse\n * calls. Allows clients to add stateful operations to\n * parsing, such as keeping track of how many levels deep\n * some nesting is. For an example use-case, see passage-ref\n * parsing in src/widgets/passage/passage-markdown.jsx\n */\nfunction parserFor(rules) {\n // Sorts rules in order of increasing order, then\n // ascending rule name in case of ties.\n let ruleList = Object.keys(rules);\n\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n ruleList.forEach(function(type) {\n let order = rules[type].order;\n if (\n process.env.NODE_ENV !== 'production' &&\n (typeof order !== 'number' || !isFinite(order))\n ) {\n console.warn(\n 'markdown-to-jsx: Invalid order for rule `' + type + '`: ' + order\n );\n }\n });\n }\n\n ruleList.sort(function(typeA, typeB) {\n let orderA = rules[typeA].order;\n let orderB = rules[typeB].order;\n\n // First sort based on increasing order\n if (orderA !== orderB) {\n return orderA - orderB;\n\n // Then based on increasing unicode lexicographic ordering\n } else if (typeA < typeB) {\n return -1;\n }\n\n return 1;\n });\n\n function nestedParse(source, state) {\n let result = [];\n\n // We store the previous capture so that match functions can\n // use some limited amount of lookbehind. Lists use this to\n // ensure they don't match arbitrary '- ' or '* ' in inline\n // text (see the list rule for more information).\n let prevCapture = '';\n while (source) {\n let i = 0;\n while (i < ruleList.length) {\n const ruleType = ruleList[i];\n const rule = rules[ruleType];\n const capture = rule.match(source, state, prevCapture);\n\n if (capture) {\n const currCaptureString = capture[0];\n source = source.substring(currCaptureString.length);\n const parsed = rule.parse(capture, nestedParse, state);\n\n // We also let rules override the default type of\n // their parsed node if they would like to, so that\n // there can be a single output function for all links,\n // even if there are several rules to parse them.\n if (parsed.type == null) {\n parsed.type = ruleType;\n }\n\n result.push(parsed);\n\n prevCapture = currCaptureString;\n break;\n }\n\n i++;\n }\n }\n\n return result;\n }\n\n return function outerParse(source, state) {\n return nestedParse(normalizeWhitespace(source), state);\n };\n}\n\n// Creates a match function for an inline scoped or simple element from a regex\nfunction inlineRegex(regex) {\n return function match(source, state) {\n if (state.inline) {\n return regex.exec(source);\n } else {\n return null;\n }\n };\n}\n\n// basically any inline element except links\nfunction simpleInlineRegex(regex) {\n return function match(source, state) {\n if (state.inline || state.simple) {\n return regex.exec(source);\n } else {\n return null;\n }\n };\n}\n\n// Creates a match function for a block scoped element from a regex\nfunction blockRegex(regex) {\n return function match(source, state) {\n if (state.inline || state.simple) {\n return null;\n } else {\n return regex.exec(source);\n }\n };\n}\n\n// Creates a match function from a regex, ignoring block/inline scope\nfunction anyScopeRegex(regex) {\n return function match(source /*, state*/) {\n return regex.exec(source);\n };\n}\n\nfunction reactFor(outputFunc) {\n return function nestedReactOutput(ast, state) {\n state = state || {};\n if (Array.isArray(ast)) {\n const oldKey = state.key;\n const result = [];\n\n // map nestedOutput over the ast, except group any text\n // nodes together into a single string output.\n let lastWasString = false;\n\n for (let i = 0; i < ast.length; i++) {\n state.key = i;\n\n const nodeOut = nestedReactOutput(ast[i], state);\n const isString = typeof nodeOut === 'string';\n\n if (isString && lastWasString) {\n result[result.length - 1] += nodeOut;\n } else {\n result.push(nodeOut);\n }\n\n lastWasString = isString;\n }\n\n state.key = oldKey;\n\n return result;\n }\n\n return outputFunc(ast, nestedReactOutput, state);\n };\n}\n\nfunction sanitizeUrl(url) {\n try {\n const decoded = decodeURIComponent(url);\n\n if (decoded.match(/^\\s*javascript:/i)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Anchor URL contains an unsafe JavaScript expression, it will not be rendered.',\n decoded\n );\n }\n\n return null;\n }\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Anchor URL could not be decoded due to malformed syntax or characters, it will not be rendered.',\n url\n );\n }\n\n // decodeURIComponent sometimes throws a URIError\n // See `decodeURIComponent('a%AFc');`\n // http://stackoverflow.com/questions/9064536/javascript-decodeuricomponent-malformed-uri-exception\n return null;\n }\n\n return url;\n}\n\nfunction unescapeUrl(rawUrlString) {\n return rawUrlString.replace(UNESCAPE_URL_R, '$1');\n}\n\n/**\n * Everything inline, including links.\n */\nfunction parseInline(parse, content, state) {\n const isCurrentlyInline = state.inline || false;\n const isCurrentlySimple = state.simple || false;\n state.inline = true;\n state.simple = true;\n const result = parse(content, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n return result;\n}\n\n/**\n * Anything inline that isn't a link.\n */\nfunction parseSimpleInline(parse, content, state) {\n const isCurrentlyInline = state.inline || false;\n const isCurrentlySimple = state.simple || false;\n state.inline = false;\n state.simple = true;\n const result = parse(content, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n return result;\n}\n\nfunction parseBlock(parse, content, state) {\n state.inline = false;\n return parse(content + '\\n\\n', state);\n}\n\nfunction parseCaptureInline(capture, parse, state) {\n return {\n content: parseInline(parse, capture[1], state),\n };\n}\n\nfunction captureNothing() {\n return {};\n}\n\nfunction renderNothing() {\n return null;\n}\n\nfunction ruleOutput(rules) {\n return function nestedRuleOutput(ast, outputFunc, state) {\n return rules[ast.type].react(ast, outputFunc, state);\n };\n}\n\nfunction cx(...args) {\n return args.filter(Boolean).join(' ');\n}\n\nfunction get(src, path, fb) {\n let ptr = src;\n const frags = path.split('.');\n\n while (frags.length) {\n ptr = ptr[frags[0]];\n\n if (ptr === undefined) break;\n else frags.shift();\n }\n\n return ptr || fb;\n}\n\nfunction getTag(tag, overrides) {\n const override = get(overrides, tag);\n\n if (!override) return tag;\n\n return typeof override === 'function' || (typeof override === 'object' && 'render' in override)\n ? override\n : get(overrides, `${tag}.component`, tag);\n}\n\n/**\n * anything that must scan the tree before everything else\n */\nconst PARSE_PRIORITY_MAX = 1;\n\n/**\n * scans for block-level constructs\n */\nconst PARSE_PRIORITY_HIGH = 2;\n\n/**\n * inline w/ more priority than other inline\n */\nconst PARSE_PRIORITY_MED = 3;\n\n/**\n * inline elements\n */\nconst PARSE_PRIORITY_LOW = 4;\n\n/**\n * bare text and stuff that is considered leftovers\n */\nconst PARSE_PRIORITY_MIN = 5;\n\nexport function compiler(markdown, options) {\n options = options || {};\n options.overrides = options.overrides || {};\n options.slugify = options.slugify || slugify;\n options.namedCodesToUnicode = options.namedCodesToUnicode \n ? {...namedCodesToUnicode, ...options.namedCodesToUnicode}\n : namedCodesToUnicode;\n\n const createElementFn = options.createElement || React.createElement;\n\n // eslint-disable-next-line no-unused-vars\n function h(tag, props, ...children) {\n const overrideProps = get(options.overrides, `${tag}.props`, {});\n\n return createElementFn(\n getTag(tag, options.overrides),\n {\n ...props,\n ...overrideProps,\n className:\n cx(props && props.className, overrideProps.className) || undefined,\n },\n ...children\n );\n }\n\n function compile(input) {\n let inline = false;\n\n if (options.forceInline) {\n inline = true;\n } else if (!options.forceBlock) {\n /**\n * should not contain any block-level markdown like newlines, lists, headings,\n * thematic breaks, blockquotes, tables, etc\n */\n inline = SHOULD_RENDER_AS_BLOCK_R.test(input) === false;\n }\n\n const arr = emitter(\n parser(\n inline\n ? input\n : `${input.replace(TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R, '')}\\n\\n`,\n { inline }\n )\n );\n\n let jsx;\n if (arr.length > 1) {\n jsx = inline ? <span key=\"outer\">{arr}</span> : <div key=\"outer\">{arr}</div>;\n } else if (arr.length === 1) {\n jsx = arr[0];\n\n // TODO: remove this for React 16\n if (typeof jsx === 'string') {\n jsx = <span key=\"outer\">{jsx}</span>;\n }\n } else {\n // TODO: return null for React 16\n jsx = <span key=\"outer\" />;\n }\n\n return jsx;\n }\n\n function attrStringToMap(str) {\n const attributes = str.match(ATTR_EXTRACTOR_R);\n\n return attributes\n ? attributes.reduce(function(map, raw, index) {\n const delimiterIdx = raw.indexOf('=');\n\n if (delimiterIdx !== -1) {\n const key = normalizeAttributeKey(\n raw.slice(0, delimiterIdx)\n ).trim();\n const value = unquote(raw.slice(delimiterIdx + 1).trim());\n\n const mappedKey = ATTRIBUTE_TO_JSX_PROP_MAP[key] || key;\n const normalizedValue = (map[\n mappedKey\n ] = attributeValueToJSXPropValue(key, value));\n\n if (\n HTML_BLOCK_ELEMENT_R.test(normalizedValue) ||\n HTML_SELF_CLOSING_ELEMENT_R.test(normalizedValue)\n ) {\n map[mappedKey] = React.cloneElement(\n compile(normalizedValue.trim()),\n { key: index }\n );\n }\n } else {\n map[ATTRIBUTE_TO_JSX_PROP_MAP[raw] || raw] = true;\n }\n\n return map;\n }, {})\n : undefined;\n }\n\n /* istanbul ignore next */\n if (process.env.NODE_ENV !== 'production') {\n if (typeof markdown !== 'string') {\n throw new Error(`markdown-to-jsx: the first argument must be\n a string`);\n }\n\n if (\n Object.prototype.toString.call(options.overrides) !== '[object Object]'\n ) {\n throw new Error(`markdown-to-jsx: options.overrides (second argument property) must be\n undefined or an object literal with shape:\n {\n htmltagname: {\n component: string|ReactComponent(optional),\n props: object(optional)\n }\n }`);\n }\n }\n\n const footnotes = [];\n const refs = {};\n\n /**\n * each rule's react() output function goes through our custom h() JSX pragma;\n * this allows the override functionality to be automatically applied\n */\n const rules = {\n blockQuote: {\n match: blockRegex(BLOCKQUOTE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n return {\n content: parse(\n capture[0].replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, ''),\n state\n ),\n };\n },\n react(node, output, state) {\n return (\n <blockquote key={state.key}>{output(node.content, state)}</blockquote>\n );\n },\n },\n\n breakLine: {\n match: anyScopeRegex(BREAK_LINE_R),\n order: PARSE_PRIORITY_HIGH,\n parse: captureNothing,\n react(_, __, state) {\n return <br key={state.key} />;\n },\n },\n\n breakThematic: {\n match: blockRegex(BREAK_THEMATIC_R),\n order: PARSE_PRIORITY_HIGH,\n parse: captureNothing,\n react(_, __, state) {\n return <hr key={state.key} />;\n },\n },\n\n codeBlock: {\n match: blockRegex(CODE_BLOCK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n let content = capture[0].replace(/^ {4}/gm, '').replace(/\\n+$/, '');\n return {\n content: content,\n lang: undefined,\n };\n },\n\n react(node, output, state) {\n return (\n <pre key={state.key}>\n <code className={node.lang ? `lang-${node.lang}` : ''}>\n {node.content}\n </code>\n </pre>\n );\n },\n },\n\n codeFenced: {\n match: blockRegex(CODE_BLOCK_FENCED_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[3],\n lang: capture[2] || undefined,\n type: 'codeBlock',\n };\n },\n },\n\n codeInline: {\n match: simpleInlineRegex(CODE_INLINE_R),\n order: PARSE_PRIORITY_LOW,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[2],\n };\n },\n react(node, output, state) {\n return <code key={state.key}>{node.content}</code>;\n },\n },\n\n /**\n * footnotes are emitted at the end of compilation in a special <footer> block\n */\n footnote: {\n match: blockRegex(FOOTNOTE_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n footnotes.push({\n footnote: capture[2],\n identifier: capture[1],\n });\n\n return {};\n },\n react: renderNothing,\n },\n\n footnoteReference: {\n match: inlineRegex(FOOTNOTE_REFERENCE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse*/) {\n return {\n content: capture[1],\n target: `#${capture[1]}`,\n };\n },\n react(node, output, state) {\n return (\n <a key={state.key} href={sanitizeUrl(node.target)}>\n <sup key={state.key}>{node.content}</sup>\n </a>\n );\n },\n },\n\n gfmTask: {\n match: inlineRegex(GFM_TASK_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n completed: capture[1].toLowerCase() === 'x',\n };\n },\n react(node, output, state) {\n return (\n <input\n checked={node.completed}\n key={state.key}\n readOnly\n type=\"checkbox\"\n />\n );\n },\n },\n\n heading: {\n match: blockRegex(HEADING_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n return {\n content: parseInline(parse, capture[2], state),\n id: options.slugify(capture[2]),\n level: capture[1].length,\n };\n },\n react(node, output, state) {\n const Tag = `h${node.level}`;\n return (\n <Tag id={node.id} key={state.key}>\n {output(node.content, state)}\n </Tag>\n );\n },\n },\n\n headingSetext: {\n match: blockRegex(HEADING_SETEXT_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture, parse, state) {\n return {\n content: parseInline(parse, capture[1], state),\n level: capture[2] === '=' ? 1 : 2,\n type: 'heading',\n };\n },\n },\n\n htmlBlock: {\n /**\n * find the first matching end tag and process the interior\n */\n match: anyScopeRegex(HTML_BLOCK_ELEMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n const [, whitespace] = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const trimmer = new RegExp(`^${whitespace}`, 'gm');\n const trimmed = capture[3].replace(trimmer, '');\n\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n\n const tagName = capture[1].toLowerCase();\n const noInnerParse =\n DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(tagName) !== -1;\n\n return {\n attrs: attrStringToMap(capture[2]),\n /**\n * if another html block is detected within, parse as block,\n * otherwise parse as inline to pick up any further markdown\n */\n content: noInnerParse ? capture[3] : parseFunc(parse, trimmed, state),\n\n noInnerParse,\n\n tag: noInnerParse ? tagName : capture[1]\n };\n },\n react(node, output, state) {\n return (\n <node.tag key={state.key} {...node.attrs}>\n {node.noInnerParse ? node.content : output(node.content, state)}\n </node.tag>\n );\n },\n },\n\n htmlComment: {\n match: anyScopeRegex(HTML_COMMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse() {\n return {};\n },\n react: renderNothing,\n },\n\n htmlSelfClosing: {\n /**\n * find the first matching end tag and process the interior\n */\n match: anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n attrs: attrStringToMap(capture[2] || ''),\n tag: capture[1],\n };\n },\n react(node, output, state) {\n return <node.tag {...node.attrs} key={state.key} />;\n },\n },\n\n image: {\n match: simpleInlineRegex(IMAGE_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n alt: capture[1],\n target: unescapeUrl(capture[2]),\n title: capture[3],\n };\n },\n react(node, output, state) {\n return (\n <img\n key={state.key}\n alt={node.alt || undefined}\n title={node.title || undefined}\n src={sanitizeUrl(node.target)}\n />\n );\n },\n },\n\n link: {\n match: inlineRegex(LINK_R, false),\n order: PARSE_PRIORITY_LOW,\n parse(capture, parse, state) {\n return {\n content: parseSimpleInline(parse, capture[1], state),\n target: unescapeUrl(capture[2]),\n title: capture[3],\n };\n },\n react(node, output, state) {\n return (\n <a key={state.key} href={sanitizeUrl(node.target)} title={node.title}>\n {output(node.content, state)}\n </a>\n );\n },\n },\n\n // https://daringfireball.net/projects/markdown/syntax#autolink\n linkAngleBraceStyleDetector: {\n match: inlineRegex(LINK_AUTOLINK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: [\n {\n content: capture[1],\n type: 'text',\n },\n ],\n target: capture[1],\n type: 'link',\n };\n },\n },\n\n linkBareUrlDetector: {\n match: inlineRegex(LINK_AUTOLINK_BARE_URL_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n return {\n content: [\n {\n content: capture[1],\n type: 'text',\n },\n ],\n target: capture[1],\n title: undefined,\n type: 'link',\n };\n },\n },\n\n linkMailtoDetector: {\n match: inlineRegex(LINK_AUTOLINK_MAILTO_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse, state*/) {\n let address = capture[1];\n let target = capture[1];\n\n // Check for a `mailto:` already existing in the link:\n if (!AUTOLINK_MAILTO_CHECK_R.test(target)) {\n target = 'mailto:' + target;\n }\n\n return {\n content: [\n {\n content: address.replace('mailto:', ''),\n type: 'text',\n },\n ],\n target: target,\n type: 'link',\n };\n },\n },\n\n list: {\n match(source, state, prevCapture) {\n // We only want to break into a list if we are at the start of a\n // line. This is to avoid parsing \"hi * there\" with \"* there\"\n // becoming a part of a list.\n // You might wonder, \"but that's inline, so of course it wouldn't\n // start a list?\". You would be correct! Except that some of our\n // lists can be inline, because they might be inside another list,\n // in which case we can parse with inline scope, but need to allow\n // nested lists inside this inline scope.\n const isStartOfLine = LIST_LOOKBEHIND_R.exec(prevCapture);\n const isListBlock = state._list || !state.inline;\n\n if (isStartOfLine && isListBlock) {\n source = isStartOfLine[1] + source;\n\n return LIST_R.exec(source);\n } else {\n return null;\n }\n },\n order: PARSE_PRIORITY_HIGH,\n parse(capture, parse, state) {\n const bullet = capture[2];\n const ordered = bullet.length > 1;\n const start = ordered ? +bullet : undefined;\n const items = capture[0]\n // recognize the end of a paragraph block inside a list item:\n // two or more newlines at end end of the item\n .replace(BLOCK_END_R, '\\n')\n .match(LIST_ITEM_R);\n\n let lastItemWasAParagraph = false;\n const itemContent = items.map(function(item, i) {\n // We need to see how far indented the item is:\n const space = LIST_ITEM_PREFIX_R.exec(item)[0].length;\n\n // And then we construct a regex to \"unindent\" the subsequent\n // lines of the items by that amount:\n const spaceRegex = new RegExp('^ {1,' + space + '}', 'gm');\n\n // Before processing the item, we need a couple things\n const content = item\n // remove indents on trailing lines:\n .replace(spaceRegex, '')\n // remove the bullet:\n .replace(LIST_ITEM_PREFIX_R, '');\n\n // Handling \"loose\" lists, like:\n //\n // * this is wrapped in a paragraph\n //\n // * as is this\n //\n // * as is this\n const isLastItem = i === items.length - 1;\n const containsBlocks = content.indexOf('\\n\\n') !== -1;\n\n // Any element in a list is a block if it contains multiple\n // newlines. The last element in the list can also be a block\n // if the previous item in the list was a block (this is\n // because non-last items in the list can end with \\n\\n, but\n // the last item can't, so we just \"inherit\" this property\n // from our previous element).\n const thisItemIsAParagraph =\n containsBlocks || (isLastItem && lastItemWasAParagraph);\n lastItemWasAParagraph = thisItemIsAParagraph;\n\n // backup our state for restoration afterwards. We're going to\n // want to set state._list to true, and state.inline depending\n // on our list's looseness.\n const oldStateInline = state.inline;\n const oldStateList = state._list;\n state._list = true;\n\n // Parse inline if we're in a tight list, or block if we're in\n // a loose list.\n let adjustedContent;\n if (thisItemIsAParagraph) {\n state.inline = false;\n adjustedContent = content.replace(LIST_ITEM_END_R, '\\n\\n');\n } else {\n state.inline = true;\n adjustedContent = content.replace(LIST_ITEM_END_R, '');\n }\n\n const result = parse(adjustedContent, state);\n\n // Restore our state before returning\n state.inline = oldStateInline;\n state._list = oldStateList;\n\n return result;\n });\n\n return {\n items: itemContent,\n ordered: ordered,\n start: start,\n };\n },\n react(node, output, state) {\n const Tag = node.ordered ? 'ol' : 'ul';\n\n return (\n <Tag key={state.key} start={node.start}>\n {node.items.map(function generateListItem(item, i) {\n return <li key={i}>{output(item, state)}</li>;\n })}\n </Tag>\n );\n },\n },\n\n newlineCoalescer: {\n match: blockRegex(CONSECUTIVE_NEWLINE_R),\n order: PARSE_PRIORITY_LOW,\n parse: captureNothing,\n react(/*node, output, state*/) {\n return '\\n';\n },\n },\n\n paragraph: {\n match: blockRegex(PARAGRAPH_R),\n order: PARSE_PRIORITY_LOW,\n parse: parseCaptureInline,\n react(node, output, state) {\n return <p key={state.key}>{output(node.content, state)}</p>;\n },\n },\n\n ref: {\n match: inlineRegex(REFERENCE_IMAGE_OR_LINK),\n order: PARSE_PRIORITY_MAX,\n parse(capture /*, parse*/) {\n refs[capture[1]] = {\n target: capture[2],\n title: capture[4],\n };\n\n return {};\n },\n react: renderNothing,\n },\n\n refImage: {\n match: simpleInlineRegex(REFERENCE_IMAGE_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture) {\n return {\n alt: capture[1] || undefined,\n ref: capture[2],\n };\n },\n react(node, output, state) {\n return (\n <img\n key={state.key}\n alt={node.alt}\n src={sanitizeUrl(refs[node.ref].target)}\n title={refs[node.ref].title}\n />\n );\n },\n },\n\n refLink: {\n match: inlineRegex(REFERENCE_LINK_R),\n order: PARSE_PRIORITY_MAX,\n parse(capture, parse, state) {\n return {\n content: parse(capture[1], state),\n fallbackContent: parse(capture[0].replace(SQUARE_BRACKETS_R, '\\\\$1'), state),\n ref: capture[2],\n };\n },\n react(node, output, state) {\n return refs[node.ref] ? (\n <a\n key={state.key}\n href={sanitizeUrl(refs[node.ref].target)}\n title={refs[node.ref].title}\n >\n {output(node.content, state)}\n </a>\n ) : <span key={state.key}>{output(node.fallbackContent, state)}</span>;\n },\n },\n\n table: {\n match: blockRegex(NP_TABLE_R),\n order: PARSE_PRIORITY_HIGH,\n parse: parseTable,\n react(node, output, state) {\n return (\n <table key={state.key}>\n <thead>\n <tr>\n {node.header.map(function generateHeaderCell(content, i) {\n return (\n <th key={i} style={getTableStyle(node, i)}>\n {output(content, state)}\n </th>\n );\n })}\n </tr>\n </thead>\n\n <tbody>\n {node.cells.map(function generateTableRow(row, i) {\n return (\n <tr key={i}>\n {row.map(function generateTableCell(content, c) {\n return (\n <td key={c} style={getTableStyle(node, c)}>\n {output(content, state)}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n },\n },\n\n tableSeparator: {\n match: function(source, state) {\n if (!state.inTable) {\n return null;\n }\n return TABLE_SEPARATOR_R.exec(source);\n },\n order: PARSE_PRIORITY_HIGH,\n parse: function() {\n return { type: 'tableSeparator' };\n },\n // These shouldn't be reached, but in case they are, be reasonable:\n react() { return ' | '; }\n },\n\n text: {\n // Here we look for anything followed by non-symbols,\n // double newlines, or double-space-newlines\n // We break on any symbol characters so that this grammar\n // is easy to extend without needing to modify this regex\n match: anyScopeRegex(TEXT_PLAIN_R),\n order: PARSE_PRIORITY_MIN,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[0]\n // nbsp -> unicode equivalent for named chars\n .replace(HTML_CHAR_CODE_R, (full, inner) => {\n return options.namedCodesToUnicode[inner]\n ? options.namedCodesToUnicode[inner]\n : full;\n }),\n };\n },\n react(node /*, output, state*/) {\n return node.content;\n },\n },\n\n textBolded: {\n match: simpleInlineRegex(TEXT_BOLD_R),\n order: PARSE_PRIORITY_MED,\n parse(capture, parse, state) {\n return {\n // capture[1] -> the syntax control character\n // capture[2] -> inner content\n content: parse(capture[2], state),\n };\n },\n react(node, output, state) {\n return <strong key={state.key}>{output(node.content, state)}</strong>;\n },\n },\n\n textEmphasized: {\n match: simpleInlineRegex(TEXT_EMPHASIZED_R),\n order: PARSE_PRIORITY_LOW,\n parse(capture, parse, state) {\n return {\n // capture[1] -> opening * or _\n // capture[2] -> inner content\n content: parse(capture[2], state),\n };\n },\n react(node, output, state) {\n return <em key={state.key}>{output(node.content, state)}</em>;\n },\n },\n\n textEscaped: {\n // We don't allow escaping numbers, letters, or spaces here so that\n // backslashes used in plain text still get rendered. But allowing\n // escaping anything else provides a very flexible escape mechanism,\n // regardless of how this grammar is extended.\n match: simpleInlineRegex(TEXT_ESCAPED_R),\n order: PARSE_PRIORITY_HIGH,\n parse(capture /*, parse, state*/) {\n return {\n content: capture[1],\n type: 'text',\n };\n },\n },\n\n textStrikethroughed: {\n match: simpleInlineRegex(TEXT_STRIKETHROUGHED_R),\n order: PARSE_PRIORITY_LOW,\n parse: parseCaptureInline,\n react(node, output, state) {\n return <del key={state.key}>{output(node.content, state)}</del>;\n },\n },\n };\n\n // Object.keys(rules).forEach(key => {\n // let { match, parse } = rules[key];\n\n // rules[key].match = (...args) => {\n // const start = performance.now();\n // const result = match(...args);\n // const delta = performance.now() - start;\n\n // if (delta > 5)\n // console.warn(\n // `Slow match for ${key}: ${delta.toFixed(3)}ms, input: ${\n // args[0]\n // }`\n // );\n\n // return result;\n // };\n\n // rules[key].parse = (...args) => {\n // const start = performance.now();\n // const result = parse(...args);\n // const delta = performance.now() - start;\n\n // if (delta > 5)\n // console.warn(`Slow parse for ${key}: ${delta.toFixed(3)}ms`);\n\n // console.log(`${key}:parse`, `${delta.toFixed(3)}ms`, args[0]);\n\n // return result;\n // };\n // });\n\n const parser = parserFor(rules);\n const emitter = reactFor(ruleOutput(rules));\n\n const jsx = compile(markdown);\n\n if (footnotes.length) {\n jsx.props.children.push(\n <footer key=\"footer\">\n {footnotes.map(function createFootnote(def) {\n return (\n <div id={def.identifier} key={def.identifier}>\n {def.identifier}\n {emitter(parser(def.footnote, { inline: true }))}\n </div>\n );\n })}\n </footer>\n );\n }\n\n return jsx;\n}\n\n/**\n * A simple HOC for easy React use. Feed the markdown content as a direct child\n * and the rest is taken care of automatically.\n *\n * @param {String} options.children must be a string\n * @param {Object} options.options markdown-to-jsx options (arg 2 of the compiler)\n *\n * @return {ReactElement} the compiled JSX\n */\n\nexport default function Markdown({ children, options, ...props }) {\n return React.cloneElement(compiler(children, options), props);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n const PropTypes = require('prop-types');\n\n Markdown.propTypes = {\n children: PropTypes.string.isRequired,\n options: PropTypes.object,\n };\n}\n"]}
|
package/index.js
CHANGED
|
@@ -167,11 +167,12 @@ const REFERENCE_LINK_R = /^\[([^\]]*)\] ?\[([^\]]*)\]/;
|
|
|
167
167
|
const SQUARE_BRACKETS_R = /(\[|\])/g;
|
|
168
168
|
const SHOULD_RENDER_AS_BLOCK_R = /(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s)/;
|
|
169
169
|
const TAB_R = /\t/g;
|
|
170
|
+
const TABLE_SEPARATOR_R = /^ *\| */;
|
|
170
171
|
const TABLE_TRIM_PIPES = /(^ *\||\| *$)/g;
|
|
172
|
+
const TABLE_CELL_END_TRIM = / *$/;
|
|
171
173
|
const TABLE_CENTER_ALIGN = /^ *:-+: *$/;
|
|
172
174
|
const TABLE_LEFT_ALIGN = /^ *:-+ *$/;
|
|
173
175
|
const TABLE_RIGHT_ALIGN = /^ *-+: *$/;
|
|
174
|
-
const TABLE_ROW_SPLIT = / *\| */;
|
|
175
176
|
|
|
176
177
|
const TEXT_BOLD_R = /^([*_])\1((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1\1(?!\1)/;
|
|
177
178
|
const TEXT_EMPHASIZED_R = /^([*_])((?:\[.*?\][([].*?[)\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~+.*?~+|.)*?)\1(?!\1)/;
|
|
@@ -179,7 +180,7 @@ const TEXT_STRIKETHROUGHED_R = /^~~((?:\[.*?\]|<.*?>(?:.*?<.*?>)?|`.*?`|.)*?)~~/
|
|
|
179
180
|
|
|
180
181
|
const TEXT_ESCAPED_R = /^\\([^0-9A-Za-z\s])/;
|
|
181
182
|
const TEXT_PLAIN_R = /^[\s\S]+?(?=[^0-9A-Z\s\u00c0-\uffff&;.()'"]|\d+\.|\n\n| {2,}\n|\w+:\S|$)/i;
|
|
182
|
-
const TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R = /(^\n
|
|
183
|
+
const TRIM_NEWLINES_AND_TRAILING_WHITESPACE_R = /(^\n+|\n+$|\s+$)/g;
|
|
183
184
|
|
|
184
185
|
const HTML_LEFT_TRIM_AMOUNT_R = /^([ \t]*)/;
|
|
185
186
|
|
|
@@ -287,46 +288,56 @@ function parseTableAlignCapture(alignCapture) {
|
|
|
287
288
|
return null;
|
|
288
289
|
}
|
|
289
290
|
|
|
290
|
-
function
|
|
291
|
-
const
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
291
|
+
function parseTableRow(source, parse, state) {
|
|
292
|
+
const prevInTable = state.inTable;
|
|
293
|
+
state.inTable = true;
|
|
294
|
+
const tableRow = parse(source.trim(), state);
|
|
295
|
+
state.inTable = prevInTable;
|
|
296
|
+
|
|
297
|
+
let cells = [[]];
|
|
298
|
+
tableRow.forEach(function(node, i) {
|
|
299
|
+
if (node.type === 'tableSeparator') {
|
|
300
|
+
// Filter out empty table separators at the start/end:
|
|
301
|
+
if (i !== 0 && i !== tableRow.length - 1) {
|
|
302
|
+
// Split the current row:
|
|
303
|
+
cells.push([]);
|
|
304
|
+
}
|
|
305
|
+
} else {
|
|
306
|
+
if (node.type === 'text' && (
|
|
307
|
+
tableRow[i + 1] == null ||
|
|
308
|
+
tableRow[i + 1].type === 'tableSeparator'
|
|
309
|
+
)) {
|
|
310
|
+
node.content = node.content.replace(TABLE_CELL_END_TRIM, "");
|
|
311
|
+
}
|
|
312
|
+
cells[cells.length - 1].push(node);
|
|
313
|
+
}
|
|
298
314
|
});
|
|
315
|
+
return cells;
|
|
299
316
|
}
|
|
300
317
|
|
|
301
|
-
function parseTableAlign(
|
|
302
|
-
const alignText =
|
|
318
|
+
function parseTableAlign(source /*, parse, state*/) {
|
|
319
|
+
const alignText = source
|
|
303
320
|
.replace(TABLE_TRIM_PIPES, '')
|
|
304
|
-
.
|
|
305
|
-
.split(TABLE_ROW_SPLIT);
|
|
321
|
+
.split('|');
|
|
306
322
|
|
|
307
323
|
return alignText.map(parseTableAlignCapture);
|
|
308
324
|
}
|
|
309
325
|
|
|
310
|
-
function parseTableCells(
|
|
311
|
-
const rowsText =
|
|
326
|
+
function parseTableCells(source, parse, state) {
|
|
327
|
+
const rowsText = source
|
|
312
328
|
.trim()
|
|
313
329
|
.split('\n');
|
|
314
330
|
|
|
315
331
|
return rowsText.map(function(rowText) {
|
|
316
|
-
|
|
317
|
-
.replace(TABLE_TRIM_PIPES, '')
|
|
318
|
-
.split(TABLE_ROW_SPLIT)
|
|
319
|
-
.map(function(text) {
|
|
320
|
-
return parse(text.trim(), state);
|
|
321
|
-
});
|
|
332
|
+
return parseTableRow(rowText, parse, state);
|
|
322
333
|
});
|
|
323
334
|
}
|
|
324
335
|
|
|
325
336
|
function parseTable(capture, parse, state) {
|
|
326
337
|
state.inline = true;
|
|
327
|
-
const header =
|
|
328
|
-
const align = parseTableAlign(capture, parse, state);
|
|
329
|
-
const cells = parseTableCells(capture, parse, state);
|
|
338
|
+
const header = parseTableRow(capture[1], parse, state);
|
|
339
|
+
const align = parseTableAlign(capture[2], parse, state);
|
|
340
|
+
const cells = parseTableCells(capture[3], parse, state);
|
|
330
341
|
state.inline = false;
|
|
331
342
|
|
|
332
343
|
return {
|
|
@@ -374,6 +385,8 @@ function attributeValueToJSXPropValue(key, value) {
|
|
|
374
385
|
|
|
375
386
|
return styles;
|
|
376
387
|
}, {});
|
|
388
|
+
} else if (key === 'href') {
|
|
389
|
+
return sanitizeUrl(value)
|
|
377
390
|
} else if (value.match(INTERPOLATION_R)) {
|
|
378
391
|
// return as a string and let the consumer decide what to do with it
|
|
379
392
|
value = value.slice(1, value.length - 1);
|
|
@@ -716,6 +729,9 @@ export function compiler(markdown, options) {
|
|
|
716
729
|
options = options || {};
|
|
717
730
|
options.overrides = options.overrides || {};
|
|
718
731
|
options.slugify = options.slugify || slugify;
|
|
732
|
+
options.namedCodesToUnicode = options.namedCodesToUnicode
|
|
733
|
+
? {...namedCodesToUnicode, ...options.namedCodesToUnicode}
|
|
734
|
+
: namedCodesToUnicode;
|
|
719
735
|
|
|
720
736
|
const createElementFn = options.createElement || React.createElement;
|
|
721
737
|
|
|
@@ -1025,8 +1041,9 @@ export function compiler(markdown, options) {
|
|
|
1025
1041
|
? parseBlock
|
|
1026
1042
|
: parseInline;
|
|
1027
1043
|
|
|
1044
|
+
const tagName = capture[1].toLowerCase();
|
|
1028
1045
|
const noInnerParse =
|
|
1029
|
-
DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(
|
|
1046
|
+
DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(tagName) !== -1;
|
|
1030
1047
|
|
|
1031
1048
|
return {
|
|
1032
1049
|
attrs: attrStringToMap(capture[2]),
|
|
@@ -1038,7 +1055,7 @@ export function compiler(markdown, options) {
|
|
|
1038
1055
|
|
|
1039
1056
|
noInnerParse,
|
|
1040
1057
|
|
|
1041
|
-
tag: capture[1]
|
|
1058
|
+
tag: noInnerParse ? tagName : capture[1]
|
|
1042
1059
|
};
|
|
1043
1060
|
},
|
|
1044
1061
|
react(node, output, state) {
|
|
@@ -1407,6 +1424,21 @@ export function compiler(markdown, options) {
|
|
|
1407
1424
|
},
|
|
1408
1425
|
},
|
|
1409
1426
|
|
|
1427
|
+
tableSeparator: {
|
|
1428
|
+
match: function(source, state) {
|
|
1429
|
+
if (!state.inTable) {
|
|
1430
|
+
return null;
|
|
1431
|
+
}
|
|
1432
|
+
return TABLE_SEPARATOR_R.exec(source);
|
|
1433
|
+
},
|
|
1434
|
+
order: PARSE_PRIORITY_HIGH,
|
|
1435
|
+
parse: function() {
|
|
1436
|
+
return { type: 'tableSeparator' };
|
|
1437
|
+
},
|
|
1438
|
+
// These shouldn't be reached, but in case they are, be reasonable:
|
|
1439
|
+
react() { return ' | '; }
|
|
1440
|
+
},
|
|
1441
|
+
|
|
1410
1442
|
text: {
|
|
1411
1443
|
// Here we look for anything followed by non-symbols,
|
|
1412
1444
|
// double newlines, or double-space-newlines
|
|
@@ -1419,8 +1451,8 @@ export function compiler(markdown, options) {
|
|
|
1419
1451
|
content: capture[0]
|
|
1420
1452
|
// nbsp -> unicode equivalent for named chars
|
|
1421
1453
|
.replace(HTML_CHAR_CODE_R, (full, inner) => {
|
|
1422
|
-
return namedCodesToUnicode[inner]
|
|
1423
|
-
? namedCodesToUnicode[inner]
|
|
1454
|
+
return options.namedCodesToUnicode[inner]
|
|
1455
|
+
? options.namedCodesToUnicode[inner]
|
|
1424
1456
|
: full;
|
|
1425
1457
|
}),
|
|
1426
1458
|
};
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Convert markdown to JSX with ease for React and React-like projects. Super lightweight and highly configurable.",
|
|
4
4
|
"homepage": "https://probablyup.github.io/markdown-to-jsx",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "6.
|
|
6
|
+
"version": "6.10.3",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">= 4"
|
|
9
9
|
},
|