basb-cli
Version:
Blog as Second Brain!
2 lines (1 loc) • 41.3 kB
JavaScript
const t={},e={DEBUG:!1,VS:8,AR:10,DIAGRAM_CLASS:"railroad-diagram",STROKE_ODD_PIXEL_LENGTH:!0,INTERNAL_ALIGNMENT:"center",CHAR_WIDTH:8.5,COMMENT_CHAR_WIDTH:7,ESCAPE_HTML:!0},h="\n\tsvg {\n\t\tbackground-color: hsl(30,20%,95%);\n\t}\n\tpath {\n\t\tstroke-width: 3;\n\t\tstroke: black;\n\t\tfill: rgba(0,0,0,0);\n\t}\n\ttext {\n\t\tfont: bold 14px monospace;\n\t\ttext-anchor: middle;\n\t\twhite-space: pre;\n\t}\n\ttext.diagram-text {\n\t\tfont-size: 12px;\n\t}\n\ttext.diagram-arrow {\n\t\tfont-size: 16px;\n\t}\n\ttext.label {\n\t\ttext-anchor: start;\n\t}\n\ttext.comment {\n\t\tfont: italic 12px monospace;\n\t}\n\tg.non-terminal text {\n\t\t/*font-style: italic;*/\n\t}\n\trect {\n\t\tstroke-width: 3;\n\t\tstroke: black;\n\t\tfill: hsl(120,100%,90%);\n\t}\n\trect.group-box {\n\t\tstroke: gray;\n\t\tstroke-dasharray: 10 5;\n\t\tfill: none;\n\t}\n\tpath.diagram-text {\n\t\tstroke-width: 3;\n\t\tstroke: black;\n\t\tfill: white;\n\t\tcursor: help;\n\t}\n\tg.diagram-text:hover path.diagram-text {\n\t\tfill: #eee;\n\t}";class i{constructor(t,e,h){this.children=h||[],this.tagName=t,this.attrs=b(e,{})}format(t,e,h){}addTo(t){if(t instanceof i)return t.children.push(this),this;var e=this.toSVG();return t.appendChild(e),e}toSVG(){var t=function(t,e,h){e=e||{},h=h||"";var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var s in e)"xlink:href"===s?i.setAttributeNS("http://www.w3.org/1999/xlink","href",e[s]):i.setAttribute(s,e[s]);return i.textContent=h,i}(this.tagName,this.attrs);return"string"==typeof this.children?t.textContent=this.children:this.children.forEach((function(e){t.appendChild(e.toSVG())})),t}toString(){var t="<"+this.tagName,e="g"==this.tagName||"svg"==this.tagName;for(var h in this.attrs)t+=" "+h+'="'+(this.attrs[h]+"").replace(/&/g,"&").replace(/"/g,""")+'"';return t+=">",e&&(t+="\n"),"string"==typeof this.children?t+=this.children.replace(/[*_\`\[\]<&]/g,(function(t){return"&#"+t.charCodeAt(0)+";"})):this.children.forEach((function(e){t+=e})),t+="</"+this.tagName+">\n"}toTextDiagram(){return new M(0,0,[])}toText(){var t=this.toTextDiagram().lines.join("\n")+"\n";return e.ESCAPE_HTML&&(t=t.replace("&","&").replace("<","<").replace(">",">").replace('"',""")),t}walk(t){t(this)}}class s extends i{constructor(t,e){super("path"),this.attrs.d="M"+t+" "+e}m(t,e){return this.attrs.d+="m"+t+" "+e,this}h(t){return this.attrs.d+="h"+t,this}right(t){return this.h(Math.max(0,t))}left(t){return this.h(-Math.max(0,t))}v(t){return this.attrs.d+="v"+t,this}down(t){return this.v(Math.max(0,t))}up(t){return this.v(-Math.max(0,t))}arc(t){var h,i=e.AR,s=e.AR;return"e"!=t[0]&&"w"!=t[1]||(i*=-1),"s"!=t[0]&&"n"!=t[1]||(s*=-1),h="ne"==t||"es"==t||"sw"==t||"wn"==t?1:0,this.attrs.d+="a"+e.AR+" "+e.AR+" 0 0 "+h+" "+i+" "+s,this}arc_8(t,h){const i=e.AR,s=1/Math.sqrt(2)*i,r=i-s;let n="a "+i+" "+i+" 0 0 "+("cw"==h?"1":"0")+" ";const a=t+h;return n+=("ncw"==a?[s,r]:"necw"==a?[r,s]:"ecw"==a?[-r,s]:"secw"==a?[-s,r]:"scw"==a?[-s,-r]:"swcw"==a?[-r,-s]:"wcw"==a?[r,-s]:"nwcw"==a?[s,-r]:"nccw"==a?[-s,r]:"nwccw"==a?[-r,s]:"wccw"==a?[r,s]:"swccw"==a?[s,r]:"sccw"==a?[s,-r]:"seccw"==a?[r,-s]:"eccw"==a?[-r,-s]:"neccw"==a?[-s,-r]:null).join(" "),this.attrs.d+=n,this}l(t,e){return this.attrs.d+="l"+t+" "+e,this}format(){return this.attrs.d+="h.5",this}toTextDiagram(){return new M(0,0,[])}}class r extends i{constructor(t,e,h,i){super(t,h,i),this.items=e.map(E)}walk(t){t(this),this.items.forEach((e=>e.walk(t)))}}class n extends r{constructor(...t){super("svg",t,{class:e.DIAGRAM_CLASS}),this.items[0]instanceof x||this.items.unshift(new x),this.items[this.items.length-1]instanceof T||this.items.push(new T),this.up=this.down=this.height=this.width=0;for(const t of this.items)this.width+=t.width+(t.needsSpace?20:0),this.up=Math.max(this.up,t.up-this.height),this.height+=t.height,this.down=Math.max(this.down-t.height,t.down);this.formatted=!1}format(t,h,r,n){t=b(t,20),h=b(h,t,20),r=b(r,t,20);var a=n=b(n,h,20),o=t;o+=this.up;for(var d=new i("g",e.STROKE_ODD_PIXEL_LENGTH?{transform:"translate(.5 .5)"}:{}),p=0;p<this.items.length;p++){var w=this.items[p];w.needsSpace&&(new s(a,o).h(10).addTo(d),a+=10),w.format(a,o,w.width).addTo(d),a+=w.width,o+=w.height,w.needsSpace&&(new s(a,o).h(10).addTo(d),a+=10)}return this.attrs.width=this.width+n+h,this.attrs.height=this.up+this.height+this.down+t+r,this.attrs.viewBox="0 0 "+this.attrs.width+" "+this.attrs.height,d.addTo(this),this.formatted=!0,this}addTo(t){if(!t){var e=document.getElementsByTagName("script");t=(e=e[e.length-1]).parentNode}return super.addTo.call(this,t)}toSVG(){return this.formatted||this.format(),super.toSVG.call(this)}toString(){return this.formatted||this.format(),super.toString.call(this)}toStandalone(t){this.formatted||this.format();const e=new i("style",{},t||h);this.children.push(e),this.attrs.xmlns="http://www.w3.org/2000/svg",this.attrs["xmlns:xlink"]="http://www.w3.org/1999/xlink";const s=super.toString.call(this);return this.children.pop(),delete this.attrs.xmlns,s}toTextDiagram(){var[t]=M._getParts(["separator"]),e=this.items[0].toTextDiagram();for(const i of this.items.slice(1)){var h=i.toTextDiagram();i.needsSpace&&(h=h.expand(1,1,0,0)),e=e.appendRight(h,t)}return e}}t.Diagram=(...t)=>new n(...t);class a extends i{constructor(...t){var e=new n(...t);return e.items[0]=new x({type:"complex"}),e.items[e.items.length-1]=new T({type:"complex"}),e}}t.ComplexDiagram=(...t)=>new a(...t);class o extends r{constructor(...t){super("g",t),this.items.length,this.needsSpace=!0,this.up=this.down=this.height=this.width=0;for(var h=0;h<this.items.length;h++){var i=this.items[h];this.width+=i.width+(i.needsSpace?20:0),this.up=Math.max(this.up,i.up-this.height),this.height+=i.height,this.down=Math.max(this.down-i.height,i.down)}this.items[0].needsSpace&&(this.width-=10),this.items[this.items.length-1].needsSpace&&(this.width-=10),e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="sequence")}format(t,e,h){var i=D(h,this.width);new s(t,e).h(i[0]).addTo(this),new s(t+i[0]+this.width,e+this.height).h(i[1]).addTo(this),t+=i[0];for(var r=0;r<this.items.length;r++){var n=this.items[r];n.needsSpace&&r>0&&(new s(t,e).h(10).addTo(this),t+=10),n.format(t,e,n.width).addTo(this),t+=n.width,e+=n.height,n.needsSpace&&r<this.items.length-1&&(new s(t,e).h(10).addTo(this),t+=10)}return this}toTextDiagram(){var[t]=M._getParts(["separator"]),e=new M(0,0,[""]);for(const i of this.items){var h=i.toTextDiagram();i.needsSpace&&(h=h.expand(1,1,0,0)),e=e.appendRight(h,t)}return e}}t.Sequence=(...t)=>new o(...t);class d extends r{constructor(...t){if(super("g",t),0===t.length)throw new RangeError("Stack() must have at least one child.");this.width=Math.max.apply(null,this.items.map((function(t){return t.width+(t.needsSpace?20:0)}))),this.items.length>1&&(this.width+=2*e.AR),this.needsSpace=!0,this.up=this.items[0].up,this.down=this.items[this.items.length-1].down,this.height=0;for(var h=this.items.length-1,i=0;i<this.items.length;i++){var s=this.items[i];this.height+=s.height,i>0&&(this.height+=Math.max(2*e.AR,s.up+e.VS)),i<h&&(this.height+=Math.max(2*e.AR,s.down+e.VS))}e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="stack")}format(t,h,i){var r=D(i,this.width);new s(t,h).h(r[0]).addTo(this);var n=t+=r[0];this.items.length>1&&(new s(t,h).h(e.AR).addTo(this),t+=e.AR);for(var a=0;a<this.items.length;a++){var o=this.items[a],d=this.width-(this.items.length>1?2*e.AR:0);o.format(t,h,d).addTo(this),t+=d,h+=o.height,a!==this.items.length-1&&(new s(t,h).arc("ne").down(Math.max(0,o.down+e.VS-2*e.AR)).arc("es").left(d).arc("nw").down(Math.max(0,this.items[a+1].up+e.VS-2*e.AR)).arc("ws").addTo(this),h+=Math.max(o.down+e.VS,2*e.AR)+Math.max(this.items[a+1].up+e.VS,2*e.AR),t=n+e.AR)}return this.items.length>1&&(new s(t,h).h(e.AR).addTo(this),t+=e.AR),new s(t,h).h(r[1]).addTo(this),this}toTextDiagram(){var[t,e,h,i,s,r]=M._getParts(["corner_bot_left","corner_bot_right","corner_top_left","corner_top_right","line","line_vertical"]),n=[];for(const t of this.items)n.push(t.toTextDiagram());var a=Math.max(...n.map((function(t){return t.width}))),o=[],d=[],p=new M(0,0,[s.repeat(a)]),w=null;for(var[l,c]of N(n)){if(0==l){o.push(s+s);for(var u=0;u<c.height-c.entry-1;u++)o.push(" ")}else{for(w=w.appendBelow(p,[]),o.push(h+s),u=0;u<c.entry;u++)o.push(r+" ");for(o.push(t+s),u=0;u<c.height-c.entry-1;u++)o.push(" ");for(u=0;u<c.exit;u++)d.push(" ")}if(l<n.length-1){for(d.push(s+i),u=0;u<c.height-c.exit-1;u++)d.push(" "+r);d.push(s+e)}else d.push(s+s);var[g,m]=M._gaps(a,c.width);c=c.expand(g,m,0,0),w=0==l?c:w.appendBelow(c,[])}w=new M(0,0,o).appendRight(w,"");var f=new M(0,d.length-1,d);return w=w.appendRight(f,"")}}t.Stack=(...t)=>new d(...t);class p extends r{constructor(...t){if(super("g",t),0===t.length)throw new RangeError("OptionalSequence() must have at least one child.");if(1===t.length)return new o(t);var h=e.AR;this.needsSpace=!1,this.width=0,this.up=0,this.height=k(this.items,(function(t){return t.height})),this.down=this.items[0].down;for(var i=0,s=0;s<this.items.length;s++){var r=this.items[s];this.up=Math.max(this.up,Math.max(2*h,r.up+e.VS)-i),i+=r.height,s>0&&(this.down=Math.max(this.height+this.down,i+Math.max(2*h,r.down+e.VS))-this.height);var n=(r.needsSpace?10:0)+r.width;this.width+=0===s?h+Math.max(n,h):2*h+Math.max(n,h)+h}e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="optseq")}format(t,h,i){var r=e.AR,n=D(i,this.width);new s(t,h).right(n[0]).addTo(this),new s(t+n[0]+this.width,h+this.height).right(n[1]).addTo(this),t+=n[0];for(var a=h-this.up,o=this.items.length-1,d=0;d<this.items.length;d++){var p=this.items[d],w=p.needsSpace?10:0,l=p.width+w;0===d?(new s(t,h).arc("se").up(h-a-2*r).arc("wn").right(l-r).arc("ne").down(h+p.height-a-2*r).arc("ws").addTo(this),new s(t,h).right(w+r).addTo(this),p.format(t+w+r,h,p.width).addTo(this),t+=l+r,h+=p.height):d<o?(new s(t,a).right(2*r+Math.max(l,r)+r).arc("ne").down(h-a+p.height-2*r).arc("ws").addTo(this),new s(t,h).right(2*r).addTo(this),p.format(t+2*r,h,p.width).addTo(this),new s(t+p.width+2*r,h+p.height).right(w+r).addTo(this),new s(t,h).arc("ne").down(p.height+Math.max(p.down+e.VS,2*r)-2*r).arc("ws").right(l-r).arc("se").up(p.down+e.VS-2*r).arc("wn").addTo(this),t+=2*r+Math.max(l,r)+r,h+=p.height):(new s(t,h).right(2*r).addTo(this),p.format(t+2*r,h,p.width).addTo(this),new s(t+2*r+p.width,h+p.height).right(w+r).addTo(this),new s(t,h).arc("ne").down(p.height+Math.max(p.down+e.VS,2*r)-2*r).arc("ws").right(l-r).arc("se").up(p.down+e.VS-2*r).arc("wn").addTo(this))}return this}toTextDiagram(){var[t,e,h,i,s,r]=M._getParts(["line","line_vertical","roundcorner_bot_left","roundcorner_bot_right","roundcorner_top_left","roundcorner_top_right"]),n=[];for(const t of this.items)n.push(t.toTextDiagram());for(var a=Math.max(...n.map((function(t){return t.entry}))),o=Math.max(...n.slice(0,-1).map((function(t){return t.entry}))),d=a-o,p=[],w=0;w<d;w++)p.push(" ");for(p.push(s+t),w=0;w<o;w++)p.push(e+" ");p.push(i+t);var l=new M(p.length-1,p.length-1,p);for(const[a,v]of N(n)){if(a>0){for(p=[],w=0;w<d;w++)p.push(" ");for(p.push(t+t),w=0;w<l.exit-d-1;w++)p.push(" ");for(p.push(t+r),w=0;w<v.height-v.entry-1;w++)p.push(" "+e);p.push(" "+h);var c=new M(l.exit,l.exit,p);for(l=l.appendRight(c,""),p=[],w=0;w<d;w++)p.push(" ");var u=a<n.length-1?t:" ";for(p.push(t+r+u),w=0;w<l.exit-d-1;w++)p.push(" "+e+" ");for(p.push(t+h+t),w=0;w<v.height-v.entry-1;w++)p.push(" ");p.push(t+t+t);var g=new M(l.exit,l.exit,p);l=l.appendRight(g,"")}var m=new M(0,0,[]);if(a<n.length-1){for((p=[]).push(t.repeat(v.width)),w=0;w<o-v.entry;w++)p.push(" ".repeat(v.width));var f=new M(0,0,p);m=m.appendBelow(f,[])}if(m=m.appendBelow(v,[],!0,!0),a>0){var _=new M(0,0,[t.repeat(v.width)]);m=m.appendBelow(_,[])}if(l=l.appendRight(m,""),0<a){for(p=[],w=0;w<d;w++)p.push(" ");var x=a<n.length-1?t:" ";for(p.push(x.repeat(2)),w=0;w<l.exit-d-1;w++)p.push(" ");for(p.push(t+s),w=0;w<m.height-m.exit-2;w++)p.push(" "+e);p.push(t+i);var T=new M(l.exit,l.exit,p);l=l.appendRight(T,"")}}return l}}t.OptionalSequence=(...t)=>new p(...t);class w extends r{constructor(...t){if(super("g",t),1===t.length)return new o(t);if(2!==t.length)throw new RangeError("AlternatingSequence() must have one or two children.");this.needsSpace=!1;const h=e.AR,i=e.VS,s=Math.max,r=this.items[0],n=this.items[1],a=1/Math.sqrt(2)*h*2,d=(1-1/Math.sqrt(2))*h*2,p=Math.max(h,e.VS),w=p-d+a,l=s(h+h,p/2+h+h,p/2+i+r.down);this.up=l+r.height+r.up;const c=s(h+h,p/2+h+h,p/2+i+n.up);this.down=c+n.height+n.down,this.height=0;const u=2*(r.needsSpace?10:0)+r.width,g=2*(n.needsSpace?10:0)+n.width;this.width=2*h+s(u,w,g)+2*h,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="altseq")}format(t,h,i){const r=e.AR,n=D(i,this.width);new s(t,h).right(n[0]).addTo(this),t+=n[0],new s(t+this.width,h).right(n[1]).addTo(this);const a=this.items[0],o=this.items[1],d=this.up-a.up,p=this.up-a.up-a.height;new s(t,h).arc("se").up(d-2*r).arc("wn").addTo(this),a.format(t+2*r,h-d,this.width-4*r).addTo(this),new s(t+this.width-2*r,h-p).arc("ne").down(p-2*r).arc("ws").addTo(this);const w=this.down-o.down-o.height,l=this.down-o.down;new s(t,h).arc("ne").down(w-2*r).arc("ws").addTo(this),o.format(t+2*r,h+w,this.width-4*r).addTo(this),new s(t+this.width-2*r,h+l).arc("se").up(l-2*r).arc("wn").addTo(this);const c=1/Math.sqrt(2)*r*2,u=(1-1/Math.sqrt(2))*r*2,g=Math.max(r,e.VS),m=g-u+c,f=(this.width-4*r-m)/2;return new s(t+r,h-g/2-r).arc("ws").right(f).arc_8("n","cw").l(m-c,g-u).arc_8("sw","ccw").right(f).arc("ne").addTo(this),new s(t+r,h+g/2+r).arc("wn").right(f).arc_8("s","ccw").l(m-c,-(g-u)).arc_8("nw","cw").right(f).arc("se").addTo(this),this}toTextDiagram(){for(var[t,e,h,i,s,r,n,a,o]=M._getParts(["cross_diag","roundcorner_bot_left","roundcorner_bot_right","roundcorner_top_left","roundcorner_top_right","line","line_vertical","tee_left","tee_right"]),d=this.items[0].toTextDiagram(),p=this.items[1].toTextDiagram(),w=M._maxWidth(d,p),[l,c]=M._gaps(w,0),u=[],g=[],m=[],[f,_]=M._gaps(d.width,0),x=d.expand(l-f,c-_,0,0),T=0;T<x.entry;T++)u.push(" ");for(u.push(i+r),T=0;T<x.height-x.entry-1;T++)u.push(n+" ");for(u.push(e+r),T=0;T<x.exit;T++)g.push(" ");for(g.push(r+s),T=0;T<x.height-x.exit-1;T++)g.push(" "+n);for(g.push(r+h),m.push(r.repeat(l-1)+s+" "+i+r.repeat(c-2)),m.push(" ".repeat(l-1)+" "+t+" "+" ".repeat(c-2)),m.push(r.repeat(l-1)+h+" "+e+r.repeat(c-2)),u.push(" "),g.push(" "),[f,_]=M._gaps(p.width,0),p=p.expand(l-f,c-_,0,0),x=x.appendBelow(p,m,!0,!0),u.push(i+r),T=0;T<p.entry;T++)u.push(n+" ");for(u.push(e+r),g.push(r+s),T=0;T<p.exit;T++)g.push(" "+n);g.push(r+h),x=x.alter(d.height+Math.trunc(m.length/2),d.height+Math.trunc(m.length/2));var v=new M(d.height+Math.trunc(m.length/2),d.height+Math.trunc(m.length/2),u),R=new M(d.height+Math.trunc(m.length/2),d.height+Math.trunc(m.length/2),g);return x=v.appendRight(x,"").appendRight(R,""),x=new M(1,1,[i,a,e]).appendRight(x,"").appendRight(new M(1,1,[s,o,h]),"")}}t.AlternatingSequence=(...t)=>new w(...t);class l extends r{constructor(t,...h){if(super("g",h),"number"!=typeof t||t!==Math.floor(t))throw new TypeError("The first argument of Choice() must be an integer.");if(t<0||t>=h.length)throw new RangeError("The first argument of Choice() must be an index for one of the items.");this.normal=t,this.width=V(this.items,(t=>t.width))+4*e.AR;var i,s=this.items[0],r=this.items[h.length-1],n=this.items[t];this.separators=Array.from({length:h.length-1},(t=>0)),this.up=0;for(var a=t-1;a>=0;a--){i=a==t-1?2*e.AR:e.AR;let h=this.items[a],s=this.items[a+1],r=s.up+e.VS+h.down+h.height,n=s.height+s.up+e.VS+h.down,o=e.VS;(n<i||r<i)&&(o+=Math.max(i-r,i-n)),this.separators[a]=o,this.up+=s.up+o+h.down+h.height}this.up+=s.up,this.height=n.height,this.down=0;for(a=t+1;a<this.items.length;a++){i=a==t+1?2*e.AR:e.AR;let h=this.items[a],s=this.items[a-1],r=s.height+s.down+e.VS+h.up,n=s.down+e.VS+h.up+h.height,o=e.VS;(r<i||n<i)&&(o+=Math.max(i-r,i-n)),this.separators[a-1]=o,this.down+=s.down+o+h.up+h.height}this.down+=r.down,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="choice")}format(t,h,i){var r=D(i,this.width);new s(t,h).h(r[0]).addTo(this),new s(t+r[0]+this.width,h+this.height).h(r[1]).addTo(this),t+=r[0];for(var n=this.items.length-1,a=this.width-4*e.AR,o=0,d=this.normal-1;d>=0;d--){let i=this.items[d];o+=this.items[d+1].up+this.separators[d]+i.down+i.height,new s(t,h).arc("se").up(o-2*e.AR).arc("wn").addTo(this),i.format(t+2*e.AR,h-o,a).addTo(this),new s(t+2*e.AR+a,h-o+i.height).arc("ne").down(o-i.height+this.height-2*e.AR).arc("ws").addTo(this)}new s(t,h).right(2*e.AR).addTo(this),this.items[this.normal].format(t+2*e.AR,h,a).addTo(this),new s(t+2*e.AR+a,h+this.height).right(2*e.AR).addTo(this);for(o=0,d=this.normal+1;d<=n;d++){let i=this.items[d],r=this.items[d-1];o+=r.height+r.down+this.separators[d-1]+i.up,new s(t,h).arc("ne").down(o-2*e.AR).arc("ws").addTo(this),i.format||console.log(i),i.format(t+2*e.AR,h+o,a).addTo(this),new s(t+2*e.AR+a,h+o+i.height).arc("se").up(o-2*e.AR+i.height-this.height).arc("wn").addTo(this)}return this}toTextDiagram(){var[t,e,h,i,s,r,n]=M._getParts(["cross","line","line_vertical","roundcorner_bot_left","roundcorner_bot_right","roundcorner_top_left","roundcorner_top_right"]),a=[];for(const t of this.items)a.push(t.toTextDiagram().expand(1,1,0,0));var o=Math.max(...a.map((function(t){return t.width}))),d=new M(0,0,[]);for(var[p,w]of N(a)){var[l,c]=M._gaps(o,w.width);w=w.expand(l,c,0,0);for(var u=!0,g=[],m=[],f=0;f<w.height;f++)g.push(h),m.push(h);var _=!1,x=!1;if(p<=this.normal&&(g[w.entry]=r,m[w.exit]=n,0==p)){for(u=!1,f=0;f<w.entry;f++)g[f]=" ";for(f=0;f<w.exit;f++)m[f]=" "}if(p>=this.normal&&(g[w.entry]=i,m[w.exit]=s,0==p&&(u=!1),p==this.items.length-1)){for(f=w.entry+1;f<w.height;f++)g[f]=" ";for(f=w.exit+1;f<w.height;f++)m[f]=" "}p==this.normal&&(g[w.entry]=t,m[w.exit]=t,_=!0,x=!0,0==p&&p==this.items.length-1?(g[w.entry]=e,m[w.exit]=e):0==p?(g[w.entry]=n,m[w.exit]=r):p==this.items.length-1&&(g[w.entry]=s,m[w.exit]=i));var T=new M(w.entry,w.entry,g),v=new M(w.exit,w.exit,m);w=T.appendRight(w,"").appendRight(v,"");var R=u?[h+" ".repeat(M._maxWidth(d,w)-2)+h]:[];d=d.appendBelow(w,R,_,x)}return d}}t.Choice=(...t)=>new l(...t);class c extends r{constructor(...t){if(super("g",t),0===t.length)throw new RangeError("HorizontalChoice() must have at least one child.");if(1===t.length)return new o(t);const h=this.items.slice(0,-1),i=this.items.slice(1,-1),s=this.items[0],r=this.items[this.items.length-1];this.needsSpace=!1,this.width=e.AR,this.width+=2*e.AR*(this.items.length-1),this.width+=k(this.items,(t=>t.width+(t.needsSpace?20:0))),this.width+=r.height>0?e.AR:0,this.width+=e.AR,this.height=0,this._upperTrack=Math.max(2*e.AR,e.VS,V(h,(t=>t.up))+e.VS),this.up=Math.max(this._upperTrack,r.up),this._lowerTrack=Math.max(e.VS,V(i,(t=>t.height+Math.max(t.down+e.VS,2*e.AR))),r.height+r.down+e.VS),s.height<this._lowerTrack&&(this._lowerTrack=Math.max(this._lowerTrack,s.height+2*e.AR)),this.down=Math.max(this._lowerTrack,s.height+s.down),e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="horizontalchoice")}format(t,h,i){var r=D(i,this.width);new s(t,h).h(r[0]).addTo(this),new s(t+r[0]+this.width,h+this.height).h(r[1]).addTo(this),t+=r[0];const n=this.items[0],a=this.items[this.items.length-1],o=this.items.slice(1);var d=k(this.items.slice(0,-1),(t=>t.width+(t.needsSpace?20:0)))+(this.items.length-2)*e.AR*2-e.AR;new s(t,h).arc("se").v(-(this._upperTrack-2*e.AR)).arc("wn").h(d).addTo(this);var p=k(o,(t=>t.width+(t.needsSpace?20:0)))+(this.items.length-2)*e.AR*2+(a.height>0?e.AR:0)-e.AR,w=t+e.AR+n.width+(n.needsSpace?20:0)+2*e.AR;new s(w,h+this._lowerTrack).h(p).arc("se").v(-(this._lowerTrack-2*e.AR)).arc("wn").addTo(this);for(const[i,r]of N(this.items)){0===i?(new s(t,h).h(e.AR).addTo(this),t+=e.AR):(new s(t,h-this._upperTrack).arc("ne").v(this._upperTrack-2*e.AR).arc("ws").addTo(this),t+=2*e.AR);var l=r.width+(r.needsSpace?20:0);r.format(t,h,l).addTo(this),t+=l,i===this.items.length-1?0===r.height?new s(t,h).h(e.AR).addTo(this):new s(t,h+r.height).arc("se").addTo(this):0===i&&r.height>this._lowerTrack?r.height-this._lowerTrack>=2*e.AR?new s(t,h+r.height).arc("se").v(this._lowerTrack-r.height+2*e.AR).arc("wn").addTo(this):new s(t,h+r.height).l(2*e.AR,this._lowerTrack-r.height).addTo(this):new s(t,h+r.height).arc("ne").v(this._lowerTrack-r.height-2*e.AR).arc("ws").addTo(this)}return this}toTextDiagram(){var[t,e,h,i,s,r]=M._getParts(["line","line_vertical","roundcorner_bot_left","roundcorner_bot_right","roundcorner_top_left","roundcorner_top_right"]),n=[];for(const t of this.items)n.push(t.toTextDiagram());for(var a=Math.max(...n.map((function(t){return t.entry}))),o=Math.max(...n.slice(0,-1).map((function(t){return t.entry}))),d=a-o,p=Math.max(...n.slice(1).map((function(t){return t.height-Math.min(t.entry,t.exit)-1}))),w=[],l=0;l<d;l++)w.push(" ");for(w.push(s+t),l=0;l<o;l++)w.push(e+" ");w.push(i+t);var c=new M(w.length-1,w.length-1,w);for(const[A,y]of N(n)){if(A>0){for(w=[],l=0;l<d;l++)w.push(" ");var u=A==n.length-1?" ":t;for(w.push(r+u),l=0;l<o;l++)w.push(e+" ");for(w.push(h+t),l=0;l<p;l++)w.push(e+" ");w.push(t+t);var g=new M(c.exit,c.exit,w);c=c.appendRight(g,"")}var m=new M(0,0,[]);if(A<n.length-1){for((w=[]).push(t.repeat(y.width)),l=0;l<o-y.entry;l++)w.push(" ".repeat(y.width));var f=new M(0,0,w);m=m.appendBelow(f,[])}if(m=m.appendBelow(y,[],!0,!0),A>0){for(w=[],l=0;l<p-(y.height-y.entry)+1;l++)w.push(" ".repeat(y.width));w.push(t.repeat(y.width));var _=new M(0,0,w);m=m.appendBelow(_,[])}if(c=c.appendRight(m,""),A<n.length-1){for(w=[],l=0;l<d;l++)w.push(" ");for(w.push(t+t),l=0;l<c.exit-d-1;l++)w.push(" ");for(w.push(t+r),l=0;l<p-(c.exit-c.entry);l++)w.push(" "+e);var x=A>0?t:" ";w.push(x+h);var T=a+1+(c.exit-c.entry),v=new M(T,a+1,w);c=c.appendRight(v,"")}else{w=[];var R=c.exit!=c.entry?" ":t;for(w.push(R+s),l=0;l<c.exit-c.entry-1;l++)w.push(" "+e);for(c.exit!=c.entry&&w.push(t+i),l=0;l<p-(c.exit-c.entry);l++)w.push(" "+e);w.push(t+i),v=new M(c.exit-c.entry,0,w),c=c.appendRight(v,"")}}return c}}t.HorizontalChoice=(...t)=>new c(...t);class u extends r{constructor(t,h,...i){if(super("g",i),"number"!=typeof t||t!==Math.floor(t))throw new TypeError("The first argument of MultipleChoice() must be an integer.");if(t<0||t>=i.length)throw new RangeError("The first argument of MultipleChoice() must be an index for one of the items.");if(this.normal=t,"any"!=h&&"all"!=h)throw new SyntaxError("The second argument of MultipleChoice must be 'any' or 'all'.");this.type=h,this.needsSpace=!0,this.innerWidth=V(this.items,(function(t){return t.width})),this.width=30+e.AR+this.innerWidth+e.AR+20,this.up=this.items[0].up,this.down=this.items[this.items.length-1].down,this.height=this.items[t].height;for(var s=0;s<this.items.length;s++){let h,i=this.items[s];h=s==t-1||s==t+1?10+e.AR:e.AR,s<t?this.up+=Math.max(h,i.height+i.down+e.VS+this.items[s+1].up):s>t&&(this.down+=Math.max(h,i.up+e.VS+this.items[s-1].down+this.items[s-1].height))}this.down-=this.items[t].height,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="multiplechoice")}format(t,h,r){var n=D(r,this.width);new s(t,h).right(n[0]).addTo(this),new s(t+n[0]+this.width,h+this.height).right(n[1]).addTo(this),t+=n[0];for(var a,o=this.items[this.normal],d=this.normal-1;d>=0;d--){var p=this.items[d];d==this.normal-1&&(a=Math.max(10+e.AR,o.up+e.VS+p.down+p.height)),new s(t+30,h).up(a-e.AR).arc("wn").addTo(this),p.format(t+30+e.AR,h-a,this.innerWidth).addTo(this),new s(t+30+e.AR+this.innerWidth,h-a+p.height).arc("ne").down(a-p.height+this.height-e.AR-10).addTo(this),0!==d&&(a+=Math.max(e.AR,p.up+e.VS+this.items[d-1].down+this.items[d-1].height))}for(new s(t+30,h).right(e.AR).addTo(this),o.format(t+30+e.AR,h,this.innerWidth).addTo(this),new s(t+30+e.AR+this.innerWidth,h+this.height).right(e.AR).addTo(this),d=this.normal+1;d<this.items.length;d++){let i=this.items[d];d==this.normal+1&&(a=Math.max(10+e.AR,o.height+o.down+e.VS+i.up)),new s(t+30,h).down(a-e.AR).arc("ws").addTo(this),i.format(t+30+e.AR,h+a,this.innerWidth).addTo(this),new s(t+30+e.AR+this.innerWidth,h+a+i.height).arc("se").up(a-e.AR+i.height-o.height).addTo(this),d!=this.items.length-1&&(a+=Math.max(e.AR,i.height+i.down+e.VS+this.items[d+1].up))}var w=new i("g",{class:"diagram-text"}).addTo(this);return new i("title",{},"any"==this.type?"take one or more branches, once each, in any order":"take all branches, once each, in any order").addTo(w),new i("path",{d:"M "+(t+30)+" "+(h-10)+" h -26 a 4 4 0 0 0 -4 4 v 12 a 4 4 0 0 0 4 4 h 26 z",class:"diagram-text"}).addTo(w),new i("text",{x:t+15,y:h+4,class:"diagram-text"},"any"==this.type?"1+":"all").addTo(w),new i("path",{d:"M "+(t+this.width-20)+" "+(h-10)+" h 16 a 4 4 0 0 1 4 4 v 12 a 4 4 0 0 1 -4 4 h -16 z",class:"diagram-text"}).addTo(w),new i("path",{d:"M "+(t+this.width-13)+" "+(h-2)+" a 4 4 0 1 0 6 -1 m 2.75 -1 h -4 v 4 m 0 -3 h 2",style:"stroke-width: 1.75"}).addTo(w),this}toTextDiagram(){var[t]=M._getParts(["multi_repeat"]);if("any"==this.type)var e=M.rect("1+");else e=M.rect("all");var h=l.prototype.toTextDiagram.call(this),i=M.rect(t);return h=(h=e.appendRight(h,"")).appendRight(i,"")}}t.MultipleChoice=(...t)=>new u(...t);class g extends i{constructor(t,e){if(void 0===e)return new l(1,new y,t);if("skip"===e)return new l(0,new y,t);throw"Unknown value for Optional()'s 'skip' argument."}}t.Optional=(...t)=>new g(...t);class m extends i{constructor(t,h){super("g"),h=h||new y,this.item=E(t),this.rep=E(h),this.width=Math.max(this.item.width,this.rep.width)+2*e.AR,this.height=this.item.height,this.up=this.item.up,this.down=Math.max(2*e.AR,this.item.down+e.VS+this.rep.up+this.rep.height+this.rep.down),this.needsSpace=!0,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="oneormore")}format(t,h,i){var r=D(i,this.width);new s(t,h).h(r[0]).addTo(this),new s(t+r[0]+this.width,h+this.height).h(r[1]).addTo(this),t+=r[0],new s(t,h).right(e.AR).addTo(this),this.item.format(t+e.AR,h,this.width-2*e.AR).addTo(this),new s(t+this.width-e.AR,h+this.height).right(e.AR).addTo(this);var n=Math.max(2*e.AR,this.item.height+this.item.down+e.VS+this.rep.up);return new s(t+e.AR,h).arc("nw").down(n-2*e.AR).arc("ws").addTo(this),this.rep.format(t+e.AR,h+n,this.width-2*e.AR).addTo(this),new s(t+this.width-e.AR,h+n+this.rep.height).arc("se").up(n-2*e.AR+this.rep.height-this.item.height).arc("en").addTo(this),this}toTextDiagram(){var[t,e,h,i,s,r,n]=M._getParts(["line","repeat_top_left","repeat_left","repeat_bot_left","repeat_top_right","repeat_right","repeat_bot_right"]),a=this.item.toTextDiagram(),o=this.rep.toTextDiagram(),d=M._maxWidth(a,o);o=o.expand(0,d-o.width,0,0);var p=(a=a.expand(0,d-a.width,0,0)).appendBelow(o,[]),w=[];w.push(e+t);for(var l=0;l<a.height-a.entry+o.entry-1;l++)w.push(h+" ");w.push(i+t);var c=new M(0,0,w);c=c.appendRight(p,"");var u=[];for(u.push(t+s),l=0;l<a.height-a.exit+o.exit-1;l++)u.push(" "+r);u.push(t+n);var g=new M(0,0,u);return c.appendRight(g,"")}walk(t){t(this),this.item.walk(t),this.rep.walk(t)}}t.OneOrMore=(...t)=>new m(...t);class f extends i{constructor(t,e,h){return new g(new m(t,e),h)}}t.ZeroOrMore=(...t)=>new f(...t);class _ extends i{constructor(t,h){super("g"),this.item=E(t),this.label=h instanceof i?h:h?new A(h):void 0,this.width=Math.max(this.item.width+(this.item.needsSpace?20:0),this.label?this.label.width:0,2*e.AR),this.height=this.item.height,this.boxUp=this.up=Math.max(this.item.up+e.VS,e.AR),this.label&&(this.up+=this.label.up+this.label.height+this.label.down),this.down=Math.max(this.item.down+e.VS,e.AR),this.needsSpace=!0,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="group")}format(t,h,r){var n=D(r,this.width);return new s(t,h).h(n[0]).addTo(this),new s(t+n[0]+this.width,h+this.height).h(n[1]).addTo(this),t+=n[0],new i("rect",{x:t,y:h-this.boxUp,width:this.width,height:this.boxUp+this.height+this.down,rx:e.AR,ry:e.AR,class:"group-box"}).addTo(this),this.item.format(t,h,this.width).addTo(this),this.label&&this.label.format(t,h-(this.boxUp+this.label.down+this.label.height),this.label.width).addTo(this),this}toTextDiagram(){var t=M.roundrect(this.item.toTextDiagram(),!0);null!=this.label&&(t=this.label.toTextDiagram().appendBelow(t,[],!0,!0).expand(0,0,1,0));return t}walk(t){t(this),this.item.walk(t),this.label.walk(t)}}t.Group=(...t)=>new _(...t);class x extends i{constructor({type:t="simple",label:h}={}){super("g"),this.width=20,this.height=0,this.up=10,this.down=10,this.type=t,h&&(this.label=""+h,this.width=Math.max(20,this.label.length*e.CHAR_WIDTH+10)),e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="start")}format(t,e){let h=new s(t,e-10);return"complex"===this.type?h.down(20).m(0,-10).right(this.width).addTo(this):h.down(20).m(10,-20).down(20).m(-10,-10).right(this.width).addTo(this),this.label&&new i("text",{x:t,y:e-15,style:"text-anchor:start"},this.label).addTo(this),this}toTextDiagram(){var[t,e,h]=M._getParts(["cross","line","tee_right"]);if("simple"===this.type)var i=h+t+e;else i=h+e;var s=new M(0,0,[]);null!=this.label&&(s=new M(0,0,[this.label]),i=M._padR(i,s.width,e));var r=new M(0,0,[i]);return s.appendBelow(r,[],!0,!0)}}t.Start=(...t)=>new x(...t);class T extends i{constructor({type:t="simple"}={}){super("path"),this.width=20,this.height=0,this.up=10,this.down=10,this.type=t,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="end")}format(t,e){return"complex"===this.type?this.attrs.d="M "+t+" "+e+" h 20 m 0 -10 v 20":this.attrs.d="M "+t+" "+e+" h 20 m -10 -10 v 20 m 10 -20 v 20",this}toTextDiagram(){var[t,e,h]=M._getParts(["cross","line","tee_left"]);if("simple"===this.type)var i=e+t+h;else i=e+h;return new M(0,0,[i])}}t.End=(...t)=>new T(...t);class v extends i{constructor(t,{href:h,title:i,cls:s}={}){super("g",{class:["terminal",s].join(" ")}),this.text=""+t,this.href=h,this.title=i,this.cls=s,this.width=this.text.length*e.CHAR_WIDTH+20,this.height=0,this.up=11,this.down=11,this.needsSpace=!0,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="terminal")}format(t,e,h){var r=D(h,this.width);new s(t,e).h(r[0]).addTo(this),new s(t+r[0]+this.width,e).h(r[1]).addTo(this),t+=r[0],new i("rect",{x:t,y:e-11,width:this.width,height:this.up+this.down,rx:10,ry:10}).addTo(this);var n=new i("text",{x:t+this.width/2,y:e+4},this.text);return this.href?new i("a",{"xlink:href":this.href},[n]).addTo(this):n.addTo(this),this.title&&new i("title",{},[this.title]).addTo(this),this}toTextDiagram(){return M.roundrect(this.text)}}t.Terminal=(...t)=>new v(...t);class R extends i{constructor(t,{href:h,title:i,cls:s=""}={}){super("g",{class:["non-terminal",s].join(" ")}),this.text=""+t,this.href=h,this.title=i,this.cls=s,this.width=this.text.length*e.CHAR_WIDTH+20,this.height=0,this.up=11,this.down=11,this.needsSpace=!0,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="nonterminal")}format(t,e,h){var r=D(h,this.width);new s(t,e).h(r[0]).addTo(this),new s(t+r[0]+this.width,e).h(r[1]).addTo(this),t+=r[0],new i("rect",{x:t,y:e-11,width:this.width,height:this.up+this.down}).addTo(this);var n=new i("text",{x:t+this.width/2,y:e+4},this.text);return this.href?new i("a",{"xlink:href":this.href},[n]).addTo(this):n.addTo(this),this.title&&new i("title",{},[this.title]).addTo(this),this}toTextDiagram(){return M.rect(this.text)}}t.NonTerminal=(...t)=>new R(...t);class A extends i{constructor(t,{href:h,title:i,cls:s=""}={}){super("g",{class:["comment",s].join(" ")}),this.text=""+t,this.href=h,this.title=i,this.cls=s,this.width=this.text.length*e.COMMENT_CHAR_WIDTH+10,this.height=0,this.up=8,this.down=8,this.needsSpace=!0,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="comment")}format(t,e,h){var r=D(h,this.width);new s(t,e).h(r[0]).addTo(this),new s(t+r[0]+this.width,e+this.height).h(r[1]).addTo(this),t+=r[0];var n=new i("text",{x:t+this.width/2,y:e+5,class:"comment"},this.text);return this.href?new i("a",{"xlink:href":this.href},[n]).addTo(this):n.addTo(this),this.title&&new i("title",{},this.title).addTo(this),this}toTextDiagram(){return new M(0,0,[this.text])}}t.Comment=(...t)=>new A(...t);class y extends i{constructor(){super("g"),this.width=0,this.height=0,this.up=0,this.down=0,this.needsSpace=!1,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="skip")}format(t,e,h){return new s(t,e).right(h).addTo(this),this}toTextDiagram(){var[t]=M._getParts(["line"]);return new M(0,0,[t])}}t.Skip=(...t)=>new y(...t);class S extends i{constructor({width:t=50,up:h=15,height:i=25,down:s=15,needsSpace:r=!0}={}){super("g"),this.width=t,this.height=i,this.up=h,this.down=s,this.needsSpace=!0,e.DEBUG&&(this.attrs["data-updown"]=this.up+" "+this.height+" "+this.down,this.attrs["data-type"]="block")}format(t,e,h){var r=D(h,this.width);return new s(t,e).h(r[0]).addTo(this),new s(t+r[0]+this.width,e).h(r[1]).addTo(this),t+=r[0],new i("rect",{x:t,y:e-this.up,width:this.width,height:this.up+this.height+this.down}).addTo(this),this}toTextDiagram(){return M.rect("")}}t.Block=(...t)=>new S(...t);class M{constructor(t,e,h){if(this.entry=t,this.exit=e,this.height=h.length,this.lines=Array.from(h),this.width=h.length>0?h[0].length:0,t>h.length)throw new Error("Entry is not within diagram vertically:\n"+this._dump(!1));if(e>h.length)throw new Error("Exit is not within diagram vertically:\n"+this._dump(!1));for(var i=0;i<h.length;i++)if(h[0].length!=h[i].length)throw new Error("Diagram data is not rectangular:\n"+this._dump(!1))}alter(t=null,e=null,h=null){var i=t||this.entry,s=e||this.exit,r=h||this.lines;return new M(i,s,Array.from(r))}appendBelow(t,e,h=!1,i=!1){var s=Math.max(this.width,t.width),r=[],n=this.center(s," ").lines;for(const t of n)r.push(t);for(const t of e)r.push(M._padR(t,s," "));n=t.center(s," ").lines;for(const t of n)r.push(t);var a=h?this.height+e.length+t.entry:this.entry,o=i?this.height+e.length+t.exit:this.exit;return new M(a,o,r)}appendRight(t,e){for(var h=Math.max(this.exit,t.entry),i=Math.max(this.height-this.exit,t.height-t.entry)+h,s=h-this.exit,r=i-this.height-s,n=h-t.entry,a=i-t.height-n,o=this.expand(0,0,s,r),d=t.expand(0,0,n,a),p=[],w=0;w<i;w++){var l=w!=h?" ".repeat(e.length):e;p.push(o.lines[w]+l+d.lines[w])}var c=this.entry+s,u=t.exit+n;return new M(c,u,p)}center(t,e){if(t<this.width)throw new Error("Cannot center into smaller width");if(t===this.width)return this.copy();for(var h=t-this.width,i=Math.trunc(h/2),s=[],r=0;r<this.height;r++)s.push(e.repeat(i));var n=[];for(r=0;r<this.height;r++)n.push(e.repeat(h-i));return new M(this.entry,this.exit,M._encloseLines(this.lines,s,n))}copy(){return new M(this.entry,this.exit,Array.from(this.lines))}expand(t,e,h,i){if(t<0||e<0||h<0||i<0)throw new Error("Expansion values cannot be negative");if(t+e+h+i===0)return this.copy();for(var s=M.parts.line,r=[],n=0;n<h;n++)r.push(" ".repeat(this.width+t+e));for(n=0;n<this.height;n++){var a=n===this.entry?s:" ",o=n===this.exit?s:" ";r.push(a.repeat(t)+this.lines[n]+o.repeat(e))}for(n=0;n<i;n++)r.push(" ".repeat(this.width+t+e));return new M(this.entry+h,this.exit+h,r)}static rect(t,e=!1){return M._rectish("rect",t,e)}static roundrect(t,e=!1){return M._rectish("roundrect",t,e)}static setFormatting(t=null,e=null){null!==t&&(M.parts={},null!==e&&(M.parts={...M.parts,...e}),M.parts={...M.parts,...t});for(const[t,e]of M.parts)e.length}_dump(t=!0){var e="height="+this.height+" lines.length="+this.lines.length;this.entry>this.lines.length&&(e+="; entry outside diagram: entry="+this.entry),this.exit>this.lines.length&&(e+="; exit outside diagram: exit="+this.exit);for(var h=0;h<Math.max(this.lines.length,this.entry+1,this.exit+1);h++)e=e+"\n["+("00"+h).slice(-3)+"]",h<this.lines.length&&(e+=" '"+this.lines[h]+"' len="+this.lines[h].length),h===this.entry&&h===this.exit?e+=" <- entry, exit":h===this.entry?e+=" <- entry":h===this.exit&&(e+=" <- exit");return t&&console.log(e),e}static _encloseLines(t,e,h){if(t.length!=e.length)throw new Error("All arguments must be the same length");if(t.length!=h.length)throw new Error("All arguments must be the same length");for(var i=[],s=0;s<t.length;s++)i.push(e[s]+t[s]+h[s]);return i}static _gaps(t,h){var i=t-h;if("left"===e.INTERNAL_ALIGNMENT)return[0,i];if("right"===e.INTERNAL_ALIGNMENT)return[i,0];var s=Math.trunc(i/2);return[s,i-s]}static _getParts(t){var e=[];for(const h of t){if(null==M.parts[h])throw new Error("Text diagram part "+h+"not found.");e.push(M.parts[h])}return e}static _maxWidth(...t){var e=0;for(const i of t){if(i instanceof M)var h=i.width;else h=i instanceof Array?Math.max(i.map((function(t){return t.length}))):Number.isInteger(i)?Number.toString(i).length:i.length;e=h>e?h:e}return e}static _padL(t,e,h){if((e-t.length)%h.length!=0)throw new Error("Gap "+(e-t.length)+" must be a multiple of pad string '"+h+"'");return h.repeat(Math.trunc(e-t.length/h.length))+t}static _padR(t,e,h){if((e-t.length)%h.length!=0)throw new Error("Gap "+(e-t.length)+" must be a multiple of pad string '"+h+"'");return t+h.repeat(Math.trunc(e-t.length/h.length))}static _rectish(t,e,h=!1){var i=h?"_dashed":"",[s,r,n,a,o,d,p,w,l,c]=M._getParts([t+"_top_left",t+"_left"+i,t+"_bot_left",t+"_top_right",t+"_right"+i,t+"_bot_right",t+"_top"+i,t+"_bot"+i,"line","cross"]),u=e instanceof M;if(u)var g=e;else g=new M(0,0,[e]);var m=[];if(m.push(p.repeat(g.width+2)),u)m+=g.expand(1,1,0,0).lines;else for(var f=0;f<g.lines.length;f++)m.push(" "+g.lines[f]+" ");m.push(w.repeat(g.width+2));var _=g.entry+1,x=g.exit+1,T=M._maxWidth(s,r,n),v=[];for(v.push(M._padR(s,T,p)),f=1;f<m.length-1;f++)v.push(M._padR(r,T," "));v.push(M._padR(n,T,w)),u&&(v[_]=c);var R=M._maxWidth(a,o,d),A=[];for(A.push(M._padL(a,R,p)),f=1;f<m.length-1;f++)A.push(M._padL(o,R," "));for(A.push(M._padL(d,R,w)),u&&(A[x]=c),m=M._encloseLines(m,v,A),v=[],f=0;f<m.length;f++)v.push(" ");for(v[_]=l,A=[],f=0;f<m.length;f++)A.push(" ");return A[x]=l,m=M._encloseLines(m,v,A),new M(_,x,m)}static PARTS_UNICODE={cross_diag:"╳",corner_bot_left:"└",corner_bot_right:"┘",corner_top_left:"┌",corner_top_right:"┐",cross:"┼",left:"│",line:"─",line_vertical:"│",multi_repeat:"↺",rect_bot:"─",rect_bot_dashed:"┄",rect_bot_left:"└",rect_bot_right:"┘",rect_left:"│",rect_left_dashed:"┆",rect_right:"│",rect_right_dashed:"┆",rect_top:"─",rect_top_dashed:"┄",rect_top_left:"┌",rect_top_right:"┐",repeat_bot_left:"╰",repeat_bot_right:"╯",repeat_left:"│",repeat_right:"│",repeat_top_left:"╭",repeat_top_right:"╮",right:"│",roundcorner_bot_left:"╰",roundcorner_bot_right:"╯",roundcorner_top_left:"╭",roundcorner_top_right:"╮",roundrect_bot:"─",roundrect_bot_dashed:"┄",roundrect_bot_left:"╰",roundrect_bot_right:"╯",roundrect_left:"│",roundrect_left_dashed:"┆",roundrect_right:"│",roundrect_right_dashed:"┆",roundrect_top:"─",roundrect_top_dashed:"┄",roundrect_top_left:"╭",roundrect_top_right:"╮",separator:"─",tee_left:"┤",tee_right:"├"};static PARTS_ASCII={cross_diag:"X",corner_bot_left:"\\",corner_bot_right:"/",corner_top_left:"/",corner_top_right:"\\",cross:"+",left:"|",line:"-",line_vertical:"|",multi_repeat:"&",rect_bot:"-",rect_bot_dashed:"-",rect_bot_left:"+",rect_bot_right:"+",rect_left:"|",rect_left_dashed:"|",rect_right:"|",rect_right_dashed:"|",rect_top_dashed:"-",rect_top:"-",rect_top_left:"+",rect_top_right:"+",repeat_bot_left:"\\",repeat_bot_right:"/",repeat_left:"|",repeat_right:"|",repeat_top_left:"/",repeat_top_right:"\\",right:"|",roundcorner_bot_left:"\\",roundcorner_bot_right:"/",roundcorner_top_left:"/",roundcorner_top_right:"\\",roundrect_bot:"-",roundrect_bot_dashed:"-",roundrect_bot_left:"\\",roundrect_bot_right:"/",roundrect_left:"|",roundrect_left_dashed:"|",roundrect_right:"|",roundrect_right_dashed:"|",roundrect_top:"-",roundrect_top_dashed:"-",roundrect_top_left:"/",roundrect_top_right:"\\",separator:"-",tee_left:"|",tee_right:"|"};static parts=M.PARTS_UNICODE}function b(...t){return t.reduce((function(t,e){return void 0!==t?t:e}))}function D(t,h){var i=t-h;switch(e.INTERNAL_ALIGNMENT){case"left":return[0,i];case"right":return[i,0];default:return[i/2,i/2]}}function E(t){return t instanceof i?t:new v(""+t)}function k(t,e){return e||(e=function(t){return t}),t.map(e).reduce((function(t,e){return t+e}),0)}function V(t,e=(t=>t)){return Math.max.apply(null,t.map(e))}function*N(t){var e=0;for(const h of t)yield[e,h],e++}export{w as AlternatingSequence,S as Block,l as Choice,A as Comment,a as ComplexDiagram,n as Diagram,r as DiagramMultiContainer,T as End,i as FakeSVG,_ as Group,c as HorizontalChoice,u as MultipleChoice,R as NonTerminal,m as OneOrMore,g as Optional,p as OptionalSequence,e as Options,s as Path,o as Sequence,y as Skip,d as Stack,x as Start,v as Terminal,M as TextDiagram,f as ZeroOrMore,t as default,h as defaultCSS};