Last active
May 21, 2024 23:54
-
-
Save BaldarSilveraxe/0eaaf6fafe8cef89c73fb89c6f37d563 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var markdown = markdown || (() => { | |
const version = '1.0.9'; | |
const lastUpdate = 1578236090; | |
const checkInstall = () => { | |
log('-=> markdown v'+version+' <=- ['+(new Date(lastUpdate*1000))+']'); | |
}; | |
var MDA = []; | |
var STYLES = {}; | |
var escpUnescp = escpUnescp || (() => { | |
const decodeArray = [ | |
{find: /(%%GREATERTHANSIGN%%%)/g, rplc:'>'}, | |
{find: /(%%UMBERSIGN%%%%%%%%%)/g, rplc:'#'}, | |
{find: /(%%ASTERISK%%%%%%%%%%)/g, rplc:'*'}, | |
{find: /(%%GRAVEACCENT%%%%%%%)/g, rplc:'`'}, | |
{find: /(%%TILDE%%%%%%%%%%%%%)/g, rplc:'~'}, | |
{find: /(%%HYPHEN%%%%%%%%%%%%)/g, rplc:'-'}, | |
{find: /(%%VERTICALBAR%%%%%%%)/g, rplc:'|'}, | |
{find: /(%%PERIOD%%%%%%%%%%%%)/g, rplc:'.'}, | |
{find: /(%%PARENTHESISLEFT%%%)/g, rplc:'('}, | |
{find: /(%%PARENTHESISRIGHT%%)/g, rplc:')'}, | |
{find: /(%%SQUAREBRACKETRIG%%)/g, rplc:'['}, | |
{find: /(%%SQUAREBRACKETLEF%%)/g, rplc:']'} | |
]; | |
const encodeArray = [ | |
{regexp: /(\\#)/g, newSubstr:'%%UMBERSIGN%%%%%%%%%'}, | |
{regexp: /(\\`)/g, newSubstr:'%%GRAVEACCENT%%%%%%%'}, | |
{regexp: /(\\~)/g, newSubstr:'%%TILDE%%%%%%%%%%%%%'}, | |
{regexp: /(\\-)/g, newSubstr:'%%HYPHEN%%%%%%%%%%%%'}, | |
{regexp: /(\\>)/g, newSubstr:'%%GREATERTHANSIGN%%%'}, | |
{regexp: /(\\(\*))/g, newSubstr:'%%ASTERISK%%%%%%%%%%'}, | |
{regexp: /(\\(\|))/g, newSubstr:'%%VERTICALBAR%%%%%%%'}, | |
{regexp: /(\\(\.))/g, newSubstr:'%%PERIOD%%%%%%%%%%%%'}, | |
{regexp: /(\\(\())/g, newSubstr:'%%PARENTHESISLEFT%%%'}, | |
{regexp: /(\\(\)))/g, newSubstr:'%%PARENTHESISRIGHT%%'}, | |
{regexp: /(\\(\[))/g, newSubstr:'%%SQUAREBRACKETRIG%%'}, | |
{regexp: /(\\(\]))/g, newSubstr:'%%SQUAREBRACKETLEF%%'} | |
]; | |
const encode = (s) => { | |
encodeArray.forEach(function(item) { | |
(s.match(item.regexp)||[]).forEach(function(regexp) { | |
s = s.replace(regexp, item.newSubstr ); | |
}); | |
}); | |
return s; | |
}; | |
const decode = (s) => { | |
decodeArray.forEach(function(item) { | |
(s.match(item.find)||[]).forEach(function(each) { | |
s = s.replace( each, item.rplc ); | |
}); | |
}); | |
return s; | |
}; | |
return { | |
Encode: encode, | |
Decode: decode | |
}; | |
})(); | |
const getCSS = (props) => { | |
var txt = ''; | |
var stl = {}; | |
var htm = {}; | |
var declarations; | |
var selector; | |
props.text = props.text.replace( /(<!--\sAPI_markdown\s-->)/g, '' ) | |
.replace( /(<!--\sAPI_markdown_end\s-->)/g, '' ) | |
.replace( /^\[css\]\(.*?\)/mi, '' ) | |
.replace( /^\[css\]/m, '' ) | |
.replace( / /g, '' ) | |
.replace( /"/g, "'" ) | |
.replace( /\n/g, '') | |
.replace( /\s+/g, ' ').trim(); | |
if ( !(/.*?\{(.*?)\}/g).test(props.text) ) return {cssId: null, styles: null, markdown: null, mdCssTag: null}; | |
props.text.match(/.*?\{(.*?)\}/g).forEach(function(css) { | |
selector = css.substring(0, css.indexOf('{')).trim(); | |
declarations = css.substring(css.indexOf('{') + 1,css.indexOf('}')); | |
htm[selector] = declarations.split(';').filter(Boolean); | |
stl[selector] = ` style="${ declarations }" `; | |
}); | |
Object.keys(htm).forEach(function(selector) { | |
txt = `${ txt }${ selector } {<br>`; | |
htm[selector].forEach(function(declaration) { | |
txt = `${ txt } ${ declaration.trim() };<br>`; | |
}); | |
txt = `${ txt }}<br><br>`; | |
}); | |
return { | |
cssId: null, | |
styles: stl, | |
markdown: escpUnescp.Decode(`<!-- API_markdown -->[css](${props.cssId})<br><br>${txt}<!-- API_markdown_end -->`), | |
mdCssTag: props.mdCssTag | |
}; | |
}; | |
const getMd = ( cid, mdtag ) => { | |
let count = {// add ol and ul counts to this | |
bqCount: 0, | |
bqDepth: 0, | |
tableStarted: false, | |
tdStyles: [], | |
thStyles: [], | |
rowCount: 0 | |
}; | |
let txt = ''; | |
let passcount = 0; | |
let dirTags = [ | |
{opn: /(<)(\s*?div style=").*?(\s*?>)/gi, cls: /(<\/div>)/gi, tagOpn: '<div>', tagCls: '</div>'}, | |
{opn: /(<)(\s*?span style=").*?(\s*?>)/gi, cls: /(<\/span>)/gi, tagOpn: '<span>', tagCls: '</span>'}, | |
{opn: /(<)(\s*?p style=").*?(\s*?>)/gi, cls: /(<\/p>)/gi, tagOpn: '<p>', tagCls: '</p>'}, | |
{opn: /(<)(\s*?table\s+?style=).*?(\s*?>)/gmi, cls: /(<)(\s*?\/table\s*?>)/gi, tagOpn: '<table>', tagCls: '</table>'}, | |
{opn: /(<)(\s*?tbody\s+?style=).*?(\s*?>)/gmi, cls: /(<)(\s*?\/tbody\s*?>)/gi, tagOpn: '<tbody>', tagCls: '</tbody>'}, | |
{opn: /(<)(\s*?tr\s+?style=).*?(\s*?>)/gmi, cls: /(<)(\s*?\/tr\s*?>)/gi, tagOpn: '<tr>', tagCls: '</tr>'}, | |
{opn: /(<)(\s*?td\s+?style=).*?(\s*?>)/gmi, cls: /(<)(\s*?\/td\s*?>)/gi, tagOpn: '<td>', tagCls: '</td>'} | |
]; | |
const getStyle = (s) => ((STYLES ? hasOwnProperty.call(STYLES, s) : false) ? STYLES[s] : ''); | |
const getBetween = (s1, s2, s3) => s1.substring(s1.indexOf(s2) + s2.length, s1.indexOf(s3)); | |
const tdAsArray = (s) => s.line.split('|').filter(Boolean); | |
const isEven = ( n ) => n % 2 == 0; | |
const getStyleTD = ( s ) => { | |
s = s.replace(/ /g, ' ' ).trim(); | |
s = ((/^-{3,}:$/m).test(s) | |
? 'td.align-right' | |
: ((/^:-{3,}:$/m).test(s) | |
? 'td.align-center' | |
: 'td.align-left')); | |
return getStyle(s); | |
}; | |
const has = { | |
fence: (i) => (/^`{3,}(?!.*`)/m).test(MDA[i].line), | |
inLineCode: (i) => (/`{3,}(?=.*`{3,})/g).test(MDA[i].line), | |
hRule: (i) => (/^(_{3}_*|-{3}-*|\*{3}\**)$/m).test(MDA[i].line), | |
blockquote: (i) => (/^>(\s| )(?=\S)/m).test(MDA[i].line), | |
tableRow: (i) => (/^\|.*\|$/m).test(MDA[i].line), | |
tdStyles: (i) => (/((\|:-{3,}:)|(\|:-{3,})|(\|-{3,}:))/gm).test(MDA[i].line.replace(/( |\s)/g, '')), | |
ol: (i) => (/^( |\s)*\d+\.( |\s)(?=\S+)/m).test(MDA[i].line), | |
ul: (i) => (/^( |\s)*-( |\s)(?=\S+)/m).test(MDA[i].line), | |
heading: (i) => (/^#{1,6}(?=\s\S+)/m).test(MDA[i].line), | |
breakTag: (i) => (/(<)\s*?(br)\s*?(\/|)(>)/mi).test(MDA[i].line), | |
breakSpaces: (i) => (/( |\s)( |\s)$/mi).test(MDA[i].line), | |
typeComment: (i) => MDA[i].type === 'comment', | |
typeCode: (i) => MDA[i].type === 'code', | |
typeUnknown: (i) => MDA[i].type === 'unknown', | |
typeQuote: (i) => MDA[i].type === 'quote' | |
}; | |
const parseFence = (i) => { | |
let k; | |
let j = i + 1; | |
while (j < MDA.length) { | |
if ( has.fence(j) ) { | |
k = i + 1; | |
while (k < MDA.length) { | |
if (has.fence(k)) { | |
MDA[i] = {type: 'code', line: MDA[i].line.replace(/^`{3,}(?!.*`)/m, `<pre${ getStyle('pre') }>`)}; | |
MDA[k] = {type: 'code', line: MDA[k].line.replace(/^`{3,}(?!.*`)/m, '</pre>')}; | |
break; | |
} | |
MDA[k] = {type: 'code', line: (k == (i + 1) ? MDA[k].line : '<br/>'.concat(MDA[k].line))}; | |
k++; | |
} | |
break; | |
} | |
j++; | |
} | |
}; | |
const parseInLineCode = (i) => { | |
while ( has.inLineCode(i) ) { | |
MDA[i].line = MDA[i].line.replace(/`{3}/m, `<span${ getStyle('code') }>`).replace(/`{3}/m, '</span>'); | |
} | |
}; | |
const parseHrule = (i) => { | |
var n = ('*-_').indexOf(MDA[i].line.charAt(0)); | |
if ( n !== -1 ) { | |
MDA[i] = {type: '<hr />', line: `<hr${ getStyle(['hr','hr.style2','hr.style3'][n]) }>`}; | |
} | |
}; | |
const parseFormateElements = ( i ) => { | |
[ | |
{rx: /(\*{3}).+?(\*{3})/gm, s1: '***', s2: `<b ${getStyle('b')}>`.concat(`<i ${getStyle('i')}>`), s3: '</i>'.concat('</b>')}, | |
{rx: /(\*{2}).+?(\*{2})/gm, s1: '**', s2: `<b ${getStyle('b')}>`, s3: '</b>'}, | |
{rx: /(\*{1}).+?(\*{1})/gm, s1: '*', s2: `<i ${getStyle('i')}>`, s3: '</i>'}, | |
{rx: /~~.+?~~/gm, s1: '~~', s2: `<del ${getStyle('del')}>`, s3: '</del>'} | |
].forEach(function(each) { | |
(MDA[i].line.match(each.rx) || []).forEach(function(match) { | |
MDA[i].line = MDA[i].line.replace(each.s1, each.s2).replace(each.s1, each.s3); | |
}); | |
}); | |
}; | |
const parseImages = ( i ) => { | |
(MDA[i].line.match(/(!\[.*?\]\(.*?\))/g)||[]).forEach(function (img) { | |
let sel = _.first(getBetween(img,'[',']').split(' ')).trim(); | |
let ttl = getBetween(img,'[',']').replace(sel,'').trim(); | |
let url = getBetween(img, '(', ')'); | |
ttl = (ttl === '') ? sel : ttl; | |
MDA[i].line = MDA[i].line.replace(img, `<img src="${ url }"${ getStyle(sel) } title="${ ttl }" >` | |
); | |
}); | |
}; | |
const parseLinks = ( i ) => { | |
(MDA[i].line.match(/\[.*?\]\(.*?\)/g) || []).forEach(function(link) { | |
MDA[i].line = MDA[i].line.replace( | |
link, | |
`<a href="${ getBetween(link,'(',')') }">${ getBetween(link,'[',']') }</a>`); | |
}); | |
}; | |
const parseRollTwentyLinks = ( i ) => { | |
(MDA[i].line.match(/\[\(.*?\)\]/g) || []).forEach(function(link) { | |
let o = filterObjs(function(obj) { | |
return obj.get('name') === getBetween(link, '(', ')'); | |
}); | |
if (o && undefined !== o[0] ) { | |
MDA[i].line = MDA[i].line.replace(link, `<a href="https://journal.roll20.net/${ o[0].get('type') }/${ o[0].id }">${ o[0].get('name') }</a>`); | |
} | |
}); | |
}; | |
passcount = 0; | |
do { | |
let olTabs = 0; | |
let olCount = 0; | |
let ulTabs = 0; | |
let ulCount = 0; | |
cleanPass = true; | |
for (let i = 0; i < MDA.length; i++) { | |
if ( has.typeComment(i) || has.typeCode(i) ) continue; | |
if ( has.fence(i) ) parseFence(i); | |
if ( has.inLineCode(i) ) parseInLineCode(i); | |
if ( has.hRule(i) ) parseHrule(i); | |
parseFormateElements(i); | |
parseImages(i); | |
parseLinks(i); | |
parseRollTwentyLinks(i); | |
if ( has.blockquote(i) ) { | |
count.bqDepth = MDA[i].line.match(/>(\s| )(?=\S)/g).length; | |
while (count.bqCount < count.bqDepth) { | |
count.bqCount++; | |
MDA[i].line = MDA[i].line.replace(/^>(\s| )(?=\S)/m, ''); | |
MDA.splice(i, 0, {type: '<blockquote>', line: `<blockquote ${getStyle('blockquote')}>`}); | |
i++; | |
} | |
while (count.bqCount > count.bqDepth) { | |
count.bqCount--; | |
MDA[i].line = MDA[i].line.replace(/^>(\s| )(?=\S)/m, ''); | |
MDA.splice(i, 0, {type: '</blockquote>', line: '</blockquote>'}); | |
i++; | |
} | |
if (count.bqCount == count.bqDepth) { | |
for (let j = 0; j < count.bqDepth; j++) { | |
MDA[i] = {type: 'quote', line: MDA[i].line.replace(/^>(\s| )(?=\S)/m, '')}; | |
} | |
} | |
cleanPass = false; | |
continue; | |
} | |
while (count.bqCount > 0) { | |
count.bqCount--; | |
MDA.splice(i, 0, {type: '</blockquote>', line: '</blockquote>'}); | |
i++; | |
cleanPass = false; | |
} // blockquote------------------------------------------------- | |
if ( has.tableRow(i) ) { | |
if (!count.tableStarted) { | |
count.tableStarted = true; | |
if ( has.tdStyles(i + 1) ) { | |
tdAsArray(MDA[i + 1]).forEach((each, j) => { | |
count.tdStyles[j] = getStyleTD(each); | |
}); | |
MDA.splice(i + 1, 1); | |
MDA.splice(i, 0, {type: '<tr>', line: `<tr${ getStyle('tr:first-child') }>`}); | |
MDA.splice(i, 0, {type: '<tbody>', line: `<tbody${ getStyle('tbody') }>`}); | |
MDA.splice(i, 0, {type: '<table>', line: `<table${ getStyle('table') }>`}); | |
i = 1 + 3; | |
}else{ | |
tdAsArray(MDA[i]).forEach((each, j) => { | |
count.tdStyles[j] = getStyleTD(each); | |
}); | |
MDA.splice(i, 0, {type: '<tr>', line: `<tr${ getStyle('tr:first-child') }>`}); | |
MDA.splice(i, 0, {type: '<tbody>', line: `<tbody${ getStyle('tbody') }>`}); | |
MDA.splice(i, 0, {type: '<table>', line: `<table${ getStyle('table') }>`}); | |
i = i + 3; | |
} | |
_.each(tdAsArray(MDA[i]), (eachTd, j) => { | |
MDA.splice(i, 0, {type: '</td>', line: '</td>'}); | |
MDA.splice(i, 0, {type: 'data', line: eachTd}); | |
MDA.splice(i, 0, {type: '<td>', line: `<td${ count.tdStyles[j] }>`}); | |
i = i + 3; | |
}); | |
MDA[i] = {type: '</tr>', line: '</tr>'}; | |
count.rowCount++; | |
} else { | |
MDA.splice(i, 0, {type: '<tr>', line: `<tr${ | |
(!(/^\|.*\|$/m).test(MDA[i + 1].line) && STYLES.hasOwnProperty('tr:nth-child(last)') | |
? STYLES['tr:nth-child(last)'] | |
: (isEven(count.rowCount) && STYLES.hasOwnProperty('tr:nth-child(odd)') | |
? STYLES['tr:nth-child(odd)'] | |
: (STYLES.hasOwnProperty('tr:nth-child(even)') | |
? STYLES['tr:nth-child(even)'] | |
: '')))}>`}); | |
i++; | |
_.each(tdAsArray(MDA[i]), (eachTd, j) => { | |
MDA.splice(i, 0, {type: '</td>', line: '</td>'}); | |
MDA.splice(i, 0, {type: 'data', line: eachTd}); | |
MDA.splice(i, 0, {type: '<td>', line: `<td${ count.tdStyles[j] }>`}); | |
i = i + 3; | |
}); | |
MDA[i] = {type: '</tr>', line: '</tr>'}; | |
count.rowCount++; | |
} | |
continue; | |
} else { | |
if (count.tableStarted) { | |
count.tableStarted = false; | |
MDA.splice(i, 0, {type: '</table>', line: '</table>'}); | |
MDA.splice(i, 0, {type: '</tbody>', line: '</tbody>'}); | |
i = i + 2; | |
count.rowCount = 0; | |
count.tdStyles = []; | |
count.thStyles = []; | |
cleanPass = false; | |
} | |
} // table------------------------------------------------------ | |
if ( has.ol(i) ) { | |
let bullet = MDA[i].line.match(/^( |\s)*\d+\.( |\s)(?=\S+)/m)[0].match(/^( |\s)*(?=\S)/m)[0].replace(/ /g, ' '); | |
olTabs = (bullet.length / 4) + 1; | |
while (olCount < olTabs) { | |
MDA.splice(i, 0, {type: '<ol>', line: `<ol${ getStyle('ol') }>`}); | |
i++; | |
olCount++; | |
} | |
MDA[i] = {type: '<li>', line: `<li${(_.has(STYLES, 'li.ordered') ? STYLES['li.ordered'] : '')}>${ MDA[i].line.replace(MDA[i].line.match(/^( |\s)*\d+\.( |\s)(?=\S+)/m)[0], '') }</li>`}; | |
while (olCount > olTabs) { | |
MDA.splice(i, 0, {type: '</ol>', line: '</ol>'}); | |
i++; | |
olCount--; | |
} | |
continue; | |
} else { | |
while (olCount > 0) { | |
MDA.splice(i, 0, {type: '</ol>', line: '</ol>'}); | |
i++; | |
olCount--; | |
} | |
} // ordered list----------------------------------------------- | |
if ( has.ul(i) ) { | |
let bullet = MDA[i].line.match(/^( |\s)*-( |\s)(?=\S+)/m)[0].match(/^( |\s)*(?=\S)/m)[0].replace(/ /g, ' '); | |
ulTabs = (bullet.length / 4) + 1; | |
while (ulCount < ulTabs) { | |
MDA.splice(i, 0, {type: '<ul>', line: `<ul${ getStyle('ul') }>`}); | |
i++; | |
ulCount++; | |
} | |
MDA[i] = {type: '<li>', line: `<li${(_.has(STYLES, 'li.unordered') ? STYLES['li.unordered'] : '')}>${ MDA[i].line.replace(MDA[i].line.match(/^( |\s)*-( |\s)(?=\S+)/m)[0], '') }</li>`}; | |
while (ulCount > ulTabs) { | |
MDA.splice(i, 0, {type: '</ul>', line: '</ul>'}); | |
i++; | |
ulCount--; | |
} | |
continue; | |
} else { | |
while (ulCount > 0) { | |
MDA.splice(i, 0, {type: '</ul>', line: '</ul>'}); | |
i++; | |
ulCount--; | |
} | |
} // unordered list--------------------------------------------- | |
if ( has.heading(i) ) { | |
let hDepth = MDA[i].line.match(/^#{1,6}(?=\s\S+)/m)[0].length; | |
MDA.splice(i, 0, {type: `<h${ hDepth }>`, line: `<h${ hDepth }${ getStyle('h' + hDepth) }>`}); | |
i++; | |
MDA[i] = {type: `<h${ hDepth }>`, line: MDA[i].line.replace(MDA[i].line.match(/^#{1,6}(?=\s\S+)/m)[0] + ' ', '')}; | |
MDA.splice(i + 1, 0, {type: `</h${ hDepth }>`, line: `</h${ hDepth }>`}); | |
i++; | |
} // heading---------------------------------------------------- | |
dirTags.forEach(function(eachTag) { | |
if ((eachTag.opn).test(MDA[i].line)) { | |
var j = i; | |
while (j < MDA.length) { | |
if ((eachTag.cls).test(MDA[j].line)) { | |
MDA[i] = {type: 'tag', line: MDA[i].line.replace(MDA[i].line.match(eachTag.opn)[0], MDA[i].line.match(eachTag.opn)[0].replace(/</g, '<').replace(/>/g, '>'))}; | |
MDA[j] = {type: 'tag', line: MDA[j].line.replace(MDA[j].line.match(eachTag.cls)[0], MDA[j].line.match(eachTag.cls)[0].replace(/</g, '<').replace(/>/g, '>'))}; | |
break; | |
} | |
j++; | |
} | |
} | |
}); // direct tags---------------------------------------------- | |
if ( has.breakTag(i) && has.typeUnknown(i + 1) ) { | |
MDA[i].line = MDA[i].line.replace(/(<)\s*?(br)\s*?(\/|)(>)/mi, '<br/>') + MDA[i + 1].line; | |
MDA.splice(i + 1, 1); | |
} // break in text tag------------------------------------------ | |
if ( has.breakSpaces(i) && has.typeUnknown(i + 1) ) { | |
MDA[i].line = MDA[i].line.replace(/( |\s)( |\s)$/mi, '<br/>') + MDA[i + 1].line; | |
MDA.splice(i + 1, 1); | |
} // break in text spaces---------------------------------------- | |
if ( has.typeUnknown(i) ) { | |
MDA[i] = {type: '<p>', line: `<p${getStyle('p')}>${MDA[i].line}</p>`}; | |
} // p---------------------------------------------------------- | |
if ( has.typeQuote(i) ) { | |
MDA[i] = {type: '<p>', line: `<p${getStyle('p.blockquote')}>${MDA[i].line}</p>`}; | |
} // p---------------------------------------------------------- | |
if (passcount == 5) { | |
cleanPass = true; | |
} // limits passes---------------------------------------------- | |
} | |
passcount++; | |
} while (!cleanPass); | |
if (_.has(STYLES, 'bg')) { | |
MDA.splice(1, 0, {type: 'div', line: `<div${ STYLES.bg }>`}); | |
MDA.splice(MDA.length - 1, 0, {type: '/div', line: '</div>'}); | |
} // Background--------------------------------------------------------- | |
_.each( MDA, ( line )=>{ //foreach | |
txt = `${ txt }${ line.line }`; | |
}); | |
txt = escpUnescp.Decode(txt); | |
if ( txt == '<!-- API_markdown --><!-- API_markdown_end -->' ) { | |
return { | |
cssId: null, | |
styles: null, | |
markdown: null, | |
mdCssTag: null, | |
}; | |
} | |
return { | |
cssId: cid, | |
styles: null, | |
markdown: txt, | |
mdCssTag: mdtag | |
}; | |
}; | |
const parser = ( props ) => { | |
var rgx = { | |
pClose: /(<\s*?\/\s*?p\s*?>)/gi, | |
br_Tag: /(<\s*?br(\s*?|\/|\s*?style.*?)>)/gi, | |
anyTag: /(<([^>]+)>)/gi, | |
md_Tag: /^\[md\]/m, | |
cssTag: /^\[css\]/m, | |
cssLnk: /(?:\[css\]\()(.*?)(?:\))/mi | |
}; | |
var cssId; | |
var styles; | |
var mdCssTag; | |
var firstLine = false; | |
var returnNull={cssId:null,styles:null,markdown:null,mdCssTag: null}; | |
MDA = []; | |
props = props || {}; | |
props.text = props.text || ''; | |
props.styles = props.styles || {}; | |
props.objid = props.objid || ''; | |
if ( 0 === props.text.length ) return returnNull; | |
props.text = escpUnescp.Encode(props.text); | |
[rgx.pClose, rgx.br_Tag].forEach(function(each) { | |
props.text = props.text.replace(each, '\n'); | |
}); | |
props.text = props.text.replace(rgx.anyTag, ''); | |
mdCssTag = ((rgx.md_Tag).test(props.text) | |
? '[md]' | |
: ((rgx.cssTag).test(props.text) | |
? '[css]' | |
: undefined)); | |
if ( mdCssTag == '[md]' ) { | |
cssId = (((rgx.cssLnk).test(props.text) && getObj( 'handout', props.text.match(rgx.cssLnk)[1])) | |
? props.text.match(rgx.cssLnk)[1] | |
: null); | |
STYLES = (props.styles.hasOwnProperty(cssId) | |
? props.styles[cssId] | |
: {}); | |
} | |
if ( mdCssTag == '[css]' ) { | |
var o = getObj( 'handout', props.objid); | |
if( undefined === o ) return returnNull; | |
cssId = o.id; | |
} | |
if ( mdCssTag === void 0 ) return returnNull; | |
[rgx.md_Tag, rgx.cssLnk, rgx.cssTag].forEach(function(each) { | |
props.text = ((each).test(props.text) | |
? props.text.replace(props.text.match(each)[0], '') | |
: props.text); | |
}); | |
props.text = '<!-- API_markdown -->' | |
+ '\n' | |
+ props.text | |
+ '\n' | |
+ '<!-- API_markdown_end -->'; | |
props.text.split('\n').forEach( (each) => { | |
if ( each == '<!-- API_markdown -->' || each == '<!-- API_markdown_end -->' ) { | |
MDA.push({ type: 'comment', line: each }); | |
}else{ | |
if ( firstLine ) { | |
MDA.push({ type: 'unknown', line: each }); | |
}else{ | |
if ( each.length != 0 ) { //avoid "/n" lines at that start | |
firstLine = true; | |
MDA.push({ type: 'unknown', line: each }); | |
} | |
} | |
} | |
}); | |
if ( mdCssTag == '[css]' ) return getCSS({text: props.text, mdCssTag: mdCssTag, cssId: cssId}); | |
if ( mdCssTag == '[md]' ) return getMd(cssId, mdCssTag); | |
return returnNull; | |
}; | |
on("ready",()=>{ | |
checkInstall(); | |
}); | |
return { | |
Parser: parser | |
}; | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment