@khanacademy/simple-markdown 2.2.3 → 3.0.0
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 +8 -32
- package/dist/es/index.js +2 -2
- package/dist/es/index.js.map +1 -1
- package/dist/index.d.ts +5 -25
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -148,14 +148,6 @@ third `_`.
|
|
|
148
148
|
react: function(node, output) {
|
|
149
149
|
return React.DOM.u(null, output(node.content));
|
|
150
150
|
},
|
|
151
|
-
|
|
152
|
-
// Or an html element:
|
|
153
|
-
// (Note: you may only need to make one of `react:` or
|
|
154
|
-
// `html:`, as long as you never ask for an outputter
|
|
155
|
-
// for the other type.)
|
|
156
|
-
html: function(node, output) {
|
|
157
|
-
return '<u>' + output(node.content) + '</u>';
|
|
158
|
-
},
|
|
159
151
|
};
|
|
160
152
|
```
|
|
161
153
|
|
|
@@ -167,7 +159,7 @@ Then, we need to add this rule to the other rules:
|
|
|
167
159
|
});
|
|
168
160
|
```
|
|
169
161
|
|
|
170
|
-
Finally, we need to build our parser and
|
|
162
|
+
Finally, we need to build our parser and outputter:
|
|
171
163
|
|
|
172
164
|
```javascript
|
|
173
165
|
var rawBuiltParser = SimpleMarkdown.parserFor(rules);
|
|
@@ -175,10 +167,7 @@ Finally, we need to build our parser and outputters:
|
|
|
175
167
|
var blockSource = source + "\n\n";
|
|
176
168
|
return rawBuiltParser(blockSource, {inline: false});
|
|
177
169
|
};
|
|
178
|
-
// You probably only need one of these: choose depending on
|
|
179
|
-
// whether you want react nodes or an html string:
|
|
180
170
|
var reactOutput = SimpleMarkdown.outputFor(rules, 'react');
|
|
181
|
-
var htmlOutput = SimpleMarkdown.outputFor(rules, 'html');
|
|
182
171
|
|
|
183
172
|
```
|
|
184
173
|
|
|
@@ -212,10 +201,6 @@ markdown with underlines!
|
|
|
212
201
|
_owner: null,
|
|
213
202
|
_context: {},
|
|
214
203
|
_store: { validated: false, props: [Object] } } ]
|
|
215
|
-
|
|
216
|
-
htmlOutput(syntaxTree)
|
|
217
|
-
|
|
218
|
-
=> '<div class="paragraph"><u>hello underlines</u></div>'
|
|
219
204
|
```
|
|
220
205
|
|
|
221
206
|
|
|
@@ -242,15 +227,12 @@ Parses `source` as block if it ends with `\n\n`, or inline if not.
|
|
|
242
227
|
|
|
243
228
|
Returns React-renderable output for `syntaxTree`.
|
|
244
229
|
|
|
245
|
-
*Note: raw html output will be coming soon*
|
|
246
|
-
|
|
247
230
|
|
|
248
231
|
## Extension Overview
|
|
249
232
|
|
|
250
233
|
Elements in simple-markdown are generally created from rules.
|
|
251
234
|
For parsing, rules must specify `match` and `parse` methods.
|
|
252
|
-
For output, rules must specify a `react`
|
|
253
|
-
(or both), depending on which outputter you create afterwards.
|
|
235
|
+
For output, rules must specify a `react` method.
|
|
254
236
|
|
|
255
237
|
Here is an example rule, a slightly modified version of what
|
|
256
238
|
simple-markdown uses for parsing **strong** (**bold**) text:
|
|
@@ -268,9 +250,6 @@ simple-markdown uses for parsing **strong** (**bold**) text:
|
|
|
268
250
|
react: function(node, recurseOutput) {
|
|
269
251
|
return React.DOM.strong(null, recurseOutput(node.content));
|
|
270
252
|
},
|
|
271
|
-
html: function(node, recurseOutput) {
|
|
272
|
-
return '<strong>' + recurseOutput(node.content) + '</strong>';
|
|
273
|
-
},
|
|
274
253
|
},
|
|
275
254
|
```
|
|
276
255
|
|
|
@@ -375,8 +354,8 @@ intermediate steps in the parsing/output process, if necessary.
|
|
|
375
354
|
|
|
376
355
|
The default rules, specified as an object, where the keys are
|
|
377
356
|
the rule types, and the values are objects containing `order`,
|
|
378
|
-
`match`, `parse`,
|
|
379
|
-
|
|
357
|
+
`match`, `parse`, and `react` fields (these rules can be used
|
|
358
|
+
for both parsing and outputting).
|
|
380
359
|
|
|
381
360
|
#### `SimpleMarkdown.parserFor(rules)`
|
|
382
361
|
|
|
@@ -391,8 +370,8 @@ object must contain a `match` and a `parse` function.
|
|
|
391
370
|
|
|
392
371
|
Takes a `rules` object and a `key` that indicates which key in
|
|
393
372
|
the rules object is mapped to the function that generates the
|
|
394
|
-
output type you want. This will be `'react'`
|
|
395
|
-
|
|
373
|
+
output type you want. This will be `'react'` unless you are
|
|
374
|
+
defining a custom output type.
|
|
396
375
|
|
|
397
376
|
It returns a function that outputs a single syntax tree node of
|
|
398
377
|
any type that is in the `rules` object, given a node and a
|
|
@@ -421,17 +400,14 @@ var rules = {
|
|
|
421
400
|
};
|
|
422
401
|
|
|
423
402
|
var parser = SimpleMarkdown.parserFor(rules);
|
|
424
|
-
var reactOutput = SimpleMarkdown.outputFor(rules, 'react')
|
|
425
|
-
var htmlOutput = SimpleMarkdown.outputFor(rules, 'html'));
|
|
403
|
+
var reactOutput = SimpleMarkdown.outputFor(rules, 'react');
|
|
426
404
|
|
|
427
405
|
var blockParseAndOutput = function(source) {
|
|
428
406
|
// Many rules require content to end in \n\n to be interpreted
|
|
429
407
|
// as a block.
|
|
430
408
|
var blockSource = source + "\n\n";
|
|
431
409
|
var parseTree = parser(blockSource, {inline: false});
|
|
432
|
-
var outputResult =
|
|
433
|
-
// Or for react output, use:
|
|
434
|
-
// var outputResult = reactOutput(parseTree);
|
|
410
|
+
var outputResult = reactOutput(parseTree);
|
|
435
411
|
return outputResult;
|
|
436
412
|
};
|
|
437
413
|
```
|
package/dist/es/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { addLibraryVersionToPerseusDebug } from '@khanacademy/perseus-utils';
|
|
2
2
|
|
|
3
|
-
const libName="@khanacademy/simple-markdown";const libVersion="
|
|
3
|
+
const libName="@khanacademy/simple-markdown";const libVersion="3.0.0";addLibraryVersionToPerseusDebug(libName,libVersion);
|
|
4
4
|
|
|
5
|
-
var CR_NEWLINE_R=/\r\n?/g;var TAB_R=/\t/g;var FORMFEED_R=/\f/g;var preprocess=function(source){return source.replace(CR_NEWLINE_R,"\n").replace(FORMFEED_R,"").replace(TAB_R," ")};var populateInitialState=function(givenState,defaultState){var state=givenState||{};if(defaultState!=null){for(var prop in defaultState){if(Object.prototype.hasOwnProperty.call(defaultState,prop)){state[prop]=defaultState[prop];}}}return state};var parserFor=function(rules,defaultState){var ruleList=Object.keys(rules).filter(function(type){var rule=rules[type];if(rule==null||rule.match==null){return false}var order=rule.order;if((typeof order!=="number"||!isFinite(order))&&typeof console!=="undefined"){console.warn("simple-markdown: Invalid order for rule `"+type+"`: "+String(order));}return true});ruleList.sort(function(typeA,typeB){var ruleA=rules[typeA];var ruleB=rules[typeB];var orderA=ruleA.order;var orderB=ruleB.order;if(orderA!==orderB){return orderA-orderB}var secondaryOrderA=ruleA.quality?0:1;var secondaryOrderB=ruleB.quality?0:1;if(secondaryOrderA!==secondaryOrderB){return secondaryOrderA-secondaryOrderB}else if(typeA<typeB){return -1}else if(typeA>typeB){return 1}else {return 0}});var latestState;var nestedParse=function(source,state){var result=[];state=state||latestState;latestState=state;while(source){var ruleType=null;var rule=null;var capture=null;var quality=NaN;var i=0;var currRuleType=ruleList[0];var currRule=rules[currRuleType];do{var currOrder=currRule.order;var prevCaptureStr=state.prevCapture==null?"":state.prevCapture[0];var currCapture=currRule.match(source,state,prevCaptureStr);if(currCapture){var currQuality=currRule.quality?currRule.quality(currCapture,state,prevCaptureStr):0;if(!(currQuality<=quality)){ruleType=currRuleType;rule=currRule;capture=currCapture;quality=currQuality;}}i++;currRuleType=ruleList[i];currRule=rules[currRuleType];}while(currRule&&(!capture||currRule.order===currOrder&&currRule.quality))if(rule==null||capture==null){throw new Error("Could not find a matching rule for the below "+"content. The rule with highest `order` should "+"always match content provided to it. Check "+"the definition of `match` for '"+ruleList[ruleList.length-1]+"'. It seems to not match the following source:\n"+source)}if(capture.index){throw new Error("`match` must return a capture starting at index 0 "+"(the current parse index). Did you forget a ^ at the "+"start of the RegExp?")}var parsed=rule.parse(capture,nestedParse,state);if(Array.isArray(parsed)){Array.prototype.push.apply(result,parsed);}else {if(parsed==null||typeof parsed!=="object"){throw new Error(`parse() function returned invalid parse result: '${parsed}'`)}if(parsed.type==null){parsed.type=ruleType;}result.push(parsed);}state.prevCapture=capture;source=source.substring(state.prevCapture[0].length);}return result};var outerParse=function(source,state){latestState=populateInitialState(state,defaultState);if(!latestState.inline&&!latestState.disableAutoBlockNewlines){source=source+"\n\n";}latestState.prevCapture=null;return nestedParse(preprocess(source),latestState)};return outerParse};var inlineRegex=function(regex){var match=function(source,state,prevCapture){if(state.inline){return regex.exec(source)}else {return null}};match.regex=regex;return match};var blockRegex=function(regex){var match=function(source,state){if(state.inline){return null}else {return regex.exec(source)}};match.regex=regex;return match};var anyScopeRegex=function(regex){var match=function(source,state){return regex.exec(source)};match.regex=regex;return match};var TYPE_SYMBOL=typeof Symbol==="function"&&Symbol.for&&Symbol.for("react.element")||60103;var reactElement=function(type,key,props){var element={$$typeof:TYPE_SYMBOL,type:type,key:key==null?undefined:key,ref:null,props:props,_owner:null};return element};var htmlTag=function(tagName,content,attributes,isClosed){attributes=attributes||{};isClosed=typeof isClosed!=="undefined"?isClosed:true;var attributeString="";for(var attr in attributes){var attribute=attributes[attr];if(Object.prototype.hasOwnProperty.call(attributes,attr)&&attribute){attributeString+=" "+sanitizeText(attr)+'="'+sanitizeText(attribute)+'"';}}var unclosedTag="<"+tagName+attributeString+">";if(isClosed){return unclosedTag+content+"</"+tagName+">"}else {return unclosedTag}};var EMPTY_PROPS={};var sanitizeUrl=function(url){if(url==null){return null}try{var prot=new URL(url,"https://localhost").protocol;if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0||prot.indexOf("data:")===0){return null}}catch{return null}return url};var SANITIZE_TEXT_R=/[<>&"']/g;var SANITIZE_TEXT_CODES={"<":"<",">":">","&":"&",'"':""","'":"'","/":"/","`":"`"};var sanitizeText=function(text){return String(text).replace(SANITIZE_TEXT_R,function(chr){return SANITIZE_TEXT_CODES[chr]})};var UNESCAPE_URL_R=/\\([^0-9A-Za-z\s])/g;var unescapeUrl=function(rawUrlString){return rawUrlString.replace(UNESCAPE_URL_R,"$1")};var parseInline=function(parse,content,state){var isCurrentlyInline=state.inline||false;state.inline=true;var result=parse(content,state);state.inline=isCurrentlyInline;return result};var parseBlock=function(parse,content,state){var isCurrentlyInline=state.inline||false;state.inline=false;var result=parse(content+"\n\n",state);state.inline=isCurrentlyInline;return result};var parseCaptureInline=function(capture,parse,state){return {content:parseInline(parse,capture[1],state)}};var ignoreCapture=function(){return {}};var LIST_BULLET="(?:[*+-]|\\d+\\.)";var LIST_ITEM_PREFIX="( *)("+LIST_BULLET+") +";var LIST_ITEM_PREFIX_R=new RegExp("^"+LIST_ITEM_PREFIX);var LIST_ITEM_R=new RegExp(LIST_ITEM_PREFIX+"[^\\n]*(?:\\n"+"(?!\\1"+LIST_BULLET+" )[^\\n]*)*(\n|$)","gm");var BLOCK_END_R=/\n{2,}$/;var INLINE_CODE_ESCAPE_BACKTICKS_R=/^ (?= *`)|(` *) $/g;var LIST_BLOCK_END_R=BLOCK_END_R;var LIST_ITEM_END_R=/ *\n+$/;var LIST_R=new RegExp("^( *)("+LIST_BULLET+") "+"[\\s\\S]+?(?:\n{2,}(?! )"+"(?!\\1"+LIST_BULLET+" )\\n*"+"|\\s*\n*$)");var LIST_LOOKBEHIND_R=/(?:^|\n)( *)$/;var TABLES=function(){var TABLE_ROW_SEPARATOR_TRIM=/^ *\| *| *\| *$/g;var TABLE_CELL_END_TRIM=/ *$/;var TABLE_RIGHT_ALIGN=/^ *-+: *$/;var TABLE_CENTER_ALIGN=/^ *:-+: *$/;var TABLE_LEFT_ALIGN=/^ *:-+ *$/;var parseTableAlignCapture=function(alignCapture){if(TABLE_RIGHT_ALIGN.test(alignCapture)){return "right"}else if(TABLE_CENTER_ALIGN.test(alignCapture)){return "center"}else if(TABLE_LEFT_ALIGN.test(alignCapture)){return "left"}else {return null}};var parseTableAlign=function(source,parse,state,trimEndSeparators){if(trimEndSeparators){source=source.replace(TABLE_ROW_SEPARATOR_TRIM,"");}var alignText=source.trim().split("|");return alignText.map(parseTableAlignCapture)};var parseTableRow=function(source,parse,state,trimEndSeparators){var prevInTable=state.inTable;state.inTable=true;var tableRow=parse(source.trim(),state);state.inTable=prevInTable;var cells=[[]];tableRow.forEach(function(node,i){if(node.type==="tableSeparator"){if(!trimEndSeparators||i!==0&&i!==tableRow.length-1){cells.push([]);}}else {if(node.type==="text"&&(tableRow[i+1]==null||tableRow[i+1].type==="tableSeparator")){node.content=node.content.replace(TABLE_CELL_END_TRIM,"");}cells[cells.length-1].push(node);}});return cells};var parseTableCells=function(source,parse,state,trimEndSeparators){var rowsText=source.trim().split("\n");return rowsText.map(function(rowText){return parseTableRow(rowText,parse,state,trimEndSeparators)})};var parseTable=function(trimEndSeparators){return function(capture,parse,state){state.inline=true;var header=parseTableRow(capture[1],parse,state,trimEndSeparators);var align=parseTableAlign(capture[2],parse,state,trimEndSeparators);var cells=parseTableCells(capture[3],parse,state,trimEndSeparators);state.inline=false;return {type:"table",header:header,align:align,cells:cells}}};return {parseTable:parseTable(true),parseNpTable:parseTable(false),TABLE_REGEX:/^ *(\|.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/,NPTABLE_REGEX:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/}}();var LINK_INSIDE="(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*";var LINK_HREF_AND_TITLE="\\s*<?((?:\\([^)]*\\)|[^\\s\\\\]|\\\\.)*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*";var AUTOLINK_MAILTO_CHECK_R=/mailto:/i;var parseRef=function(capture,state,refNode){var ref=(capture[2]||capture[1]).replace(/\s+/g," ").toLowerCase();if(state._defs&&state._defs[ref]){var def=state._defs[ref];refNode.target=def.target;refNode.title=def.title;}state._refs=state._refs||{};state._refs[ref]=state._refs[ref]||[];state._refs[ref].push(refNode);return refNode};var currOrder=0;var defaultRules={Array:{react:function(arr,output,state){var oldKey=state.key;var result=[];for(var i=0,key=0;i<arr.length;i++,key++){state.key=""+i;var node=arr[i];if(node.type==="text"){node={type:"text",content:node.content};for(;i+1<arr.length&&arr[i+1].type==="text";i++){node.content+=arr[i+1].content;}}result.push(output(node,state));}state.key=oldKey;return result},html:function(arr,output,state){var result="";for(var i=0;i<arr.length;i++){var node=arr[i];if(node.type==="text"){node={type:"text",content:node.content};for(;i+1<arr.length&&arr[i+1].type==="text";i++){node.content+=arr[i+1].content;}}result+=output(node,state);}return result}},heading:{order:currOrder++,match:blockRegex(/^ *(#{1,6})([^\n]+?)#* *(?:\n *)+\n/),parse:function(capture,parse,state){return {level:capture[1].length,content:parseInline(parse,capture[2].trim(),state)}},react:function(node,output,state){return reactElement("h"+node.level,state.key,{children:output(node.content,state)})},html:function(node,output,state){return htmlTag("h"+node.level,output(node.content,state))}},nptable:{order:currOrder++,match:blockRegex(TABLES.NPTABLE_REGEX),parse:TABLES.parseNpTable,react:null,html:null},lheading:{order:currOrder++,match:blockRegex(/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/),parse:function(capture,parse,state){return {type:"heading",level:capture[2]==="="?1:2,content:parseInline(parse,capture[1],state)}},react:null,html:null},hr:{order:currOrder++,match:blockRegex(/^( *[-*_]){3,} *(?:\n *)+\n/),parse:ignoreCapture,react:function(node,output,state){return reactElement("hr",state.key,{"aria-hidden":true})},html:function(node,output,state){return '<hr aria-hidden="true">'}},codeBlock:{order:currOrder++,match:blockRegex(/^(?: [^\n]+\n*)+(?:\n *)+\n/),parse:function(capture,parse,state){var content=capture[0].replace(/^ /gm,"").replace(/\n+$/,"");return {lang:undefined,content:content}},react:function(node,output,state){var className=node.lang?"markdown-code-"+node.lang:undefined;return reactElement("pre",state.key,{children:reactElement("code",null,{className:className,children:node.content})})},html:function(node,output,state){var className=node.lang?"markdown-code-"+node.lang:undefined;var codeBlock=htmlTag("code",sanitizeText(node.content),{class:className});return htmlTag("pre",codeBlock)}},fence:{order:currOrder++,match:blockRegex(/^ *(`{3,}|~{3,}) *(?:(\S+) *)?\n([\s\S]+?)\n?\1 *(?:\n *)+\n/),parse:function(capture,parse,state){return {type:"codeBlock",lang:capture[2]||undefined,content:capture[3]}},react:null,html:null},blockQuote:{order:currOrder++,match:blockRegex(/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/),parse:function(capture,parse,state){var content=capture[0].replace(/^ *> ?/gm,"");return {content:parse(content,state)}},react:function(node,output,state){return reactElement("blockquote",state.key,{children:output(node.content,state)})},html:function(node,output,state){return htmlTag("blockquote",output(node.content,state))}},list:{order:currOrder++,match:function(source,state){var prevCaptureStr=state.prevCapture==null?"":state.prevCapture[0];var isStartOfLineCapture=LIST_LOOKBEHIND_R.exec(prevCaptureStr);var isListBlock=state._list||!state.inline;if(isStartOfLineCapture&&isListBlock){source=isStartOfLineCapture[1]+source;return LIST_R.exec(source)}else {return null}},parse:function(capture,parse,state){var bullet=capture[2];var ordered=bullet.length>1;var start=ordered?+bullet:undefined;var items=capture[0].replace(LIST_BLOCK_END_R,"\n").match(LIST_ITEM_R);var lastItemWasAParagraph=false;var itemContent=items.map(function(item,i){var prefixCapture=LIST_ITEM_PREFIX_R.exec(item);var space=prefixCapture?prefixCapture[0].length:0;var spaceRegex=new RegExp("^ {1,"+space+"}","gm");var content=item.replace(spaceRegex,"").replace(LIST_ITEM_PREFIX_R,"");var isLastItem=i===items.length-1;var containsBlocks=content.indexOf("\n\n")!==-1;var thisItemIsAParagraph=containsBlocks||isLastItem&&lastItemWasAParagraph;lastItemWasAParagraph=thisItemIsAParagraph;var oldStateInline=state.inline;var oldStateList=state._list;state._list=true;var adjustedContent;if(thisItemIsAParagraph){state.inline=false;adjustedContent=content.replace(LIST_ITEM_END_R,"\n\n");}else {state.inline=true;adjustedContent=content.replace(LIST_ITEM_END_R,"");}var result=parse(adjustedContent,state);state.inline=oldStateInline;state._list=oldStateList;return result});return {ordered:ordered,start:start,items:itemContent}},react:function(node,output,state){var ListWrapper=node.ordered?"ol":"ul";return reactElement(ListWrapper,state.key,{start:node.start,children:node.items.map(function(item,i){return reactElement("li",""+i,{children:output(item,state)})})})},html:function(node,output,state){var listItems=node.items.map(function(item){return htmlTag("li",output(item,state))}).join("");var listTag=node.ordered?"ol":"ul";var attributes={start:node.start};return htmlTag(listTag,listItems,attributes)}},def:{order:currOrder++,match:blockRegex(/^ *\[([^\]]+)\]: *<?([^\s>]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/),parse:function(capture,parse,state){var def=capture[1].replace(/\s+/g," ").toLowerCase();var target=capture[2];var title=capture[3];if(state._refs&&state._refs[def]){state._refs[def].forEach(function(refNode){refNode.target=target;refNode.title=title;});}state._defs=state._defs||{};state._defs[def]={target:target,title:title};return {def:def,target:target,title:title}},react:function(){return null},html:function(){return ""}},table:{order:currOrder++,match:blockRegex(TABLES.TABLE_REGEX),parse:TABLES.parseTable,react:function(node,output,state){var getStyle=function(colIndex){return node.align[colIndex]==null?{}:{textAlign:node.align[colIndex]}};var headers=node.header.map(function(content,i){return reactElement("th",""+i,{style:getStyle(i),scope:"col",children:output(content,state)})});var rows=node.cells.map(function(row,r){return reactElement("tr",""+r,{children:row.map(function(content,c){return reactElement("td",""+c,{style:getStyle(c),children:output(content,state)})})})});return reactElement("table",state.key,{children:[reactElement("thead","thead",{children:reactElement("tr",null,{children:headers})}),reactElement("tbody","tbody",{children:rows})]})},html:function(node,output,state){var getStyle=function(colIndex){return node.align[colIndex]==null?"":"text-align:"+node.align[colIndex]+";"};var headers=node.header.map(function(content,i){return htmlTag("th",output(content,state),{style:getStyle(i),scope:"col"})}).join("");var rows=node.cells.map(function(row){var cols=row.map(function(content,c){return htmlTag("td",output(content,state),{style:getStyle(c)})}).join("");return htmlTag("tr",cols)}).join("");var thead=htmlTag("thead",htmlTag("tr",headers));var tbody=htmlTag("tbody",rows);return htmlTag("table",thead+tbody)}},newline:{order:currOrder++,match:blockRegex(/^(?:\n *)*\n/),parse:ignoreCapture,react:function(node,output,state){return "\n"},html:function(node,output,state){return "\n"}},paragraph:{order:currOrder++,match:blockRegex(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/),parse:parseCaptureInline,react:function(node,output,state){return reactElement("div",state.key,{className:"paragraph",children:output(node.content,state)})},html:function(node,output,state){var attributes={class:"paragraph"};return htmlTag("div",output(node.content,state),attributes)}},escape:{order:currOrder++,match:inlineRegex(/^\\([^0-9A-Za-z\s])/),parse:function(capture,parse,state){return {type:"text",content:capture[1]}},react:null,html:null},tableSeparator:{order:currOrder++,match:function(source,state){if(!state.inTable){return null}return /^ *\| */.exec(source)},parse:function(){return {type:"tableSeparator"}},react:function(){return " | "},html:function(){return " | "}},autolink:{order:currOrder++,match:inlineRegex(/^<([^: >]+:\/[^ >]+)>/),parse:function(capture,parse,state){return {type:"link",content:[{type:"text",content:capture[1]}],target:capture[1]}},react:null,html:null},mailto:{order:currOrder++,match:inlineRegex(/^<([^ >]+@[^ >]+)>/),parse:function(capture,parse,state){var address=capture[1];var target=capture[1];if(!AUTOLINK_MAILTO_CHECK_R.test(target)){target="mailto:"+target;}return {type:"link",content:[{type:"text",content:address}],target:target}},react:null,html:null},url:{order:currOrder++,match:inlineRegex(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/),parse:function(capture,parse,state){return {type:"link",content:[{type:"text",content:capture[1]}],target:capture[1],title:undefined}},react:null,html:null},link:{order:currOrder++,match:inlineRegex(new RegExp("^\\[("+LINK_INSIDE+")\\]\\("+LINK_HREF_AND_TITLE+"\\)")),parse:function(capture,parse,state){var link={content:parse(capture[1],state),target:unescapeUrl(capture[2]),title:capture[3]};return link},react:function(node,output,state){return reactElement("a",state.key,{href:sanitizeUrl(node.target),title:node.title,children:output(node.content,state)})},html:function(node,output,state){var attributes={href:sanitizeUrl(node.target),title:node.title};return htmlTag("a",output(node.content,state),attributes)}},image:{order:currOrder++,match:inlineRegex(new RegExp("^!\\[("+LINK_INSIDE+")\\]\\("+LINK_HREF_AND_TITLE+"\\)")),parse:function(capture,parse,state){var image={alt:capture[1],target:unescapeUrl(capture[2]),title:capture[3]};return image},react:function(node,output,state){return reactElement("img",state.key,{src:sanitizeUrl(node.target),alt:node.alt,title:node.title})},html:function(node,output,state){var attributes={src:sanitizeUrl(node.target),alt:node.alt,title:node.title};return htmlTag("img","",attributes,false)}},reflink:{order:currOrder++,match:inlineRegex(new RegExp("^\\[("+LINK_INSIDE+")\\]"+"\\s*\\[([^\\]]*)\\]")),parse:function(capture,parse,state){return parseRef(capture,state,{type:"link",content:parse(capture[1],state)})},react:null,html:null},refimage:{order:currOrder++,match:inlineRegex(new RegExp("^!\\[("+LINK_INSIDE+")\\]"+"\\s*\\[([^\\]]*)\\]")),parse:function(capture,parse,state){return parseRef(capture,state,{type:"image",alt:capture[1]})},react:null,html:null},em:{order:currOrder,match:inlineRegex(new RegExp("^\\b_"+"((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_"+"\\b"+"|"+"^\\*(?=\\S)("+"(?:"+"\\*\\*|"+"\\\\[\\s\\S]|"+"\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|"+"[^\\s\\*\\\\]"+")+?"+")\\*(?!\\*)")),quality:function(capture){return capture[0].length+.2},parse:function(capture,parse,state){return {content:parse(capture[2]||capture[1],state)}},react:function(node,output,state){return reactElement("em",state.key,{children:output(node.content,state)})},html:function(node,output,state){return htmlTag("em",output(node.content,state))}},strong:{order:currOrder,match:inlineRegex(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/),quality:function(capture){return capture[0].length+.1},parse:parseCaptureInline,react:function(node,output,state){return reactElement("strong",state.key,{children:output(node.content,state)})},html:function(node,output,state){return htmlTag("strong",output(node.content,state))}},u:{order:currOrder++,match:inlineRegex(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/),quality:function(capture){return capture[0].length},parse:parseCaptureInline,react:function(node,output,state){return reactElement("u",state.key,{children:output(node.content,state)})},html:function(node,output,state){return htmlTag("u",output(node.content,state))}},del:{order:currOrder++,match:inlineRegex(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/),parse:parseCaptureInline,react:function(node,output,state){return reactElement("del",state.key,{children:output(node.content,state)})},html:function(node,output,state){return htmlTag("del",output(node.content,state))}},inlineCode:{order:currOrder++,match:inlineRegex(/^(`+)([\s\S]*?[^`])\1(?!`)/),parse:function(capture,parse,state){return {content:capture[2].replace(INLINE_CODE_ESCAPE_BACKTICKS_R,"$1")}},react:function(node,output,state){return reactElement("code",state.key,{children:node.content})},html:function(node,output,state){return htmlTag("code",sanitizeText(node.content))}},br:{order:currOrder++,match:anyScopeRegex(/^ {2,}\n/),parse:ignoreCapture,react:function(node,output,state){return reactElement("br",state.key,EMPTY_PROPS)},html:function(node,output,state){return "<br>"}},text:{order:currOrder++,match:anyScopeRegex(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/),parse:function(capture,parse,state){return {content:capture[0]}},react:function(node,output,state){return node.content},html:function(node,output,state){return sanitizeText(node.content)}}};var ruleOutput=function(rules,property){if(!property&&typeof console!=="undefined"){console.warn("simple-markdown ruleOutput should take 'react' or "+"'html' as the second argument.");}var nestedRuleOutput=function(ast,outputFunc,state){return rules[ast.type][property](ast,outputFunc,state)};return nestedRuleOutput};var reactFor=function(outputFunc){var nestedOutput=function(ast,state){state=state||{};if(Array.isArray(ast)){var oldKey=state.key;var result=[];var lastResult=null;for(var i=0;i<ast.length;i++){state.key=""+i;var nodeOut=nestedOutput(ast[i],state);if(typeof nodeOut==="string"&&typeof lastResult==="string"){lastResult=lastResult+nodeOut;result[result.length-1]=lastResult;}else {result.push(nodeOut);lastResult=nodeOut;}}state.key=oldKey;return result}else {return outputFunc(ast,nestedOutput,state)}};return nestedOutput};var htmlFor=function(outputFunc){var nestedOutput=function(ast,state){state=state||{};if(Array.isArray(ast)){return ast.map(function(node){return nestedOutput(node,state)}).join("")}else {return outputFunc(ast,nestedOutput,state)}};return nestedOutput};var outputFor=function(rules,property,defaultState={}){if(!property){throw new Error("simple-markdown: outputFor: `property` must be "+"defined. "+"if you just upgraded, you probably need to replace `outputFor` "+"with `reactFor`")}var latestState;var arrayRule=rules.Array||defaultRules.Array;var arrayRuleCheck=arrayRule[property];if(!arrayRuleCheck){throw new Error("simple-markdown: outputFor: to join nodes of type `"+property+"` you must provide an `Array:` joiner rule with that type, "+"Please see the docs for details on specifying an Array rule.")}var arrayRuleOutput=arrayRuleCheck;var nestedOutput=function(ast,state){state=state||latestState;latestState=state;if(Array.isArray(ast)){return arrayRuleOutput(ast,nestedOutput,state)}else {return rules[ast.type][property](ast,nestedOutput,state)}};var outerOutput=function(ast,state){latestState=populateInitialState(state,defaultState);return nestedOutput(ast,latestState)};return outerOutput};var defaultRawParse=parserFor(defaultRules);var defaultBlockParse=function(source,state){state=state||{};state.inline=false;return defaultRawParse(source,state)};var defaultInlineParse=function(source,state){state=state||{};state.inline=true;return defaultRawParse(source,state)};var defaultImplicitParse=function(source,state){var isBlock=BLOCK_END_R.test(source);state=state||{};state.inline=!isBlock;return defaultRawParse(source,state)};var defaultReactOutput=outputFor(defaultRules,"react");var defaultHtmlOutput=outputFor(defaultRules,"html");var markdownToReact=function(source,state){return defaultReactOutput(defaultBlockParse(source,state),state)};var markdownToHtml=function(source,state){return defaultHtmlOutput(defaultBlockParse(source,state),state)};var ReactMarkdown=function(props){var divProps={};for(var prop in props){if(prop!=="source"&&Object.prototype.hasOwnProperty.call(props,prop)){divProps[prop]=props[prop];}}divProps.children=markdownToReact(props.source);return reactElement("div",null,divProps)};var SimpleMarkdown={defaultRules:defaultRules,parserFor:parserFor,outputFor:outputFor,inlineRegex:inlineRegex,blockRegex:blockRegex,anyScopeRegex:anyScopeRegex,parseInline:parseInline,parseBlock:parseBlock,markdownToReact:markdownToReact,markdownToHtml:markdownToHtml,ReactMarkdown:ReactMarkdown,defaultBlockParse:defaultBlockParse,defaultInlineParse:defaultInlineParse,defaultImplicitParse:defaultImplicitParse,defaultReactOutput:defaultReactOutput,defaultHtmlOutput:defaultHtmlOutput,preprocess:preprocess,sanitizeText:sanitizeText,sanitizeUrl:sanitizeUrl,unescapeUrl:unescapeUrl,htmlTag:htmlTag,reactElement:reactElement,defaultRawParse:defaultRawParse,ruleOutput:ruleOutput,reactFor:reactFor,htmlFor:htmlFor,defaultParse:function(...args){if(typeof console!=="undefined"){console.warn("defaultParse is deprecated, please use `defaultImplicitParse`");}return defaultImplicitParse.apply(null,args)},defaultOutput:function(...args){if(typeof console!=="undefined"){console.warn("defaultOutput is deprecated, please use `defaultReactOutput`");}return defaultReactOutput.apply(null,args)}};
|
|
5
|
+
var CR_NEWLINE_R=/\r\n?/g;var TAB_R=/\t/g;var FORMFEED_R=/\f/g;var preprocess=function(source){return source.replace(CR_NEWLINE_R,"\n").replace(FORMFEED_R,"").replace(TAB_R," ")};var populateInitialState=function(givenState,defaultState){var state=givenState||{};if(defaultState!=null){for(var prop in defaultState){if(Object.prototype.hasOwnProperty.call(defaultState,prop)){state[prop]=defaultState[prop];}}}return state};var parserFor=function(rules,defaultState){var ruleList=Object.keys(rules).filter(function(type){var rule=rules[type];if(rule==null||rule.match==null){return false}var order=rule.order;if((typeof order!=="number"||!isFinite(order))&&typeof console!=="undefined"){console.warn("simple-markdown: Invalid order for rule `"+type+"`: "+String(order));}return true});ruleList.sort(function(typeA,typeB){var ruleA=rules[typeA];var ruleB=rules[typeB];var orderA=ruleA.order;var orderB=ruleB.order;if(orderA!==orderB){return orderA-orderB}var secondaryOrderA=ruleA.quality?0:1;var secondaryOrderB=ruleB.quality?0:1;if(secondaryOrderA!==secondaryOrderB){return secondaryOrderA-secondaryOrderB}else if(typeA<typeB){return -1}else if(typeA>typeB){return 1}else {return 0}});var latestState;var nestedParse=function(source,state){var result=[];state=state||latestState;latestState=state;while(source){var ruleType=null;var rule=null;var capture=null;var quality=NaN;var i=0;var currRuleType=ruleList[0];var currRule=rules[currRuleType];do{var currOrder=currRule.order;var prevCaptureStr=state.prevCapture==null?"":state.prevCapture[0];var currCapture=currRule.match(source,state,prevCaptureStr);if(currCapture){var currQuality=currRule.quality?currRule.quality(currCapture,state,prevCaptureStr):0;if(!(currQuality<=quality)){ruleType=currRuleType;rule=currRule;capture=currCapture;quality=currQuality;}}i++;currRuleType=ruleList[i];currRule=rules[currRuleType];}while(currRule&&(!capture||currRule.order===currOrder&&currRule.quality))if(rule==null||capture==null){throw new Error("Could not find a matching rule for the below "+"content. The rule with highest `order` should "+"always match content provided to it. Check "+"the definition of `match` for '"+ruleList[ruleList.length-1]+"'. It seems to not match the following source:\n"+source)}if(capture.index){throw new Error("`match` must return a capture starting at index 0 "+"(the current parse index). Did you forget a ^ at the "+"start of the RegExp?")}var parsed=rule.parse(capture,nestedParse,state);if(Array.isArray(parsed)){Array.prototype.push.apply(result,parsed);}else {if(parsed==null||typeof parsed!=="object"){throw new Error(`parse() function returned invalid parse result: '${parsed}'`)}if(parsed.type==null){parsed.type=ruleType;}result.push(parsed);}state.prevCapture=capture;source=source.substring(state.prevCapture[0].length);}return result};var outerParse=function(source,state){latestState=populateInitialState(state,defaultState);if(!latestState.inline&&!latestState.disableAutoBlockNewlines){source=source+"\n\n";}latestState.prevCapture=null;return nestedParse(preprocess(source),latestState)};return outerParse};var inlineRegex=function(regex){var match=function(source,state,prevCapture){if(state.inline){return regex.exec(source)}else {return null}};match.regex=regex;return match};var blockRegex=function(regex){var match=function(source,state){if(state.inline){return null}else {return regex.exec(source)}};match.regex=regex;return match};var anyScopeRegex=function(regex){var match=function(source,state){return regex.exec(source)};match.regex=regex;return match};var TYPE_SYMBOL=typeof Symbol==="function"&&Symbol.for&&Symbol.for("react.element")||60103;var reactElement=function(type,key,props){var element={$$typeof:TYPE_SYMBOL,type:type,key:key==null?undefined:key,ref:null,props:props,_owner:null};return element};var EMPTY_PROPS={};var sanitizeUrl=function(url){if(url==null){return null}try{var prot=new URL(url,"https://localhost").protocol;if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0||prot.indexOf("data:")===0){return null}}catch{return null}return url};var SANITIZE_TEXT_R=/[<>&"']/g;var SANITIZE_TEXT_CODES={"<":"<",">":">","&":"&",'"':""","'":"'","/":"/","`":"`"};var sanitizeText=function(text){return String(text).replace(SANITIZE_TEXT_R,function(chr){return SANITIZE_TEXT_CODES[chr]})};var UNESCAPE_URL_R=/\\([^0-9A-Za-z\s])/g;var unescapeUrl=function(rawUrlString){return rawUrlString.replace(UNESCAPE_URL_R,"$1")};var parseInline=function(parse,content,state){var isCurrentlyInline=state.inline||false;state.inline=true;var result=parse(content,state);state.inline=isCurrentlyInline;return result};var parseBlock=function(parse,content,state){var isCurrentlyInline=state.inline||false;state.inline=false;var result=parse(content+"\n\n",state);state.inline=isCurrentlyInline;return result};var parseCaptureInline=function(capture,parse,state){return {content:parseInline(parse,capture[1],state)}};var ignoreCapture=function(){return {}};var LIST_BULLET="(?:[*+-]|\\d+\\.)";var LIST_ITEM_PREFIX="( *)("+LIST_BULLET+") +";var LIST_ITEM_PREFIX_R=new RegExp("^"+LIST_ITEM_PREFIX);var LIST_ITEM_R=new RegExp(LIST_ITEM_PREFIX+"[^\\n]*(?:\\n"+"(?!\\1"+LIST_BULLET+" )[^\\n]*)*(\n|$)","gm");var BLOCK_END_R=/\n{2,}$/;var INLINE_CODE_ESCAPE_BACKTICKS_R=/^ (?= *`)|(` *) $/g;var LIST_BLOCK_END_R=BLOCK_END_R;var LIST_ITEM_END_R=/ *\n+$/;var LIST_R=new RegExp("^( *)("+LIST_BULLET+") "+"[\\s\\S]+?(?:\n{2,}(?! )"+"(?!\\1"+LIST_BULLET+" )\\n*"+"|\\s*\n*$)");var LIST_LOOKBEHIND_R=/(?:^|\n)( *)$/;var TABLES=function(){var TABLE_ROW_SEPARATOR_TRIM=/^ *\| *| *\| *$/g;var TABLE_CELL_END_TRIM=/ *$/;var TABLE_RIGHT_ALIGN=/^ *-+: *$/;var TABLE_CENTER_ALIGN=/^ *:-+: *$/;var TABLE_LEFT_ALIGN=/^ *:-+ *$/;var parseTableAlignCapture=function(alignCapture){if(TABLE_RIGHT_ALIGN.test(alignCapture)){return "right"}else if(TABLE_CENTER_ALIGN.test(alignCapture)){return "center"}else if(TABLE_LEFT_ALIGN.test(alignCapture)){return "left"}else {return null}};var parseTableAlign=function(source,parse,state,trimEndSeparators){if(trimEndSeparators){source=source.replace(TABLE_ROW_SEPARATOR_TRIM,"");}var alignText=source.trim().split("|");return alignText.map(parseTableAlignCapture)};var parseTableRow=function(source,parse,state,trimEndSeparators){var prevInTable=state.inTable;state.inTable=true;var tableRow=parse(source.trim(),state);state.inTable=prevInTable;var cells=[[]];tableRow.forEach(function(node,i){if(node.type==="tableSeparator"){if(!trimEndSeparators||i!==0&&i!==tableRow.length-1){cells.push([]);}}else {if(node.type==="text"&&(tableRow[i+1]==null||tableRow[i+1].type==="tableSeparator")){node.content=node.content.replace(TABLE_CELL_END_TRIM,"");}cells[cells.length-1].push(node);}});return cells};var parseTableCells=function(source,parse,state,trimEndSeparators){var rowsText=source.trim().split("\n");return rowsText.map(function(rowText){return parseTableRow(rowText,parse,state,trimEndSeparators)})};var parseTable=function(trimEndSeparators){return function(capture,parse,state){state.inline=true;var header=parseTableRow(capture[1],parse,state,trimEndSeparators);var align=parseTableAlign(capture[2],parse,state,trimEndSeparators);var cells=parseTableCells(capture[3],parse,state,trimEndSeparators);state.inline=false;return {type:"table",header:header,align:align,cells:cells}}};return {parseTable:parseTable(true),parseNpTable:parseTable(false),TABLE_REGEX:/^ *(\|.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/,NPTABLE_REGEX:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/}}();var LINK_INSIDE="(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*";var LINK_HREF_AND_TITLE="\\s*<?((?:\\([^)]*\\)|[^\\s\\\\]|\\\\.)*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*";var AUTOLINK_MAILTO_CHECK_R=/mailto:/i;var parseRef=function(capture,state,refNode){var ref=(capture[2]||capture[1]).replace(/\s+/g," ").toLowerCase();if(state._defs&&state._defs[ref]){var def=state._defs[ref];refNode.target=def.target;refNode.title=def.title;}state._refs=state._refs||{};state._refs[ref]=state._refs[ref]||[];state._refs[ref].push(refNode);return refNode};var currOrder=0;var defaultRules={Array:{react:function(arr,output,state){var oldKey=state.key;var result=[];for(var i=0,key=0;i<arr.length;i++,key++){state.key=""+i;var node=arr[i];if(node.type==="text"){node={type:"text",content:node.content};for(;i+1<arr.length&&arr[i+1].type==="text";i++){node.content+=arr[i+1].content;}}result.push(output(node,state));}state.key=oldKey;return result}},heading:{order:currOrder++,match:blockRegex(/^ *(#{1,6})([^\n]+?)#* *(?:\n *)+\n/),parse:function(capture,parse,state){return {level:capture[1].length,content:parseInline(parse,capture[2].trim(),state)}},react:function(node,output,state){return reactElement("h"+node.level,state.key,{children:output(node.content,state)})}},nptable:{order:currOrder++,match:blockRegex(TABLES.NPTABLE_REGEX),parse:TABLES.parseNpTable,react:null},lheading:{order:currOrder++,match:blockRegex(/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/),parse:function(capture,parse,state){return {type:"heading",level:capture[2]==="="?1:2,content:parseInline(parse,capture[1],state)}},react:null},hr:{order:currOrder++,match:blockRegex(/^( *[-*_]){3,} *(?:\n *)+\n/),parse:ignoreCapture,react:function(node,output,state){return reactElement("hr",state.key,{"aria-hidden":true})}},codeBlock:{order:currOrder++,match:blockRegex(/^(?: [^\n]+\n*)+(?:\n *)+\n/),parse:function(capture,parse,state){var content=capture[0].replace(/^ /gm,"").replace(/\n+$/,"");return {lang:undefined,content:content}},react:function(node,output,state){var className=node.lang?"markdown-code-"+node.lang:undefined;return reactElement("pre",state.key,{children:reactElement("code",null,{className:className,children:node.content})})}},fence:{order:currOrder++,match:blockRegex(/^ *(`{3,}|~{3,}) *(?:(\S+) *)?\n([\s\S]+?)\n?\1 *(?:\n *)+\n/),parse:function(capture,parse,state){return {type:"codeBlock",lang:capture[2]||undefined,content:capture[3]}},react:null},blockQuote:{order:currOrder++,match:blockRegex(/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/),parse:function(capture,parse,state){var content=capture[0].replace(/^ *> ?/gm,"");return {content:parse(content,state)}},react:function(node,output,state){return reactElement("blockquote",state.key,{children:output(node.content,state)})}},list:{order:currOrder++,match:function(source,state){var prevCaptureStr=state.prevCapture==null?"":state.prevCapture[0];var isStartOfLineCapture=LIST_LOOKBEHIND_R.exec(prevCaptureStr);var isListBlock=state._list||!state.inline;if(isStartOfLineCapture&&isListBlock){source=isStartOfLineCapture[1]+source;return LIST_R.exec(source)}else {return null}},parse:function(capture,parse,state){var bullet=capture[2];var ordered=bullet.length>1;var start=ordered?+bullet:undefined;var items=capture[0].replace(LIST_BLOCK_END_R,"\n").match(LIST_ITEM_R);var lastItemWasAParagraph=false;var itemContent=items.map(function(item,i){var prefixCapture=LIST_ITEM_PREFIX_R.exec(item);var space=prefixCapture?prefixCapture[0].length:0;var spaceRegex=new RegExp("^ {1,"+space+"}","gm");var content=item.replace(spaceRegex,"").replace(LIST_ITEM_PREFIX_R,"");var isLastItem=i===items.length-1;var containsBlocks=content.indexOf("\n\n")!==-1;var thisItemIsAParagraph=containsBlocks||isLastItem&&lastItemWasAParagraph;lastItemWasAParagraph=thisItemIsAParagraph;var oldStateInline=state.inline;var oldStateList=state._list;state._list=true;var adjustedContent;if(thisItemIsAParagraph){state.inline=false;adjustedContent=content.replace(LIST_ITEM_END_R,"\n\n");}else {state.inline=true;adjustedContent=content.replace(LIST_ITEM_END_R,"");}var result=parse(adjustedContent,state);state.inline=oldStateInline;state._list=oldStateList;return result});return {ordered:ordered,start:start,items:itemContent}},react:function(node,output,state){var ListWrapper=node.ordered?"ol":"ul";return reactElement(ListWrapper,state.key,{start:node.start,children:node.items.map(function(item,i){return reactElement("li",""+i,{children:output(item,state)})})})}},def:{order:currOrder++,match:blockRegex(/^ *\[([^\]]+)\]: *<?([^\s>]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/),parse:function(capture,parse,state){var def=capture[1].replace(/\s+/g," ").toLowerCase();var target=capture[2];var title=capture[3];if(state._refs&&state._refs[def]){state._refs[def].forEach(function(refNode){refNode.target=target;refNode.title=title;});}state._defs=state._defs||{};state._defs[def]={target:target,title:title};return {def:def,target:target,title:title}},react:function(){return null}},table:{order:currOrder++,match:blockRegex(TABLES.TABLE_REGEX),parse:TABLES.parseTable,react:function(node,output,state){var getStyle=function(colIndex){return node.align[colIndex]==null?{}:{textAlign:node.align[colIndex]}};var headers=node.header.map(function(content,i){return reactElement("th",""+i,{style:getStyle(i),scope:"col",children:output(content,state)})});var rows=node.cells.map(function(row,r){return reactElement("tr",""+r,{children:row.map(function(content,c){return reactElement("td",""+c,{style:getStyle(c),children:output(content,state)})})})});return reactElement("table",state.key,{children:[reactElement("thead","thead",{children:reactElement("tr",null,{children:headers})}),reactElement("tbody","tbody",{children:rows})]})}},newline:{order:currOrder++,match:blockRegex(/^(?:\n *)*\n/),parse:ignoreCapture,react:function(node,output,state){return "\n"}},paragraph:{order:currOrder++,match:blockRegex(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/),parse:parseCaptureInline,react:function(node,output,state){return reactElement("div",state.key,{className:"paragraph",children:output(node.content,state)})}},escape:{order:currOrder++,match:inlineRegex(/^\\([^0-9A-Za-z\s])/),parse:function(capture,parse,state){return {type:"text",content:capture[1]}},react:null},tableSeparator:{order:currOrder++,match:function(source,state){if(!state.inTable){return null}return /^ *\| */.exec(source)},parse:function(){return {type:"tableSeparator"}},react:function(){return " | "}},autolink:{order:currOrder++,match:inlineRegex(/^<([^: >]+:\/[^ >]+)>/),parse:function(capture,parse,state){return {type:"link",content:[{type:"text",content:capture[1]}],target:capture[1]}},react:null},mailto:{order:currOrder++,match:inlineRegex(/^<([^ >]+@[^ >]+)>/),parse:function(capture,parse,state){var address=capture[1];var target=capture[1];if(!AUTOLINK_MAILTO_CHECK_R.test(target)){target="mailto:"+target;}return {type:"link",content:[{type:"text",content:address}],target:target}},react:null},url:{order:currOrder++,match:inlineRegex(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/),parse:function(capture,parse,state){return {type:"link",content:[{type:"text",content:capture[1]}],target:capture[1],title:undefined}},react:null},link:{order:currOrder++,match:inlineRegex(new RegExp("^\\[("+LINK_INSIDE+")\\]\\("+LINK_HREF_AND_TITLE+"\\)")),parse:function(capture,parse,state){var link={content:parse(capture[1],state),target:unescapeUrl(capture[2]),title:capture[3]};return link},react:function(node,output,state){return reactElement("a",state.key,{href:sanitizeUrl(node.target),title:node.title,children:output(node.content,state)})}},image:{order:currOrder++,match:inlineRegex(new RegExp("^!\\[("+LINK_INSIDE+")\\]\\("+LINK_HREF_AND_TITLE+"\\)")),parse:function(capture,parse,state){var image={alt:capture[1],target:unescapeUrl(capture[2]),title:capture[3]};return image},react:function(node,output,state){return reactElement("img",state.key,{src:sanitizeUrl(node.target),alt:node.alt,title:node.title})}},reflink:{order:currOrder++,match:inlineRegex(new RegExp("^\\[("+LINK_INSIDE+")\\]"+"\\s*\\[([^\\]]*)\\]")),parse:function(capture,parse,state){return parseRef(capture,state,{type:"link",content:parse(capture[1],state)})},react:null},refimage:{order:currOrder++,match:inlineRegex(new RegExp("^!\\[("+LINK_INSIDE+")\\]"+"\\s*\\[([^\\]]*)\\]")),parse:function(capture,parse,state){return parseRef(capture,state,{type:"image",alt:capture[1]})},react:null},em:{order:currOrder,match:inlineRegex(new RegExp("^\\b_"+"((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_"+"\\b"+"|"+"^\\*(?=\\S)("+"(?:"+"\\*\\*|"+"\\\\[\\s\\S]|"+"\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|"+"[^\\s\\*\\\\]"+")+?"+")\\*(?!\\*)")),quality:function(capture){return capture[0].length+.2},parse:function(capture,parse,state){return {content:parse(capture[2]||capture[1],state)}},react:function(node,output,state){return reactElement("em",state.key,{children:output(node.content,state)})}},strong:{order:currOrder,match:inlineRegex(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/),quality:function(capture){return capture[0].length+.1},parse:parseCaptureInline,react:function(node,output,state){return reactElement("strong",state.key,{children:output(node.content,state)})}},u:{order:currOrder++,match:inlineRegex(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/),quality:function(capture){return capture[0].length},parse:parseCaptureInline,react:function(node,output,state){return reactElement("u",state.key,{children:output(node.content,state)})}},del:{order:currOrder++,match:inlineRegex(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/),parse:parseCaptureInline,react:function(node,output,state){return reactElement("del",state.key,{children:output(node.content,state)})}},inlineCode:{order:currOrder++,match:inlineRegex(/^(`+)([\s\S]*?[^`])\1(?!`)/),parse:function(capture,parse,state){return {content:capture[2].replace(INLINE_CODE_ESCAPE_BACKTICKS_R,"$1")}},react:function(node,output,state){return reactElement("code",state.key,{children:node.content})}},br:{order:currOrder++,match:anyScopeRegex(/^ {2,}\n/),parse:ignoreCapture,react:function(node,output,state){return reactElement("br",state.key,EMPTY_PROPS)}},text:{order:currOrder++,match:anyScopeRegex(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/),parse:function(capture,parse,state){return {content:capture[0]}},react:function(node,output,state){return node.content}}};var ruleOutput=function(rules,property){if(!property&&typeof console!=="undefined"){console.warn("simple-markdown ruleOutput should take 'react' as the "+"second argument.");}var nestedRuleOutput=function(ast,outputFunc,state){return rules[ast.type][property](ast,outputFunc,state)};return nestedRuleOutput};var reactFor=function(outputFunc){var nestedOutput=function(ast,state){state=state||{};if(Array.isArray(ast)){var oldKey=state.key;var result=[];var lastResult=null;for(var i=0;i<ast.length;i++){state.key=""+i;var nodeOut=nestedOutput(ast[i],state);if(typeof nodeOut==="string"&&typeof lastResult==="string"){lastResult=lastResult+nodeOut;result[result.length-1]=lastResult;}else {result.push(nodeOut);lastResult=nodeOut;}}state.key=oldKey;return result}else {return outputFunc(ast,nestedOutput,state)}};return nestedOutput};var outputFor=function(rules,property,defaultState={}){if(!property){throw new Error("simple-markdown: outputFor: `property` must be "+"defined. "+"if you just upgraded, you probably need to replace `outputFor` "+"with `reactFor`")}var latestState;var arrayRule=rules.Array||defaultRules.Array;var arrayRuleCheck=arrayRule[property];if(!arrayRuleCheck){throw new Error("simple-markdown: outputFor: to join nodes of type `"+property+"` you must provide an `Array:` joiner rule with that type, "+"Please see the docs for details on specifying an Array rule.")}var arrayRuleOutput=arrayRuleCheck;var nestedOutput=function(ast,state){state=state||latestState;latestState=state;if(Array.isArray(ast)){return arrayRuleOutput(ast,nestedOutput,state)}else {return rules[ast.type][property](ast,nestedOutput,state)}};var outerOutput=function(ast,state){latestState=populateInitialState(state,defaultState);return nestedOutput(ast,latestState)};return outerOutput};var defaultRawParse=parserFor(defaultRules);var defaultBlockParse=function(source,state){state=state||{};state.inline=false;return defaultRawParse(source,state)};var defaultInlineParse=function(source,state){state=state||{};state.inline=true;return defaultRawParse(source,state)};var defaultImplicitParse=function(source,state){var isBlock=BLOCK_END_R.test(source);state=state||{};state.inline=!isBlock;return defaultRawParse(source,state)};var defaultReactOutput=outputFor(defaultRules,"react");var markdownToReact=function(source,state){return defaultReactOutput(defaultBlockParse(source,state),state)};var ReactMarkdown=function(props){var divProps={};for(var prop in props){if(prop!=="source"&&Object.prototype.hasOwnProperty.call(props,prop)){divProps[prop]=props[prop];}}divProps.children=markdownToReact(props.source);return reactElement("div",null,divProps)};var SimpleMarkdown={defaultRules:defaultRules,parserFor:parserFor,outputFor:outputFor,inlineRegex:inlineRegex,blockRegex:blockRegex,anyScopeRegex:anyScopeRegex,parseInline:parseInline,parseBlock:parseBlock,markdownToReact:markdownToReact,ReactMarkdown:ReactMarkdown,defaultBlockParse:defaultBlockParse,defaultInlineParse:defaultInlineParse,defaultImplicitParse:defaultImplicitParse,defaultReactOutput:defaultReactOutput,preprocess:preprocess,sanitizeText:sanitizeText,sanitizeUrl:sanitizeUrl,unescapeUrl:unescapeUrl,reactElement:reactElement,defaultRawParse:defaultRawParse,ruleOutput:ruleOutput,reactFor:reactFor,defaultParse:function(...args){if(typeof console!=="undefined"){console.warn("defaultParse is deprecated, please use `defaultImplicitParse`");}return defaultImplicitParse.apply(null,args)},defaultOutput:function(...args){if(typeof console!=="undefined"){console.warn("defaultOutput is deprecated, please use `defaultReactOutput`");}return defaultReactOutput.apply(null,args)}};
|
|
6
6
|
|
|
7
7
|
export { SimpleMarkdown as default, libVersion };
|
|
8
8
|
//# sourceMappingURL=index.js.map
|