@khanacademy/simple-markdown 2.1.2 → 2.1.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/dist/es/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { addLibraryVersionToPerseusDebug } from '@khanacademy/perseus-utils';
2
2
 
3
- const libName="@khanacademy/simple-markdown";const libVersion="2.1.2";addLibraryVersionToPerseusDebug(libName,libVersion);
3
+ const libName="@khanacademy/simple-markdown";const libVersion="2.1.3";addLibraryVersionToPerseusDebug(libName,libVersion);
4
4
 
5
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={"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;","'":"&#x27;","/":"&#x2F;","`":"&#96;"};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 " &vert; "}},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)}};
6
6
 
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var perseusUtils = require('@khanacademy/perseus-utils');
6
6
 
7
- const libName="@khanacademy/simple-markdown";const libVersion="2.1.2";perseusUtils.addLibraryVersionToPerseusDebug(libName,libVersion);
7
+ const libName="@khanacademy/simple-markdown";const libVersion="2.1.3";perseusUtils.addLibraryVersionToPerseusDebug(libName,libVersion);
8
8
 
9
9
  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={"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;","'":"&#x27;","/":"&#x2F;","`":"&#96;"};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 " &vert; "}},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)}};
10
10
 
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Javascript markdown parsing, made simple",
4
4
  "author": "Khan Academy",
5
5
  "license": "MIT",
6
- "version": "2.1.2",
6
+ "version": "2.1.3",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -22,7 +22,7 @@
22
22
  "dist"
23
23
  ],
24
24
  "dependencies": {
25
- "@khanacademy/perseus-utils": "2.1.2"
25
+ "@khanacademy/perseus-utils": "2.1.3"
26
26
  },
27
27
  "devDependencies": {
28
28
  "perseus-build-settings": "0.9.0"
@@ -34,5 +34,8 @@
34
34
  "keywords": [
35
35
  "markdown"
36
36
  ],
37
+ "khan": {
38
+ "catalogHash": "5d5d8fa43d22b8e8"
39
+ },
37
40
  "scripts": {}
38
41
  }