{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-livelyenergy/src/client/markdown.js"],"names":["Strings","Markdown","parseAndReplaceTextNode","ea","eaChild","regex","func","s","textContent","m","replace","exec","replacement","insertBefore","Text","slice","index","rest","length","remove","lastIndex","parseAndReplace","element","querySelectorAll","forEach","childNodes","parseAndReplaceBibrefs","link","evt","preventDefault","lively","openBrowser","href","parseAndReplaceFigureRefs","name","getAttribute","titleString","title","parentElement","appendChild","allNodesBetween","startNode","endNode","nodes","node","push","nextSibling","parseAndReplaceFootenotes","count","footnotes","stack","footnote","content","id","last","pop","marker","region","footnotesDiv","map","extractReferences","source","matchAll","parseAndReplaceLatex"],"mappings":";;;;;;;;;;;;;;;;;AAwBOA,a;;;;;;;;;;;;;;;;;;AAGQ,YAAMC,QAAN,CAAe;;AAI5B;AACA,eAAOC,uBAAP,CAA+BC,EAA/B,EAAmCC,OAAnC,EAA6CC,KAA7C,EAAoDC,IAApD,EAA0D;AACxD,cAAIC,IAAIH,QAAQI,WAAhB;AACA,cAAIC,CAAJ;AACA,cAAIC,UAAU,MAAM;AAClBD,gBAAKJ,MAAMM,IAAN,CAAWJ,CAAX,CAAL;AACA,gBAAIE,CAAJ,EAAO;AACL,kBAAIG,cAAcN,KAAKG,CAAL,CAAlB;AACA,kBAAIG,WAAJ,EAAiB;AACfT,mBAAGU,YAAH,CAAgB,IAAIC,IAAJ,CAASP,EAAEQ,KAAF,CAAQ,CAAR,EAAWN,EAAEO,KAAb,CAAT,CAAhB,EAAgDZ,OAAhD;AACAD,mBAAGU,YAAH,CAAgBD,WAAhB,EAA6BR,OAA7B;AACA,oBAAIa,OAAO,IAAIH,IAAJ,CAASP,EAAEQ,KAAF,CAAQN,EAAEO,KAAF,GAAUP,EAAE,CAAF,EAAKS,MAAvB,EAA+BX,EAAEW,MAAjC,CAAT,CAAX;AACAf,mBAAGU,YAAH,CAAgBI,IAAhB,EAAsBb,OAAtB;AACAA,wBAAQe,MAAR;AACA,qBAAKjB,uBAAL,CAA6BC,EAA7B,EAAiCc,IAAjC,EAAwCZ,KAAxC,EAA+CC,IAA/C,CAAqD;AAArD;AACD,eAPD,MAOO;AACL,oBAAID,MAAMe,SAAV,EAAqB;AACnBV;AACD;AACF;AACF;AACF,WAjBD;AAkBAA;AACD;;AAGD;AACA,eAAOW,eAAP,CAAuBC,OAAvB,EAAgCjB,KAAhC,EAAuCC,IAAvC,EAA6C;AAC3CgB,kBAAQC,gBAAR,CAAyB,GAAzB,EAA8BC,OAA9B,CAAsCrB,MAAM;AAC1C;AACAA,eAAGsB,UAAH,CAAcD,OAAd,CAAsBpB,WAAW;AAC/B,kBAAIA,mBAAmBU,IAAvB,EAA6B;AAC3B,qBAAKZ,uBAAL,CAA6BC,EAA7B,EAAiCC,OAAjC,EAA0CC,KAA1C,EAAiDC,IAAjD;AACD;AACF,aAJD;AAKD,WAPD;AAQD;;AAED,eAAOoB,sBAAP,CAA8BJ,OAA9B,EAAuC;AACrC,eAAKD,eAAL,CAAqBC,OAArB,EAA8B,0BAA9B,EAA2Db,CAAD,IAAO;AAC/D,gBAAIkB,+DAAiBC,OAAO;AAC1BA,kBAAIC,cAAJ;AACAC,qBAAOC,WAAP,CAAmBJ,KAAKK,IAAxB;AACD,aAHG,gCAGK,WAAUvB,EAAE,CAAF,CAHf,+BAGsBA,EAAE,CAAF,CAHtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAJ;AAIA,mBAAOkB,IAAP;AACD,WAND;AAOD;;AAGD,eAAOM,yBAAP,CAAiCX,OAAjC,EAA0C;AACxCA,kBAAQC,gBAAR,CAAyB,eAAzB,EAA0CC,OAA1C,CAAkDrB,MAAM;AACtD,gBAAI+B,OAAO/B,GAAGgC,YAAH,CAAgB,KAAhB,CAAX;AACA,gBAAID,QAAQA,SAAS,IAArB,EAA2B;AACzB,kBAAIE,cAAcjC,GAAGgC,YAAH,CAAgB,OAAhB,CAAlB;AACA,kBAAIC,eAAe,IAAnB,EAAyBA,cAAc,EAAd;AACzB,kBAAIC,qEAAmB,aAAnB,iFAAwClC,GAAGgC,YAAH,CAAgB,KAAhB,CAAxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gHAA+EhC,GAAGgC,YAAH,CAAgB,KAAhB,CAA/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAA6GC,WAA7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAJ;AACAjC,iBAAGmC,aAAH,CAAiBC,WAAjB,CAA6BF,KAA7B;AACD;AACF;;AAED;AAVA,YAWA,KAAKhB,eAAL,CAAqBC,OAArB,EAA8B,qBAA9B,EAAsDb,CAAD,2DAAgB,MAAKA,EAAE,CAAF,CAArB,+BAA4BA,EAAE,CAAF,CAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAArD;AACD;;AAED,eAAO+B,eAAP,CAAuBC,SAAvB,EAAkCC,OAAlC,EAA2C;AACzC,cAAIC,QAAQ,EAAZ;AACA,cAAIC,OAAOH,SAAX;AACA,iBAAMG,QAAQA,QAAQF,OAAtB,EAA+B;AAC7B,gBAAIE,SAASH,SAAb,EAAwBE,MAAME,IAAN,CAAWD,IAAX;AACxBA,mBAAOA,KAAKE,WAAZ;AACD;;AAED,iBAAOH,KAAP;AACD;;AAED,eAAOI,yBAAP,CAAiCzB,OAAjC,EAA0C;AACxC,cAAI0B,QAAQ,CAAZ;AACA,cAAIC,YAAY,EAAhB;AACA;AACA;;AAEA,cAAIC,QAAQ,EAAZ;;AAEA;AACA,eAAK7B,eAAL,CAAqBC,OAArB,EAA8B,YAA9B,EAA6Cb,CAAD,IAAO;AACjD,gBAAIA,EAAE,CAAF,KAAQ,IAAZ,EAAkB;AAChB,kBAAI0C,WAAW,EAACnC,OAAOgC,OAAR,EAAiBI,SAAS,EAA1B,EAA8BC,KAAK;AAAG,yBAAO,cAAc,KAAKrC,KAA1B;AAAgC,iBAAtE,EAAf;AACAiC,wBAAUJ,IAAV,CAAeM,QAAf;AACA,kBAAIxB,qHAAqB,MAAMwB,SAASE,EAAT,EAA3B,+BAA2CF,SAASnC,KAApD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAJ;AACAmC,uBAASV,SAAT,GAAqBd,IAArB;AACAuB,oBAAML,IAAN,CAAWM,QAAX;AACA,qBAAOxB,IAAP;AACD,aAPD,MAOO;AACL,kBAAI2B,OAAOJ,MAAMK,GAAN,EAAX;AACA,kBAAID,IAAJ,EAAU;AACR,oBAAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAJ;AACAF,qBAAKZ,OAAL,GAAec,MAAf;AACA,uBAAOA,MAAP;AACD;AACF;AAEF,WAjBD;;AAmBAP,oBAAUzB,OAAV,CAAkBrB,MAAM;AACtB,gBAAIA,GAAGsC,SAAH,IAAgBtC,GAAGuC,OAAvB,EAAgC;AAC9B,kBAAIe,SAAS,KAAKjB,eAAL,CAAqBrC,GAAGsC,SAAxB,EAAmCtC,GAAGuC,OAAtC,CAAb;AACAvC,iBAAGiD,OAAH,0DAAuBK,MAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAF8B,CAEQ;AACtCtD,iBAAGuC,OAAH,CAAWvB,MAAX,CAAoB;AAApB;AACD;AAEF,WAPD;;AASA,cAAI8B,UAAU/B,MAAV,GAAmB,CAAvB,EAA0B;AACxB,gBAAIwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oFAA8CT,UAAUU,GAAV,CAAcxD,iHAAiBA,GAAGkD,EAAH,EAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAA+BlD,GAAGiD,OAAlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAd,CAA9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAJ;AACA9B,oBAAQiB,WAAR,CAAoBmB,YAApB;AACD;AAEF;;AAGG;;;;;;;;;;;;AAYJ,eAAOE,iBAAP,CAAyBC,MAAzB,EAAiC;AAC/B,iBAAO7D,QAAQ8D,QAAR,CAAiB,2CAAjB,EAA8DD,MAA9D,EAAsEF,GAAtE,CAA0ExD,MAAMA,GAAG,CAAH,CAAhF,CAAP;AACD;;AAED,eAAO4D,oBAAP,CAA4BzC,OAA5B,EAAqC;AACnC,eAAKW,yBAAL,CAA+BX,OAA/B;AACA,eAAKI,sBAAL,CAA4BJ,OAA5B;AACA,eAAKyB,yBAAL,CAA+BzB,OAA/B;AACD;;AAhJ2B;;yBAATrB,Q","file":"markdown.js","sourcesContent":["/*MD # Markdown  MD*/\n\n\n/*MD ## Ebedded Latex MD*/\n/*MD \n<style>* { background-color: lightgray }</style>\n\n### Example\n\n![TestFigure](../../media/drawio \"A figure created with drawio.\")\n\nAnd look also at Figure @fig:TestFigure\n\n```javascript\nvar a = \"hello\"\n```\nThis is a reference to a paper [@Rein2016LLP] and this is a footnote^[https://d3js.org/]. \n\n<script>\nimport Markdown from \"src/client/markdown.js\"\nMarkdown.parseAndReplaceLatex(this.parentElement)\n</script>\n\nMD*/\nimport Strings from \"src/client/strings.js\"\n\n\nexport default class Markdown {\n\n  \n  \n  // #helper \n  static parseAndReplaceTextNode(ea, eaChild,  regex, func) {\n    var s = eaChild.textContent\n    var m\n    var replace = () => {\n      m  = regex.exec(s)\n      if (m) {\n        var replacement = func(m)\n        if (replacement) {\n          ea.insertBefore(new Text(s.slice(0, m.index )), eaChild)\n          ea.insertBefore(replacement, eaChild)\n          var rest = new Text(s.slice(m.index + m[0].length, s.length))\n          ea.insertBefore(rest, eaChild)\n          eaChild.remove()\n          this.parseAndReplaceTextNode(ea, rest,  regex, func) // go on with the rest...\n        } else {\n          if (regex.lastIndex) {\n            replace()  \n          }\n        }              \n      }\n    }\n    replace()\n  }\n  \n  \n  // #helper \n  static parseAndReplace(element, regex, func) {\n    element.querySelectorAll(\"*\").forEach(ea => {\n      // if (ea.localName == \"code\" || ea.localName == \"pre\") return; \n      ea.childNodes.forEach(eaChild => {\n        if (eaChild instanceof Text) {\n          this.parseAndReplaceTextNode(ea, eaChild, regex, func)\n        }\n      })\n    })\n  }\n\n  static parseAndReplaceBibrefs(element) {\n    this.parseAndReplace(element, /\\@([A-Za-z]+[0-9][A-Z]+)/, (m) => {\n      var link = <a click={evt => {\n        evt.preventDefault(); \n        lively.openBrowser(link.href)\n      }} href={\"bib://\" +m[1]}>{m[1]}</a>\n      return link \n    })\n  }\n  \n  \n  static parseAndReplaceFigureRefs(element) {\n    element.querySelectorAll(\"lively-drawio\").forEach(ea => {\n      var name = ea.getAttribute(\"alt\")\n      if (name && name !== null) {\n        var titleString = ea.getAttribute(\"title\")\n        if (titleString == null) titleString = \"\" \n        var title = <div class=\"figuretitle\"><a id={ea.getAttribute(\"alt\")}></a><b>Figure {ea.getAttribute(\"alt\")}. </b>{titleString}</div>\n        ea.parentElement.appendChild(title)        \n      }\n    })\n    \n    // late parse and convert latex figure references\n    this.parseAndReplace(element, /@fig:([A-Za-z0-9]+)/, (m) => <a href={\"#\" +m[1]}>{m[1]}</a>)\n  }\n                         \n  static allNodesBetween(startNode, endNode) {\n    var nodes = [] \n    var node = startNode\n    while(node && node != endNode) {\n      if (node !== startNode) nodes.push(node)\n      node = node.nextSibling\n    }\n   \n    return nodes\n  }\n    \n  static parseAndReplaceFootenotes(element) {\n    var count = 1\n    var footnotes = []\n    // #TODO what about markup in that markup?: ^[*Exposé* shows an overview ]\n    /*MD <browse://../Lively4DevelopmentExperience/content/Discussion.md> MD*/\n    \n    var stack = []\n    \n    // hacky hacky hack hack hack!\n    this.parseAndReplace(element, /((\\^\\[)|])/, (m) => {\n      if (m[1] == \"^[\") {\n        var footnote = {index: count++, content: \"\", id() {  return \"footnote_\" + this.index} }\n        footnotes.push(footnote)\n        var link = <sup><a href={\"#\" + footnote.id()}>{footnote.index}</a></sup>\n        footnote.startNode = link\n        stack.push(footnote)\n        return link\n      } else {\n        var last = stack.pop()\n        if (last) {\n          var marker = <b>XXXX</b>\n          last.endNode = marker\n          return marker\n        }\n      }\n      \n    })\n      \n    footnotes.forEach(ea => {\n      if (ea.startNode && ea.endNode) {\n        var region = this.allNodesBetween(ea.startNode, ea.endNode)\n        ea.content = <span>{...region}</span> // will get removed...\n        ea.endNode.remove() // ged rid of the marker\n      }     \n      \n    })\n    \n    if (footnotes.length > 0) {\n      var footnotesDiv = <div><h3>Footnotes</h3><ol>{...footnotes.map(ea => <li><a id={ea.id()}></a>{ea.content}</li>)}</ol></div>\n      element.appendChild(footnotesDiv)\n    }\n\n  }\n  \n    \n      /*MD\n<style>* {background-color:lightgray}</style>\n```javascript\n// we have to \"quote\" the @ because we are still in markdown... and replacing those references\nMarkdown.extractReferences(`Hello @`+`Foo1981HHC World\\nggg @`+`Bar2019X`)\n```\n<script>\n  import Markdown from 'src/client/markdown.js';\n  <pre>Result:{eval(this.parentElement.querySelector(\"code\").textContent)}</pre>\n</script>\n  MD*/\n  \n  static extractReferences(source) {\n    return Strings.matchAll(/@([A-Z][a-z]+[0-9][0-9][0-9][0-9][A-Z]+)/g, source).map(ea => ea[1])\n  }\n  \n  static parseAndReplaceLatex(element) {\n    this.parseAndReplaceFigureRefs(element)\n    this.parseAndReplaceBibrefs(element)\n    this.parseAndReplaceFootenotes(element)\n  }\n  \n}\n\n\n\n\n"]}