{"version":3,"file":"index.mjs","sources":["../railroad.js"],"sourcesContent":["\"use strict\";\n\n// Export function versions of all the constructors.\n// Each class will add itself to this object.\nconst funcs = {};\nexport default funcs;\n\nexport const Options = {\n\tDEBUG: false, // if true, writes some debug information into attributes\n\tVS: 8, // minimum vertical separation between things. For a 3px stroke, must be at least 4\n\tAR: 10, // radius of arcs\n\tDIAGRAM_CLASS: 'railroad-diagram', // class to put on the root <svg>\n\tSTROKE_ODD_PIXEL_LENGTH: true, // is the stroke width an odd (1px, 3px, etc) pixel length?\n\tINTERNAL_ALIGNMENT: 'center', // how to align items when they have extra space. left/right/center\n\tCHAR_WIDTH: 8.5, // width of each monospace character. play until you find the right value for your font\n\tCOMMENT_CHAR_WIDTH: 7, // comments are in smaller text by default\n};\n\nexport const defaultCSS = `\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}`;\n\n\nexport class FakeSVG {\n\tconstructor(tagName, attrs, text) {\n\t\tif(text) this.children = text;\n\t\telse this.children = [];\n\t\tthis.tagName = tagName;\n\t\tthis.attrs = unnull(attrs, {});\n\t}\n\tformat(/*x, y, width*/) {\n\t\t// Virtual\n\t}\n\taddTo(parent) {\n\t\tif(parent instanceof FakeSVG) {\n\t\t\tparent.children.push(this);\n\t\t\treturn this;\n\t\t} else {\n\t\t\tvar svg = this.toSVG();\n\t\t\tparent.appendChild(svg);\n\t\t\treturn svg;\n\t\t}\n\t}\n\ttoSVG() {\n\t\tvar el = SVG(this.tagName, this.attrs);\n\t\tif(typeof this.children == 'string') {\n\t\t\tel.textContent = this.children;\n\t\t} else {\n\t\t\tthis.children.forEach(function(e) {\n\t\t\t\tel.appendChild(e.toSVG());\n\t\t\t});\n\t\t}\n\t\treturn el;\n\t}\n\ttoString() {\n\t\tvar str = '<' + this.tagName;\n\t\tvar group = this.tagName == \"g\" || this.tagName == \"svg\";\n\t\tfor(var attr in this.attrs) {\n\t\t\tstr += ' ' + attr + '=\"' + (this.attrs[attr]+'').replace(/&/g, '&amp;').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\t\tstr += '>';\n\t\tif(group) str += \"\\n\";\n\t\tif(typeof this.children == 'string') {\n\t\t\tstr += escapeString(this.children);\n\t\t} else {\n\t\t\tthis.children.forEach(function(e) {\n\t\t\t\tstr += e;\n\t\t\t});\n\t\t}\n\t\tstr += '</' + this.tagName + '>\\n';\n\t\treturn str;\n\t}\n\twalk(cb) {\n\t\tcb(this);\n\t}\n}\n\n\nexport class Path extends FakeSVG {\n\tconstructor(x,y) {\n\t\tsuper('path');\n\t\tthis.attrs.d = \"M\"+x+' '+y;\n\t}\n\tm(x,y) {\n\t\tthis.attrs.d += 'm'+x+' '+y;\n\t\treturn this;\n\t}\n\th(val) {\n\t\tthis.attrs.d += 'h'+val;\n\t\treturn this;\n\t}\n\tright(val) { return this.h(Math.max(0, val)); }\n\tleft(val) { return this.h(-Math.max(0, val)); }\n\tv(val) {\n\t\tthis.attrs.d += 'v'+val;\n\t\treturn this;\n\t}\n\tdown(val) { return this.v(Math.max(0, val)); }\n\tup(val) { return this.v(-Math.max(0, val)); }\n\tarc(sweep){\n\t\t// 1/4 of a circle\n\t\tvar x = Options.AR;\n\t\tvar y = Options.AR;\n\t\tif(sweep[0] == 'e' || sweep[1] == 'w') {\n\t\t\tx *= -1;\n\t\t}\n\t\tif(sweep[0] == 's' || sweep[1] == 'n') {\n\t\t\ty *= -1;\n\t\t}\n\t\tvar cw;\n\t\tif(sweep == 'ne' || sweep == 'es' || sweep == 'sw' || sweep == 'wn') {\n\t\t\tcw = 1;\n\t\t} else {\n\t\t\tcw = 0;\n\t\t}\n\t\tthis.attrs.d += \"a\"+Options.AR+\" \"+Options.AR+\" 0 0 \"+cw+' '+x+' '+y;\n\t\treturn this;\n\t}\n\tarc_8(start, dir) {\n\t\t// 1/8 of a circle\n\t\tconst arc = Options.AR;\n\t\tconst s2 = 1/Math.sqrt(2) * arc;\n\t\tconst s2inv = (arc - s2);\n\t\tlet path = \"a \" + arc + \" \" + arc + \" 0 0 \" + (dir=='cw' ? \"1\" : \"0\") + \" \";\n\t\tconst sd = start+dir;\n\t\tconst offset =\n\t\t\tsd == 'ncw'   ? [s2, s2inv] :\n\t\t\tsd == 'necw'  ? [s2inv, s2] :\n\t\t\tsd == 'ecw'   ? [-s2inv, s2] :\n\t\t\tsd == 'secw'  ? [-s2, s2inv] :\n\t\t\tsd == 'scw'   ? [-s2, -s2inv] :\n\t\t\tsd == 'swcw'  ? [-s2inv, -s2] :\n\t\t\tsd == 'wcw'   ? [s2inv, -s2] :\n\t\t\tsd == 'nwcw'  ? [s2, -s2inv] :\n\t\t\tsd == 'nccw'  ? [-s2, s2inv] :\n\t\t\tsd == 'nwccw' ? [-s2inv, s2] :\n\t\t\tsd == 'wccw'  ? [s2inv, s2] :\n\t\t\tsd == 'swccw' ? [s2, s2inv] :\n\t\t\tsd == 'sccw'  ? [s2, -s2inv] :\n\t\t\tsd == 'seccw' ? [s2inv, -s2] :\n\t\t\tsd == 'eccw'  ? [-s2inv, -s2] :\n\t\t\tsd == 'neccw' ? [-s2, -s2inv] : null\n\t\t;\n\t\tpath += offset.join(\" \");\n\t\tthis.attrs.d += path;\n\t\treturn this;\n\t}\n\tl(x, y) {\n\t\tthis.attrs.d += 'l'+x+' '+y;\n\t\treturn this;\n\t}\n\tformat() {\n\t\t// All paths in this library start/end horizontally.\n\t\t// The extra .5 ensures a minor overlap, so there's no seams in bad rasterizers.\n\t\tthis.attrs.d += 'h.5';\n\t\treturn this;\n\t}\n}\n\n\nexport class DiagramMultiContainer extends FakeSVG {\n\tconstructor(tagName, items, attrs, text) {\n\t\tsuper(tagName, attrs, text);\n\t\tthis.items = items.map(wrapString);\n\t}\n\twalk(cb) {\n\t\tcb(this);\n\t\tthis.items.forEach(x=>x.walk(cb));\n\t}\n}\n\n\nexport class Diagram extends DiagramMultiContainer {\n\tconstructor(...items) {\n\t\tsuper('svg', items, {class: Options.DIAGRAM_CLASS});\n\t\tif(!(this.items[0] instanceof Start)) {\n\t\t\tthis.items.unshift(new Start());\n\t\t}\n\t\tif(!(this.items[this.items.length-1] instanceof End)) {\n\t\t\tthis.items.push(new End());\n\t\t}\n\t\tthis.up = this.down = this.height = this.width = 0;\n\t\tfor(const item of this.items) {\n\t\t\tthis.width += item.width + (item.needsSpace?20:0);\n\t\t\tthis.up = Math.max(this.up, item.up - this.height);\n\t\t\tthis.height += item.height;\n\t\t\tthis.down = Math.max(this.down - item.height, item.down);\n\t\t}\n\t\tthis.formatted = false;\n\t}\n\tformat(paddingt, paddingr, paddingb, paddingl) {\n\t\tpaddingt = unnull(paddingt, 20);\n\t\tpaddingr = unnull(paddingr, paddingt, 20);\n\t\tpaddingb = unnull(paddingb, paddingt, 20);\n\t\tpaddingl = unnull(paddingl, paddingr, 20);\n\t\tvar x = paddingl;\n\t\tvar y = paddingt;\n\t\ty += this.up;\n\t\tvar g = new FakeSVG('g', Options.STROKE_ODD_PIXEL_LENGTH ? {transform:'translate(.5 .5)'} : {});\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tif(item.needsSpace) {\n\t\t\t\tnew Path(x,y).h(10).addTo(g);\n\t\t\t\tx += 10;\n\t\t\t}\n\t\t\titem.format(x, y, item.width).addTo(g);\n\t\t\tx += item.width;\n\t\t\ty += item.height;\n\t\t\tif(item.needsSpace) {\n\t\t\t\tnew Path(x,y).h(10).addTo(g);\n\t\t\t\tx += 10;\n\t\t\t}\n\t\t}\n\t\tthis.attrs.width = this.width + paddingl + paddingr;\n\t\tthis.attrs.height = this.up + this.height + this.down + paddingt + paddingb;\n\t\tthis.attrs.viewBox = \"0 0 \" + this.attrs.width + \" \" + this.attrs.height;\n\t\tg.addTo(this);\n\t\tthis.formatted = true;\n\t\treturn this;\n\t}\n\taddTo(parent) {\n\t\tif(!parent) {\n\t\t\tvar scriptTag = document.getElementsByTagName('script');\n\t\t\tscriptTag = scriptTag[scriptTag.length - 1];\n\t\t\tparent = scriptTag.parentNode;\n\t\t}\n\t\treturn super.addTo.call(this, parent);\n\t}\n\ttoSVG() {\n\t\tif(!this.formatted) {\n\t\t\tthis.format();\n\t\t}\n\t\treturn super.toSVG.call(this);\n\t}\n\ttoString() {\n\t\tif(!this.formatted) {\n\t\t\tthis.format();\n\t\t}\n\t\treturn super.toString.call(this);\n\t}\n\ttoStandalone(style) {\n\t\tif(!this.formatted) {\n\t\t\tthis.format();\n\t\t}\n\t\tconst s = new FakeSVG('style', {}, style || defaultCSS);\n\t\tthis.children.push(s);\n\t\tthis.attrs.xmlns = \"http://www.w3.org/2000/svg\";\n\t\tthis.attrs['xmlns:xlink'] = \"http://www.w3.org/1999/xlink\";\n\t\tconst result = super.toString.call(this);\n\t\tthis.children.pop();\n\t\tdelete this.attrs.xmlns;\n\t\treturn result;\n\t}\n\tstatic fromJSON(input = []) {\n\t\treturn diagramFromJSON(Diagram, input);\n\t}\n}\nfuncs.Diagram = (...args)=>new Diagram(...args);\nfuncs.Diagram.fromJSON = Diagram.fromJSON;\n\n\nexport class ComplexDiagram extends FakeSVG {\n\tconstructor(...items) {\n\t\tvar diagram = new Diagram(...items);\n\t\tdiagram.items[0] = new Start({type:\"complex\"});\n\t\tdiagram.items[diagram.items.length-1] = new End({type:\"complex\"});\n\t\treturn diagram;\n\t}\n\tstatic fromJSON(input = []) {\n\t\treturn diagramFromJSON(ComplexDiagram, input);\n\t}\n}\nfuncs.ComplexDiagram = (...args)=>new ComplexDiagram(...args);\nfuncs.ComplexDiagram.fromJSON = ComplexDiagram.fromJSON;\n\n\nexport class Sequence extends DiagramMultiContainer {\n\tconstructor(...items) {\n\t\tsuper('g', items);\n\t\tvar numberOfItems = this.items.length;\n\t\tthis.needsSpace = true;\n\t\tthis.up = this.down = this.height = this.width = 0;\n\t\tfor(var i = 0; i < numberOfItems; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tthis.width += item.width + (item.needsSpace?20:0);\n\t\t\tthis.up = Math.max(this.up, item.up - this.height);\n\t\t\tthis.height += item.height;\n\t\t\tthis.down = Math.max(this.down - item.height, item.down);\n\t\t}\n\t\tif(this.items[0].needsSpace) this.width -= 10;\n\t\tif(this.items[numberOfItems-1].needsSpace) this.width -= 10;\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"sequence\";\n\t\t}\n\t}\n\tformat(x,y,width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tnew Path(x+gaps[0]+this.width,y+this.height).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tif(item.needsSpace && i > 0) {\n\t\t\t\tnew Path(x,y).h(10).addTo(this);\n\t\t\t\tx += 10;\n\t\t\t}\n\t\t\titem.format(x, y, item.width).addTo(this);\n\t\t\tx += item.width;\n\t\t\ty += item.height;\n\t\t\tif(item.needsSpace && i < this.items.length-1) {\n\t\t\t\tnew Path(x,y).h(10).addTo(this);\n\t\t\t\tx += 10;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}\nfuncs.Sequence = (...args)=>new Sequence(...args);\n\n\nexport class Stack extends DiagramMultiContainer {\n\tconstructor(...items) {\n\t\tsuper('g', items);\n\t\tif( items.length === 0 ) {\n\t\t\tthrow new RangeError(\"Stack() must have at least one child.\");\n\t\t}\n\t\tthis.width = Math.max.apply(null, this.items.map(function(e) { return e.width + (e.needsSpace?20:0); }));\n\t\t//if(this.items[0].needsSpace) this.width -= 10;\n\t\t//if(this.items[this.items.length-1].needsSpace) this.width -= 10;\n\t\tif(this.items.length > 1){\n\t\t\tthis.width += Options.AR*2;\n\t\t}\n\t\tthis.needsSpace = true;\n\t\tthis.up = this.items[0].up;\n\t\tthis.down = this.items[this.items.length-1].down;\n\n\t\tthis.height = 0;\n\t\tvar last = this.items.length - 1;\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tthis.height += item.height;\n\t\t\tif(i > 0) {\n\t\t\t\tthis.height += Math.max(Options.AR*2, item.up + Options.VS);\n\t\t\t}\n\t\t\tif(i < last) {\n\t\t\t\tthis.height += Math.max(Options.AR*2, item.down + Options.VS);\n\t\t\t}\n\t\t}\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"stack\";\n\t\t}\n\t}\n\tformat(x,y,width) {\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tx += gaps[0];\n\t\tvar xInitial = x;\n\t\tif(this.items.length > 1) {\n\t\t\tnew Path(x, y).h(Options.AR).addTo(this);\n\t\t\tx += Options.AR;\n\t\t}\n\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tvar innerWidth = this.width - (this.items.length>1 ? Options.AR*2 : 0);\n\t\t\titem.format(x, y, innerWidth).addTo(this);\n\t\t\tx += innerWidth;\n\t\t\ty += item.height;\n\n\t\t\tif(i !== this.items.length-1) {\n\t\t\t\tnew Path(x, y)\n\t\t\t\t\t.arc('ne').down(Math.max(0, item.down + Options.VS - Options.AR*2))\n\t\t\t\t\t.arc('es').left(innerWidth)\n\t\t\t\t\t.arc('nw').down(Math.max(0, this.items[i+1].up + Options.VS - Options.AR*2))\n\t\t\t\t\t.arc('ws').addTo(this);\n\t\t\t\ty += Math.max(item.down + Options.VS, Options.AR*2) + Math.max(this.items[i+1].up + Options.VS, Options.AR*2);\n\t\t\t\t//y += Math.max(Options.AR*4, item.down + Options.VS*2 + this.items[i+1].up)\n\t\t\t\tx = xInitial+Options.AR;\n\t\t\t}\n\n\t\t}\n\n\t\tif(this.items.length > 1) {\n\t\t\tnew Path(x,y).h(Options.AR).addTo(this);\n\t\t\tx += Options.AR;\n\t\t}\n\t\tnew Path(x,y).h(gaps[1]).addTo(this);\n\n\t\treturn this;\n\t}\n}\nfuncs.Stack = (...args)=>new Stack(...args);\n\n\nexport class VerticalSequence extends DiagramMultiContainer {\n\tconstructor(...items) {\n\t\tsuper('g', items);\n\t\tif( items.length === 0 ) {\n\t\t\tthrow new RangeError(\"VerticalSequence() must have at least one child.\");\n\t\t}\n\t\tthis.items = items.map(wrapString);\n\t\tthis.width = Math.max.apply(null, this.items.map(function(e) { return e.width + (e.needsSpace?20:0); }));\n\t\t//if(this.items[0].needsSpace) this.width -= 10;\n\t\t//if(this.items[this.items.length-1].needsSpace) this.width -= 10;\n\t\tif(this.items.length > 1){\n\t\t\tthis.width += Options.AR*2;\n\t\t}\n\t\tthis.needsSpace = true;\n\t\tthis.up = this.items[0].up;\n\t\tthis.down = this.items[this.items.length-1].down;\n\n\t\tthis.height = 0;\n\t\tvar last = this.items.length - 1;\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tif(i !== last) {\n\t\t\t\tthis.height += this.items[i].height + this.items[i].down + this.items[i+1].up + Options.VS*2;\n\t\t\t}\n\t\t}\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down\n\t\t\tthis.attrs['data-type'] = \"verticalsequence\"\n\t\t}\n\t}\n\tformat(x,y,width) {\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tx += gaps[0];\n\t\tvar xInitial = x;\n\t\tvar minWidth = 1000;\n\t\tfor(let itemNum in this.items){\n\t\t\tlet item = this.items[itemNum];\n\t\t\tminWidth = item.width < minWidth ? item.width : minWidth;\n\t\t}\n\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\titem.format(x, y, item.width).addTo(this);\n\t\t\ty += item.height;\n\n\t\t\tif(i !== this.items.length-1) {\n\t\t\t\tx += minWidth / 2;\n\t\t\t\ty += item.down\n\t\t\t\tnew Path(x, y)\n\t\t\t\t\t.v(Options.VS*2).addTo(this)\n\t\t\t\ty += this.items[i+1].up + Options.VS*2;\n\t\t\t\tx = xInitial;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tx += item.width;\n\t\t\t\ty += item.height;\n\t\t\t}\n\n\t\t}\n\n\t\tif(this.items.length > 1) {\n\t\t\tnew Path(x,y).h(this.width - this.items[this.items.length - 1].width).addTo(this);\n\t\t\tx += Options.AR;\n\t\t}\n\t\tnew Path(x,y).h(gaps[1]).addTo(this);\n\n\t\treturn this;\n\t}\n}\nfuncs.VerticalSequence = (...args)=>new VerticalSequence(...args);\n\n\nexport class OptionalSequence extends DiagramMultiContainer {\n\tconstructor(...items) {\n\t\tsuper('g', items);\n\t\tif( items.length === 0 ) {\n\t\t\tthrow new RangeError(\"OptionalSequence() must have at least one child.\");\n\t\t}\n\t\tif( items.length === 1 ) {\n\t\t\treturn new Sequence(items);\n\t\t}\n\t\tvar arc = Options.AR;\n\t\tthis.needsSpace = false;\n\t\tthis.width = 0;\n\t\tthis.up = 0;\n\t\tthis.height = sum(this.items, function(x){return x.height});\n\t\tthis.down = this.items[0].down;\n\t\tvar heightSoFar = 0;\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tthis.up = Math.max(this.up, Math.max(arc*2, item.up + Options.VS) - heightSoFar);\n\t\t\theightSoFar += item.height;\n\t\t\tif(i > 0) {\n\t\t\t\tthis.down = Math.max(this.height + this.down, heightSoFar + Math.max(arc*2, item.down + Options.VS)) - this.height;\n\t\t\t}\n\t\t\tvar itemWidth = (item.needsSpace?10:0) + item.width;\n\t\t\tif(i === 0) {\n\t\t\t\tthis.width += arc + Math.max(itemWidth, arc);\n\t\t\t} else {\n\t\t\t\tthis.width += arc*2 + Math.max(itemWidth, arc) + arc;\n\t\t\t}\n\t\t}\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"optseq\";\n\t\t}\n\t}\n\tformat(x, y, width) {\n\t\tvar arc = Options.AR;\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x, y).right(gaps[0]).addTo(this);\n\t\tnew Path(x + gaps[0] + this.width, y + this.height).right(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\t\tvar upperLineY = y - this.up;\n\t\tvar last = this.items.length - 1;\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tvar item = this.items[i];\n\t\t\tvar itemSpace = (item.needsSpace?10:0);\n\t\t\tvar itemWidth = item.width + itemSpace;\n\t\t\tif(i === 0) {\n\t\t\t\t// Upper skip\n\t\t\t\tnew Path(x,y)\n\t\t\t\t\t.arc('se')\n\t\t\t\t\t.up(y - upperLineY - arc*2)\n\t\t\t\t\t.arc('wn')\n\t\t\t\t\t.right(itemWidth - arc)\n\t\t\t\t\t.arc('ne')\n\t\t\t\t\t.down(y + item.height - upperLineY - arc*2)\n\t\t\t\t\t.arc('ws')\n\t\t\t\t\t.addTo(this);\n\t\t\t\t// Straight line\n\t\t\t\tnew Path(x, y)\n\t\t\t\t\t.right(itemSpace + arc)\n\t\t\t\t\t.addTo(this);\n\t\t\t\titem.format(x + itemSpace + arc, y, item.width).addTo(this);\n\t\t\t\tx += itemWidth + arc;\n\t\t\t\ty += item.height;\n\t\t\t\t// x ends on the far side of the first element,\n\t\t\t\t// where the next element's skip needs to begin\n\t\t\t} else if(i < last) {\n\t\t\t\t// Upper skip\n\t\t\t\tnew Path(x, upperLineY)\n\t\t\t\t\t.right(arc*2 + Math.max(itemWidth, arc) + arc)\n\t\t\t\t\t.arc('ne')\n\t\t\t\t\t.down(y - upperLineY + item.height - arc*2)\n\t\t\t\t\t.arc('ws')\n\t\t\t\t\t.addTo(this);\n\t\t\t\t// Straight line\n\t\t\t\tnew Path(x,y)\n\t\t\t\t\t.right(arc*2)\n\t\t\t\t\t.addTo(this);\n\t\t\t\titem.format(x + arc*2, y, item.width).addTo(this);\n\t\t\t\tnew Path(x + item.width + arc*2, y + item.height)\n\t\t\t\t\t.right(itemSpace + arc)\n\t\t\t\t\t.addTo(this);\n\t\t\t\t// Lower skip\n\t\t\t\tnew Path(x,y)\n\t\t\t\t\t.arc('ne')\n\t\t\t\t\t.down(item.height + Math.max(item.down + Options.VS, arc*2) - arc*2)\n\t\t\t\t\t.arc('ws')\n\t\t\t\t\t.right(itemWidth - arc)\n\t\t\t\t\t.arc('se')\n\t\t\t\t\t.up(item.down + Options.VS - arc*2)\n\t\t\t\t\t.arc('wn')\n\t\t\t\t\t.addTo(this);\n\t\t\t\tx += arc*2 + Math.max(itemWidth, arc) + arc;\n\t\t\t\ty += item.height;\n\t\t\t} else {\n\t\t\t\t// Straight line\n\t\t\t\tnew Path(x, y)\n\t\t\t\t\t.right(arc*2)\n\t\t\t\t\t.addTo(this);\n\t\t\t\titem.format(x + arc*2, y, item.width).addTo(this);\n\t\t\t\tnew Path(x + arc*2 + item.width, y + item.height)\n\t\t\t\t\t.right(itemSpace + arc)\n\t\t\t\t\t.addTo(this);\n\t\t\t\t// Lower skip\n\t\t\t\tnew Path(x,y)\n\t\t\t\t\t.arc('ne')\n\t\t\t\t\t.down(item.height + Math.max(item.down + Options.VS, arc*2) - arc*2)\n\t\t\t\t\t.arc('ws')\n\t\t\t\t\t.right(itemWidth - arc)\n\t\t\t\t\t.arc('se')\n\t\t\t\t\t.up(item.down + Options.VS - arc*2)\n\t\t\t\t\t.arc('wn')\n\t\t\t\t\t.addTo(this);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}\nfuncs.OptionalSequence = (...args)=>new OptionalSequence(...args);\n\n\nexport class AlternatingSequence extends DiagramMultiContainer {\n\tconstructor(...items) {\n\t\tsuper('g', items);\n\t\tif( items.length === 1 ) {\n\t\t\treturn new Sequence(items);\n\t\t}\n\t\tif( items.length !== 2 ) {\n\t\t\tthrow new RangeError(\"AlternatingSequence() must have one or two children.\");\n\t\t}\n\t\tthis.needsSpace = false;\n\n\t\tconst arc = Options.AR;\n\t\tconst vert = Options.VS;\n\t\tconst max = Math.max;\n\t\tconst first = this.items[0];\n\t\tconst second = this.items[1];\n\n\t\tconst arcX = 1 / Math.sqrt(2) * arc * 2;\n\t\tconst arcY = (1 - 1 / Math.sqrt(2)) * arc * 2;\n\t\tconst crossY = Math.max(arc, Options.VS);\n\t\tconst crossX = (crossY - arcY) + arcX;\n\n\t\tconst firstOut = max(arc + arc, crossY/2 + arc + arc, crossY/2 + vert + first.down);\n\t\tthis.up = firstOut + first.height + first.up;\n\n\t\tconst secondIn = max(arc + arc, crossY/2 + arc + arc, crossY/2 + vert + second.up);\n\t\tthis.down = secondIn + second.height + second.down;\n\n\t\tthis.height = 0;\n\n\t\tconst firstWidth = 2*(first.needsSpace?10:0) + first.width;\n\t\tconst secondWidth = 2*(second.needsSpace?10:0) + second.width;\n\t\tthis.width = 2*arc + max(firstWidth, crossX, secondWidth) + 2*arc;\n\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"altseq\";\n\t\t}\n\t}\n\tformat(x, y, width) {\n\t\tconst arc = Options.AR;\n\t\tconst gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).right(gaps[0]).addTo(this);\n\t\tx += gaps[0];\n\t\tnew Path(x+this.width, y).right(gaps[1]).addTo(this);\n\t\t// bounding box\n\t\t//new Path(x+gaps[0], y).up(this.up).right(this.width).down(this.up+this.down).left(this.width).up(this.down).addTo(this);\n\t\tconst first = this.items[0];\n\t\tconst second = this.items[1];\n\n\t\t// top\n\t\tconst firstIn = this.up - first.up;\n\t\tconst firstOut = this.up - first.up - first.height;\n\t\tnew Path(x,y).arc('se').up(firstIn-2*arc).arc('wn').addTo(this);\n\t\tfirst.format(x + 2*arc, y - firstIn, this.width - 4*arc).addTo(this);\n\t\tnew Path(x + this.width - 2*arc, y - firstOut).arc('ne').down(firstOut - 2*arc).arc('ws').addTo(this);\n\n\t\t// bottom\n\t\tconst secondIn = this.down - second.down - second.height;\n\t\tconst secondOut = this.down - second.down;\n\t\tnew Path(x,y).arc('ne').down(secondIn - 2*arc).arc('ws').addTo(this);\n\t\tsecond.format(x + 2*arc, y + secondIn, this.width - 4*arc).addTo(this);\n\t\tnew Path(x + this.width - 2*arc, y + secondOut).arc('se').up(secondOut - 2*arc).arc('wn').addTo(this);\n\n\t\t// crossover\n\t\tconst arcX = 1 / Math.sqrt(2) * arc * 2;\n\t\tconst arcY = (1 - 1 / Math.sqrt(2)) * arc * 2;\n\t\tconst crossY = Math.max(arc, Options.VS);\n\t\tconst crossX = (crossY - arcY) + arcX;\n\t\tconst crossBar = (this.width - 4*arc - crossX)/2;\n\t\tnew Path(x+arc, y - crossY/2 - arc).arc('ws').right(crossBar)\n\t\t\t.arc_8('n', 'cw').l(crossX - arcX, crossY - arcY).arc_8('sw', 'ccw')\n\t\t\t.right(crossBar).arc('ne').addTo(this);\n\t\tnew Path(x+arc, y + crossY/2 + arc).arc('wn').right(crossBar)\n\t\t\t.arc_8('s', 'ccw').l(crossX - arcX, -(crossY - arcY)).arc_8('nw', 'cw')\n\t\t\t.right(crossBar).arc('se').addTo(this);\n\n\t\treturn this;\n\t}\n}\nfuncs.AlternatingSequence = (...args)=>new AlternatingSequence(...args);\n\n\nexport class Choice extends DiagramMultiContainer {\n\tconstructor(normal, ...items) {\n\t\tsuper('g', items);\n\t\tif( typeof normal !== \"number\" || normal !== Math.floor(normal) ) {\n\t\t\tthrow new TypeError(\"The first argument of Choice() must be an integer.\");\n\t\t} else if(normal < 0 || normal >= items.length) {\n\t\t\tthrow new RangeError(\"The first argument of Choice() must be an index for one of the items.\");\n\t\t} else {\n\t\t\tthis.normal = normal;\n\t\t}\n\t\tvar first = 0;\n\t\tvar last = items.length - 1;\n\t\tthis.width = Math.max.apply(null, this.items.map(function(el){return el.width})) + Options.AR*4;\n\t\tthis.height = this.items[normal].height;\n\t\tthis.up = this.items[first].up;\n\t\tvar arcs;\n\t\tfor(var i = first; i < normal; i++) {\n\t\t\tif(i == normal-1) arcs = Options.AR*2;\n\t\t\telse arcs = Options.AR;\n\t\t\tthis.up += Math.max(arcs, this.items[i].height + this.items[i].down + Options.VS + this.items[i+1].up);\n\t\t}\n\t\tthis.down = this.items[last].down;\n\t\tfor(i = normal+1; i <= last; i++) {\n\t\t\tif(i == normal+1) arcs = Options.AR*2;\n\t\t\telse arcs = Options.AR;\n\t\t\tthis.down += Math.max(arcs, this.items[i-1].height + this.items[i-1].down + Options.VS + this.items[i].up);\n\t\t}\n\t\tthis.down -= this.items[normal].height; // already counted in Choice.height\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"choice\";\n\t\t}\n\t}\n\tformat(x,y,width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tnew Path(x+gaps[0]+this.width,y+this.height).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tvar last = this.items.length -1;\n\t\tvar innerWidth = this.width - Options.AR*4;\n\n\t\t// Do the elements that curve above\n\t\tvar distanceFromY;\n\t\tfor(var i = this.normal - 1; i >= 0; i--) {\n\t\t\tlet item = this.items[i];\n\t\t\tif( i == this.normal - 1 ) {\n\t\t\t\tdistanceFromY = Math.max(Options.AR*2, this.items[this.normal].up + Options.VS + item.down + item.height);\n\t\t\t}\n\t\t\tnew Path(x,y)\n\t\t\t\t.arc('se')\n\t\t\t\t.up(distanceFromY - Options.AR*2)\n\t\t\t\t.arc('wn').addTo(this);\n\t\t\titem.format(x+Options.AR*2,y - distanceFromY,innerWidth).addTo(this);\n\t\t\tnew Path(x+Options.AR*2+innerWidth, y-distanceFromY+item.height)\n\t\t\t\t.arc('ne')\n\t\t\t\t.down(distanceFromY - item.height + this.height - Options.AR*2)\n\t\t\t\t.arc('ws').addTo(this);\n\t\t\tdistanceFromY += Math.max(Options.AR, item.up + Options.VS + (i === 0 ? 0 : this.items[i-1].down+this.items[i-1].height));\n\t\t}\n\n\t\t// Do the straight-line path.\n\t\tnew Path(x,y).right(Options.AR*2).addTo(this);\n\t\tthis.items[this.normal].format(x+Options.AR*2, y, innerWidth).addTo(this);\n\t\tnew Path(x+Options.AR*2+innerWidth, y+this.height).right(Options.AR*2).addTo(this);\n\n\t\t// Do the elements that curve below\n\t\tfor(i = this.normal+1; i <= last; i++) {\n\t\t\tlet item = this.items[i];\n\t\t\tif( i == this.normal + 1 ) {\n\t\t\t\tdistanceFromY = Math.max(Options.AR*2, this.height + this.items[this.normal].down + Options.VS + item.up);\n\t\t\t}\n\t\t\tnew Path(x,y)\n\t\t\t\t.arc('ne')\n\t\t\t\t.down(distanceFromY - Options.AR*2)\n\t\t\t\t.arc('ws').addTo(this);\n\t\t\titem.format(x+Options.AR*2, y+distanceFromY, innerWidth).addTo(this);\n\t\t\tnew Path(x+Options.AR*2+innerWidth, y+distanceFromY+item.height)\n\t\t\t\t.arc('se')\n\t\t\t\t.up(distanceFromY - Options.AR*2 + item.height - this.height)\n\t\t\t\t.arc('wn').addTo(this);\n\t\t\tdistanceFromY += Math.max(Options.AR, item.height + item.down + Options.VS + (i == last ? 0 : this.items[i+1].up));\n\t\t}\n\n\t\treturn this;\n\t}\n}\nfuncs.Choice = (...args)=>new Choice(...args);\n\n\nexport class HorizontalChoice extends DiagramMultiContainer {\n\tconstructor(...items) {\n\t\tsuper('g', items);\n\t\tif( items.length === 0 ) {\n\t\t\tthrow new RangeError(\"HorizontalChoice() must have at least one child.\");\n\t\t}\n\t\tif( items.length === 1) {\n\t\t\treturn new Sequence(items);\n\t\t}\n\t\tconst allButLast = this.items.slice(0, -1);\n\t\tconst middles = this.items.slice(1, -1);\n\t\tconst first = this.items[0];\n\t\tconst last = this.items[this.items.length - 1];\n\t\tthis.needsSpace = false;\n\n\t\tthis.width = Options.AR; // starting track\n\t\tthis.width += Options.AR*2 * (this.items.length-1); // inbetween tracks\n\t\tthis.width += sum(this.items, x=>x.width + (x.needsSpace?20:0)); // items\n\t\tthis.width += (last.height > 0 ? Options.AR : 0); // needs space to curve up\n\t\tthis.width += Options.AR; //ending track\n\n\t\t// Always exits at entrance height\n\t\tthis.height = 0;\n\n\t\t// All but the last have a track running above them\n\t\tthis._upperTrack = Math.max(\n\t\t\tOptions.AR*2,\n\t\t\tOptions.VS,\n\t\t\tmax(allButLast, x=>x.up) + Options.VS\n\t\t);\n\t\tthis.up = Math.max(this._upperTrack, last.up);\n\n\t\t// All but the first have a track running below them\n\t\t// Last either straight-lines or curves up, so has different calculation\n\t\tthis._lowerTrack = Math.max(\n\t\t\tOptions.VS,\n\t\t\tmax(middles, x=>x.height+Math.max(x.down+Options.VS, Options.AR*2)),\n\t\t\tlast.height + last.down + Options.VS\n\t\t);\n\t\tif(first.height < this._lowerTrack) {\n\t\t\t// Make sure there's at least 2*AR room between first exit and lower track\n\t\t\tthis._lowerTrack = Math.max(this._lowerTrack, first.height + Options.AR*2);\n\t\t}\n\t\tthis.down = Math.max(this._lowerTrack, first.height + first.down);\n\n\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"horizontalchoice\";\n\t\t}\n\t}\n\tformat(x,y,width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tnew Path(x+gaps[0]+this.width,y+this.height).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tconst first = this.items[0];\n\t\tconst last = this.items[this.items.length-1];\n\t\tconst allButFirst = this.items.slice(1);\n\t\tconst allButLast = this.items.slice(0, -1);\n\n\t\t// upper track\n\t\tvar upperSpan = (sum(allButLast, x=>x.width+(x.needsSpace?20:0))\n\t\t\t+ (this.items.length - 2) * Options.AR*2\n\t\t\t- Options.AR\n\t\t);\n\t\tnew Path(x,y)\n\t\t\t.arc('se')\n\t\t\t.v(-(this._upperTrack - Options.AR*2))\n\t\t\t.arc('wn')\n\t\t\t.h(upperSpan)\n\t\t\t.addTo(this);\n\n\t\t// lower track\n\t\tvar lowerSpan = (sum(allButFirst, x=>x.width+(x.needsSpace?20:0))\n\t\t\t+ (this.items.length - 2) * Options.AR*2\n\t\t\t+ (last.height > 0 ? Options.AR : 0)\n\t\t\t- Options.AR\n\t\t);\n\t\tvar lowerStart = x + Options.AR + first.width+(first.needsSpace?20:0) + Options.AR*2;\n\t\tnew Path(lowerStart, y+this._lowerTrack)\n\t\t\t.h(lowerSpan)\n\t\t\t.arc('se')\n\t\t\t.v(-(this._lowerTrack - Options.AR*2))\n\t\t\t.arc('wn')\n\t\t\t.addTo(this);\n\n\t\t// Items\n\t\tfor(const [i, item] of enumerate(this.items)) {\n\t\t\t// input track\n\t\t\tif(i === 0) {\n\t\t\t\tnew Path(x,y)\n\t\t\t\t\t.h(Options.AR)\n\t\t\t\t\t.addTo(this);\n\t\t\t\tx += Options.AR;\n\t\t\t} else {\n\t\t\t\tnew Path(x, y - this._upperTrack)\n\t\t\t\t\t.arc('ne')\n\t\t\t\t\t.v(this._upperTrack - Options.AR*2)\n\t\t\t\t\t.arc('ws')\n\t\t\t\t\t.addTo(this);\n\t\t\t\tx += Options.AR*2;\n\t\t\t}\n\n\t\t\t// item\n\t\t\tvar itemWidth = item.width + (item.needsSpace?20:0);\n\t\t\titem.format(x, y, itemWidth).addTo(this);\n\t\t\tx += itemWidth;\n\n\t\t\t// output track\n\t\t\tif(i === this.items.length-1) {\n\t\t\t\tif(item.height === 0) {\n\t\t\t\t\tnew Path(x,y)\n\t\t\t\t\t\t.h(Options.AR)\n\t\t\t\t\t\t.addTo(this);\n\t\t\t\t} else {\n\t\t\t\t\tnew Path(x,y+item.height)\n\t\t\t\t\t.arc('se')\n\t\t\t\t\t.addTo(this);\n\t\t\t\t}\n\t\t\t} else if(i === 0 && item.height > this._lowerTrack) {\n\t\t\t\t// Needs to arc up to meet the lower track, not down.\n\t\t\t\tif(item.height - this._lowerTrack >= Options.AR*2) {\n\t\t\t\t\tnew Path(x, y+item.height)\n\t\t\t\t\t\t.arc('se')\n\t\t\t\t\t\t.v(this._lowerTrack - item.height + Options.AR*2)\n\t\t\t\t\t\t.arc('wn')\n\t\t\t\t\t\t.addTo(this);\n\t\t\t\t} else {\n\t\t\t\t\t// Not enough space to fit two arcs\n\t\t\t\t\t// so just bail and draw a straight line for now.\n\t\t\t\t\tnew Path(x, y+item.height)\n\t\t\t\t\t\t.l(Options.AR*2, this._lowerTrack - item.height)\n\t\t\t\t\t\t.addTo(this);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnew Path(x, y+item.height)\n\t\t\t\t\t.arc('ne')\n\t\t\t\t\t.v(this._lowerTrack - item.height - Options.AR*2)\n\t\t\t\t\t.arc('ws')\n\t\t\t\t\t.addTo(this);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}\nfuncs.HorizontalChoice = (...args)=>new HorizontalChoice(...args);\n\n\nexport class MultipleChoice extends DiagramMultiContainer {\n\tconstructor(normal, type, ...items) {\n\t\tsuper('g', items);\n\t\tif( typeof normal !== \"number\" || normal !== Math.floor(normal) ) {\n\t\t\tthrow new TypeError(\"The first argument of MultipleChoice() must be an integer.\");\n\t\t} else if(normal < 0 || normal >= items.length) {\n\t\t\tthrow new RangeError(\"The first argument of MultipleChoice() must be an index for one of the items.\");\n\t\t} else {\n\t\t\tthis.normal = normal;\n\t\t}\n\t\tif( type != \"any\" && type != \"all\" ) {\n\t\t\tthrow new SyntaxError(\"The second argument of MultipleChoice must be 'any' or 'all'.\");\n\t\t} else {\n\t\t\tthis.type = type;\n\t\t}\n\t\tthis.needsSpace = true;\n\t\tthis.innerWidth = max(this.items, function(x){return x.width});\n\t\tthis.width = 30 + Options.AR + this.innerWidth + Options.AR + 20;\n\t\tthis.up = this.items[0].up;\n\t\tthis.down = this.items[this.items.length-1].down;\n\t\tthis.height = this.items[normal].height;\n\t\tfor(var i = 0; i < this.items.length; i++) {\n\t\t\tlet item = this.items[i];\n\t\t\tlet minimum;\n\t\t\tif(i == normal - 1 || i == normal + 1) minimum = 10 + Options.AR;\n\t\t\telse minimum = Options.AR;\n\t\t\tif(i < normal) {\n\t\t\t\tthis.up += Math.max(minimum, item.height + item.down + Options.VS + this.items[i+1].up);\n\t\t\t} else if(i > normal) {\n\t\t\t\tthis.down += Math.max(minimum, item.up + Options.VS + this.items[i-1].down + this.items[i-1].height);\n\t\t\t}\n\t\t}\n\t\tthis.down -= this.items[normal].height; // already counted in this.height\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"multiplechoice\";\n\t\t}\n\t}\n\tformat(x, y, width) {\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x, y).right(gaps[0]).addTo(this);\n\t\tnew Path(x + gaps[0] + this.width, y + this.height).right(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tvar normal = this.items[this.normal];\n\n\t\t// Do the elements that curve above\n\t\tvar distanceFromY;\n\t\tfor(var i = this.normal - 1; i >= 0; i--) {\n\t\t\tvar item = this.items[i];\n\t\t\tif( i == this.normal - 1 ) {\n\t\t\t\tdistanceFromY = Math.max(10 + Options.AR, normal.up + Options.VS + item.down + item.height);\n\t\t\t}\n\t\t\tnew Path(x + 30,y)\n\t\t\t\t.up(distanceFromY - Options.AR)\n\t\t\t\t.arc('wn').addTo(this);\n\t\t\titem.format(x + 30 + Options.AR, y - distanceFromY, this.innerWidth).addTo(this);\n\t\t\tnew Path(x + 30 + Options.AR + this.innerWidth, y - distanceFromY + item.height)\n\t\t\t\t.arc('ne')\n\t\t\t\t.down(distanceFromY - item.height + this.height - Options.AR - 10)\n\t\t\t\t.addTo(this);\n\t\t\tif(i !== 0) {\n\t\t\t\tdistanceFromY += Math.max(Options.AR, item.up + Options.VS + this.items[i-1].down + this.items[i-1].height);\n\t\t\t}\n\t\t}\n\n\t\tnew Path(x + 30, y).right(Options.AR).addTo(this);\n\t\tnormal.format(x + 30 + Options.AR, y, this.innerWidth).addTo(this);\n\t\tnew Path(x + 30 + Options.AR + this.innerWidth, y + this.height).right(Options.AR).addTo(this);\n\n\t\tfor(i = this.normal+1; i < this.items.length; i++) {\n\t\t\tlet item = this.items[i];\n\t\t\tif(i == this.normal + 1) {\n\t\t\t\tdistanceFromY = Math.max(10+Options.AR, normal.height + normal.down + Options.VS + item.up);\n\t\t\t}\n\t\t\tnew Path(x + 30, y)\n\t\t\t\t.down(distanceFromY - Options.AR)\n\t\t\t\t.arc('ws')\n\t\t\t\t.addTo(this);\n\t\t\titem.format(x + 30 + Options.AR, y + distanceFromY, this.innerWidth).addTo(this);\n\t\t\tnew Path(x + 30 + Options.AR + this.innerWidth, y + distanceFromY + item.height)\n\t\t\t\t.arc('se')\n\t\t\t\t.up(distanceFromY - Options.AR + item.height - normal.height)\n\t\t\t\t.addTo(this);\n\t\t\tif(i != this.items.length - 1) {\n\t\t\t\tdistanceFromY += Math.max(Options.AR, item.height + item.down + Options.VS + this.items[i+1].up);\n\t\t\t}\n\t\t}\n\t\tvar text = new FakeSVG('g', {\"class\": \"diagram-text\"}).addTo(this);\n\t\tnew FakeSVG('title', {}, (this.type==\"any\"?\"take one or more branches, once each, in any order\":\"take all branches, once each, in any order\")).addTo(text);\n\t\tnew FakeSVG('path', {\n\t\t\t\"d\": \"M \"+(x+30)+\" \"+(y-10)+\" h -26 a 4 4 0 0 0 -4 4 v 12 a 4 4 0 0 0 4 4 h 26 z\",\n\t\t\t\"class\": \"diagram-text\"\n\t\t\t}).addTo(text);\n\t\tnew FakeSVG('text', {\n\t\t\t\"x\": x + 15,\n\t\t\t\"y\": y + 4,\n\t\t\t\"class\": \"diagram-text\"\n\t\t\t}, (this.type==\"any\"?\"1+\":\"all\")).addTo(text);\n\t\tnew FakeSVG('path', {\n\t\t\t\"d\": \"M \"+(x+this.width-20)+\" \"+(y-10)+\" h 16 a 4 4 0 0 1 4 4 v 12 a 4 4 0 0 1 -4 4 h -16 z\",\n\t\t\t\"class\": \"diagram-text\"\n\t\t\t}).addTo(text);\n\t\tnew FakeSVG('path', {\n\t\t\t\"d\": \"M \"+(x+this.width-13)+\" \"+(y-2)+\" a 4 4 0 1 0 6 -1 m 2.75 -1 h -4 v 4 m 0 -3 h 2\",\n\t\t\t\"style\": \"stroke-width: 1.75\"\n\t\t\t}).addTo(text);\n\t\treturn this;\n\t}\n}\nfuncs.MultipleChoice = (...args)=>new MultipleChoice(...args);\n\n\nexport class Optional extends FakeSVG {\n\tconstructor(item, skip) {\n\t\tif( skip === undefined )\n\t\t\treturn new Choice(1, new Skip(), item);\n\t\telse if ( skip === \"skip\" )\n\t\t\treturn new Choice(0, new Skip(), item);\n\t\telse\n\t\t\tthrow \"Unknown value for Optional()'s 'skip' argument.\";\n\t}\n}\nfuncs.Optional = (...args)=>new Optional(...args);\n\n\nexport class OneOrMore extends FakeSVG {\n\tconstructor(item, rep) {\n\t\tsuper('g');\n\t\trep = rep || (new Skip());\n\t\tthis.item = wrapString(item);\n\t\tthis.rep = wrapString(rep);\n\t\tthis.width = Math.max(this.item.width, this.rep.width) + Options.AR*2;\n\t\tthis.height = this.item.height;\n\t\tthis.up = this.item.up;\n\t\tthis.down = Math.max(Options.AR*2, this.item.down + Options.VS + this.rep.up + this.rep.height + this.rep.down);\n\t\tthis.needsSpace = true;\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"oneormore\";\n\t\t}\n\t}\n\tformat(x,y,width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tnew Path(x+gaps[0]+this.width,y+this.height).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\t// Draw item\n\t\tnew Path(x,y).right(Options.AR).addTo(this);\n\t\tthis.item.format(x+Options.AR,y,this.width-Options.AR*2).addTo(this);\n\t\tnew Path(x+this.width-Options.AR,y+this.height).right(Options.AR).addTo(this);\n\n\t\t// Draw repeat arc\n\t\tvar distanceFromY = Math.max(Options.AR*2, this.item.height+this.item.down+Options.VS+this.rep.up);\n\t\tnew Path(x+Options.AR,y).arc('nw').down(distanceFromY-Options.AR*2).arc('ws').addTo(this);\n\t\tthis.rep.format(x+Options.AR, y+distanceFromY, this.width - Options.AR*2).addTo(this);\n\t\tnew Path(x+this.width-Options.AR, y+distanceFromY+this.rep.height).arc('se').up(distanceFromY-Options.AR*2+this.rep.height-this.item.height).arc('en').addTo(this);\n\n\t\treturn this;\n\t}\n\twalk(cb) {\n\t\tcb(this);\n\t\tthis.item.walk(cb);\n\t\tthis.rep.walk(cb);\n\t}\n}\nfuncs.OneOrMore = (...args)=>new OneOrMore(...args);\n\n\nexport class ZeroOrMore extends FakeSVG {\n\tconstructor(item, rep, skip) {\n\t\treturn new Optional(new OneOrMore(item, rep), skip);\n\t}\n}\nfuncs.ZeroOrMore = (...args)=>new ZeroOrMore(...args);\n\n\nexport class Group extends FakeSVG {\n\tconstructor(item, label) {\n\t\tsuper('g');\n\t\tthis.item = wrapString(item);\n\t\tthis.label =\n\t\t\tlabel instanceof FakeSVG\n\t\t\t\t? label\n\t\t\t\t: label\n\t\t\t\t\t? new Comment(label)\n\t\t\t\t\t: undefined;\n\n\t\tthis.width = Math.max(\n\t\t\tthis.item.width + (this.item.needsSpace?20:0),\n\t\t\tthis.label ? this.label.width : 0,\n\t\t\tOptions.AR*2);\n\t\tthis.height = this.item.height;\n\t\tthis.boxUp = this.up = Math.max(this.item.up + Options.VS, Options.AR);\n\t\tif(this.label) {\n\t\t\tthis.up += this.label.up + this.label.height + this.label.down;\n\t\t}\n\t\tthis.down = Math.max(this.item.down + Options.VS, Options.AR);\n\t\tthis.needsSpace = true;\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"group\";\n\t\t}\n\t}\n\tformat(x, y, width) {\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tnew Path(x+gaps[0]+this.width,y+this.height).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tnew FakeSVG('rect', {\n\t\t\tx,\n\t\t\ty:y-this.boxUp,\n\t\t\twidth:this.width,\n\t\t\theight:this.boxUp + this.height + this.down,\n\t\t\trx: Options.AR,\n\t\t\try: Options.AR,\n\t\t\t'class':'group-box',\n\t\t}).addTo(this);\n\n\t\tthis.item.format(x,y,this.width).addTo(this);\n\t\tif(this.label) {\n\t\t\tthis.label.format(\n\t\t\t\tx,\n\t\t\t\ty-(this.boxUp+this.label.down+this.label.height),\n\t\t\t\tthis.label.width).addTo(this);\n\t\t}\n\n\t\treturn this;\n\t}\n\twalk(cb) {\n\t\tcb(this);\n\t\tthis.item.walk(cb);\n\t\tthis.label.walk(cb);\n\t}\n}\nfuncs.Group = (...args)=>new Group(...args);\n\n\nexport class Start extends FakeSVG {\n\tconstructor({type=\"simple\", label}={}) {\n\t\tsuper('g');\n\t\tthis.width = 20;\n\t\tthis.height = 0;\n\t\tthis.up = 10;\n\t\tthis.down = 10;\n\t\tthis.type = type;\n\t\tif(label) {\n\t\t\tthis.label = \"\"+label;\n\t\t\tthis.width = Math.max(20, this.label.length * Options.CHAR_WIDTH + 10);\n\t\t}\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"start\";\n\t\t}\n\t}\n\tformat(x,y) {\n\t\tlet path = new Path(x, y-10);\n\t\tif (this.type === \"complex\") {\n\t\t\tpath.down(20)\n\t\t\t\t.m(0, -10)\n\t\t\t\t.right(this.width)\n\t\t\t\t.addTo(this);\n\t\t} else {\n\t\t\tpath.down(20)\n\t\t\t\t.m(10, -20)\n\t\t\t\t.down(20)\n\t\t\t\t.m(-10, -10)\n\t\t\t\t.right(this.width)\n\t\t\t\t.addTo(this);\n\t\t}\n\t\tif(this.label) {\n\t\t\tnew FakeSVG('text', {x:x, y:y-15, style:\"text-anchor:start\"}, this.label).addTo(this);\n\t\t}\n\t\treturn this;\n\t}\n}\nfuncs.Start = (...args)=>new Start(...args);\n\n\nexport class End extends FakeSVG {\n\tconstructor({type=\"simple\"}={}) {\n\t\tsuper('path');\n\t\tthis.width = 20;\n\t\tthis.height = 0;\n\t\tthis.up = 10;\n\t\tthis.down = 10;\n\t\tthis.type = type;\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"end\";\n\t\t}\n\t}\n\tformat(x,y) {\n\t\tif (this.type === \"complex\") {\n\t\t\tthis.attrs.d = 'M '+x+' '+y+' h 20 m 0 -10 v 20';\n\t\t} else {\n\t\t\tthis.attrs.d = 'M '+x+' '+y+' h 20 m -10 -10 v 20 m 10 -20 v 20';\n\t\t}\n\t\treturn this;\n\t}\n}\nfuncs.End = (...args)=>new End(...args);\n\n\nexport class Terminal extends FakeSVG {\n\tconstructor(text, {href, title}={}) {\n\t\tsuper('g', {'class': 'terminal'});\n\t\tthis.text = \"\"+text;\n\t\tthis.href = href;\n\t\tthis.title = title;\n\t\tthis.width = this.text.length * Options.CHAR_WIDTH + 20; /* Assume that each char is .5em, and that the em is 16px */\n\t\tthis.height = 0;\n\t\tthis.up = 11;\n\t\tthis.down = 11;\n\t\tthis.needsSpace = true;\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"terminal\";\n\t\t}\n\t}\n\tformat(x, y, width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tnew Path(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tnew FakeSVG('rect', {x:x, y:y-11, width:this.width, height:this.up+this.down, rx:10, ry:10}).addTo(this);\n\t\tvar text = new FakeSVG('text', {x:x+this.width/2, y:y+4}, this.text);\n\t\tif(this.href)\n\t\t\tnew FakeSVG('a', {'xlink:href': this.href}, [text]).addTo(this);\n\t\telse\n\t\t\ttext.addTo(this);\n\t\tif(this.title)\n\t\t\tnew FakeSVG('title', {}, [this.title]).addTo(this);\n\t\treturn this;\n\t}\n}\nfuncs.Terminal = (...args)=>new Terminal(...args);\n\n\nexport class NonTerminal extends FakeSVG {\n\tconstructor(text, {href, title}={}) {\n\t\tsuper('g', {'class': 'non-terminal'});\n\t\tthis.text = \"\"+text;\n\t\tthis.href = href;\n\t\tthis.title = title;\n\t\tthis.width = this.text.length * Options.CHAR_WIDTH + 20;\n\t\tthis.height = 0;\n\t\tthis.up = 11;\n\t\tthis.down = 11;\n\t\tthis.needsSpace = true;\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"nonterminal\";\n\t\t}\n\t}\n\tformat(x, y, width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tnew Path(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tnew FakeSVG('rect', {x:x, y:y-11, width:this.width, height:this.up+this.down}).addTo(this);\n\t\tvar text = new FakeSVG('text', {x:x+this.width/2, y:y+4}, this.text);\n\t\tif(this.href)\n\t\t\tnew FakeSVG('a', {'xlink:href': this.href}, [text]).addTo(this);\n\t\telse\n\t\t\ttext.addTo(this);\n\t\tif(this.title)\n\t\t\tnew FakeSVG('title', {}, [this.title]).addTo(this);\n\t\treturn this;\n\t}\n}\nfuncs.NonTerminal = (...args)=>new NonTerminal(...args);\n\n\nexport class Comment extends FakeSVG {\n\tconstructor(text, {href, title}={}) {\n\t\tsuper('g');\n\t\tthis.text = \"\"+text;\n\t\tthis.href = href;\n\t\tthis.title = title;\n\t\tthis.width = this.text.length * Options.COMMENT_CHAR_WIDTH + 10;\n\t\tthis.height = 0;\n\t\tthis.up = 8;\n\t\tthis.down = 8;\n\t\tthis.needsSpace = true;\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"comment\";\n\t\t}\n\t}\n\tformat(x, y, width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tnew Path(x+gaps[0]+this.width,y+this.height).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tvar text = new FakeSVG('text', {x:x+this.width/2, y:y+5, class:'comment'}, this.text);\n\t\tif(this.href)\n\t\t\tnew FakeSVG('a', {'xlink:href': this.href}, [text]).addTo(this);\n\t\telse\n\t\t\ttext.addTo(this);\n\t\tif(this.title)\n\t\t\tnew FakeSVG('title', {}, this.title).addTo(this);\n\t\treturn this;\n\t}\n}\nfuncs.Comment = (...args)=>new Comment(...args);\n\n\nexport class Skip extends FakeSVG {\n\tconstructor() {\n\t\tsuper('g');\n\t\tthis.width = 0;\n\t\tthis.height = 0;\n\t\tthis.up = 0;\n\t\tthis.down = 0;\n\t\tthis.needsSpace = false;\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"skip\";\n\t\t}\n\t}\n\tformat(x, y, width) {\n\t\tnew Path(x,y).right(width).addTo(this);\n\t\treturn this;\n\t}\n}\nfuncs.Skip = (...args)=>new Skip(...args);\n\n\nexport class Block extends FakeSVG {\n\tconstructor({width=50, up=15, height=25, down=15, needsSpace=true}={}) {\n\t\tsuper('g');\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.up = up;\n\t\tthis.down = down;\n\t\tthis.needsSpace = needsSpace;\n\t\tif(Options.DEBUG) {\n\t\t\tthis.attrs['data-updown'] = this.up + \" \" + this.height + \" \" + this.down;\n\t\t\tthis.attrs['data-type'] = \"block\";\n\t\t}\n\t}\n\tformat(x, y, width) {\n\t\t// Hook up the two sides if this is narrower than its stated width.\n\t\tvar gaps = determineGaps(width, this.width);\n\t\tnew Path(x,y).h(gaps[0]).addTo(this);\n\t\tnew Path(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\n\t\tx += gaps[0];\n\n\t\tnew FakeSVG('rect', {x:x, y:y-this.up, width:this.width, height:this.up+this.height+this.down}).addTo(this);\n\t\treturn this;\n\t}\n}\nfuncs.Block = (...args)=>new Block(...args);\n\n\nfunction unnull(...args) {\n\t// Return the first value that isn't undefined.\n\t// More correct than `v1 || v2 || v3` because falsey values will be returned.\n\treturn args.reduce(function(sofar, x) { return sofar !== undefined ? sofar : x; });\n}\n\nfunction determineGaps(outer, inner) {\n\tvar diff = outer - inner;\n\tswitch(Options.INTERNAL_ALIGNMENT) {\n\t\tcase 'left': return [0, diff];\n\t\tcase 'right': return [diff, 0];\n\t\tdefault: return [diff/2, diff/2];\n\t}\n}\n\nfunction wrapString(value) {\n\t\treturn value instanceof FakeSVG ? value : new Terminal(\"\"+value);\n}\n\nfunction sum(iter, func) {\n\tif(!func) func = function(x) { return x; };\n\treturn iter.map(func).reduce(function(a,b){return a+b}, 0);\n}\n\nfunction max(iter, func) {\n\tif(!func) func = function(x) { return x; };\n\treturn Math.max.apply(null, iter.map(func));\n}\n\nfunction SVG(name, attrs, text) {\n\tattrs = attrs || {};\n\ttext = text || '';\n\tvar el = document.createElementNS(\"http://www.w3.org/2000/svg\",name);\n\tfor(var attr in attrs) {\n\t\tif(attr === 'xlink:href')\n\t\t\tel.setAttributeNS(\"http://www.w3.org/1999/xlink\", 'href', attrs[attr]);\n\t\telse\n\t\t\tel.setAttribute(attr, attrs[attr]);\n\t}\n\tel.textContent = text;\n\treturn el;\n}\n\nfunction escapeString(string) {\n\t// Escape markdown and HTML special characters\n\treturn string.replace(/[*_`[\\]<&]/g, function(charString) {\n\t\treturn '&#' + charString.charCodeAt(0) + ';';\n\t});\n}\n\nfunction* enumerate(iter) {\n\tvar count = 0;\n\tfor(const x of iter) {\n\t\tyield [count, x];\n\t\tcount++;\n\t}\n}\n\nfunction diagramFromJSON(Diagram, input) {\n\tif (!input) return new Diagram();\n\t// Wrap an array of nodes in the diagram type decided by the parent\n\t// class of the calling static fromJSON method.\n\tif (Array.isArray(input)) {\n\t\treturn new Diagram(...input.map(nodeFromJSON));\n\t}\n\t// Retain the diagram type specified in the input regardless the parent\n\t// class of the calling static fromJSON method.\n\tswitch (input.type) {\n\t\tcase 'Diagram':\n\t\tcase 'ComplexDiagram':\n\t\t\treturn nodeFromJSON(input);\n\t}\n\t// Wrap the single node in the diagram type decided by the parent\n\t// class of the calling static fromJSON method.\n\treturn new Diagram(nodeFromJSON(input));\n}\n\nconst classes = {\n\tDiagram, ComplexDiagram, Sequence, Stack, VerticalSequence, OptionalSequence,\n\tHorizontalChoice, AlternatingSequence, Choice, MultipleChoice, Optional,\n\tOneOrMore, ZeroOrMore, Group, Start, End, Terminal, NonTerminal, Comment, Skip\n}\n\nfunction nodeFromJSON(node) {\n\tif (!node) return;\n\tconst Node = classes[node.type];\n\tswitch (Node) {\n\t\tcase Diagram:\n\t\tcase ComplexDiagram:\n\t\tcase Sequence:\n\t\tcase Stack:\n\t\tcase VerticalSequence:\n\t\tcase OptionalSequence:\n\t\tcase HorizontalChoice:\n\t\t\treturn new Node(...itemsFromJSON(node.items));\n\n\t\tcase AlternatingSequence:\n\t\t\treturn new Node(nodeFromJSON(node.option1), nodeFromJSON(node.option2));\n\n\t\tcase Choice:\n\t\t\treturn new Node(node.normalIndex || 0, ...itemsFromJSON(node.options));\n\n\t\tcase MultipleChoice:\n\t\t\treturn new Node(node.normalIndex || 0, node.choiceType,\n\t\t\t\t...itemsFromJSON(node.options));\n\n\t\tcase Optional:\n\t\t\treturn new Node(nodeFromJSON(node.item), node.skip && 'skip');\n\n\t\tcase OneOrMore:\n\t\t\treturn new Node(nodeFromJSON(node.item), nodeFromJSON(node.repeat));\n\n\t\tcase ZeroOrMore:\n\t\t\treturn new Node(nodeFromJSON(node.item), nodeFromJSON(node.repeat),\n\t\t\t\tnode.skip && 'skip');\n\n\t\tcase Group:\n\t\t\treturn new Node(nodeFromJSON(node.item), node.label);\n\n\t\tcase Start:\n\t\t\treturn new Node(node.startType, node.label);\n\n\t\tcase End:\n\t\t\treturn new Node(node.endType);\n\n\t\tcase Terminal:\n\t\tcase NonTerminal:\n\t\tcase Comment:\n\t\t\treturn new Node(node.text, { href: node.href, title: node.title });\n\n\t\tcase Skip:\n\t\t\treturn new Node();\n\t}\n\tthrow new Error(`Unknown node type: \"${node.type}\".`)\n}\n\nfunction itemsFromJSON(items) {\n\treturn items ? items.map(nodeFromJSON) : [];\n}\n"],"names":[],"mappings":"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"}