mirror of
https://github.com/mermaid-js/mermaid.git
synced 2024-09-12 04:22:50 +02:00
2901 lines
448 KiB
JavaScript
2901 lines
448 KiB
JavaScript
![]() |
!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null===n?0/0:+n}function e(n){return!isNaN(n)}function r(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function u(n){return n.length}function i(n){for(var t=1;n*t%1;)t*=10;return t}function o(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function a(){this._=Object.create(null)}function c(n){return(n+="")===la||n[0]===sa?sa+n:n}function l(n){return(n+="")[0]===sa?n.slice(1):n}function s(n){return c(n)in this._}function f(n){return(n=c(n))in this._&&delete this._[n]}function h(){var n=[];for(var t in this._)n.push(l(t));return n}function g(){var n=0;for(var t in this._)++n;return n}function p(){for(var n in this._)return!1;return!0}function v(){this._=Object.create(null)}function d(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function m(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=fa.length;r>e;++e){var u=fa[e]+t;if(u in n)return u}}function y(){}function x(){}function M(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new a;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function _(){Bo.event.preventDefault()}function b(){for(var n,t=Bo.event;n=t.sourceEvent;)t=n;return t}function w(n){for(var t=new x,e=0,r=arguments.length;++e<r;)t[arguments[e]]=M(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=Bo.event;u.target=n,Bo.event=u,t[u.type].apply(e,r)}finally{Bo.event=i}}},t}function S(n){return ga(n,ya),n}function k(n){return"function"==typeof n?n:function(){return pa(n,this)}}function E(n){return"function"==typeof n?n:function(){return va(n,this)}}function A(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=Bo.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function C(n){return n.trim().replace(/\s+/g," ")}function N(n){return new RegExp("(?:^|\\s+)"+Bo.requote(n)+"(?:\\s+|$)","g")}function z(n){return(n+"").trim().split(/^|\s+/)}function L(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=z(n).map(T);var u=n.length;return"function"==typeof t?r:e}function T(n){var t=N(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",C(u+" "+n))):e.setAttribute("class",C(u.replace(t," ")))}}function q(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function R(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function D(n){return"function"==typeof n?n:(n=Bo.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function P(n){return{__data__:n}}function U(n){return function(){return ma(this,n)}}function j(t){return arguments.length||(t=n),function(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}}function F(n,t){for(var
|
|||
|
(T*T/M>i||ca((y*z+x*L)/M-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,C,N,E,_/=S,b/=S,w,d,m),m.point(C,N),u(C,N,E,_,b,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*La),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function tr(n){var t=nr(function(t,e){return n([t*Ta,e*Ta])});return function(n){return or(t(n))}}function er(n){this.stream=n}function rr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ur(n){return ir(function(){return n})()}function ir(n){function t(n){return n=a(n[0]*La,n[1]*La),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Ta,n[1]*Ta]}function r(){a=Ye(o=lr(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=nr(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=Cc,_=Et,b=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=or(M(o,f(_(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,Cc):Fe((b=+n)*La),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?Oe(n[0][0],n[0][1],n[1][0],n[1][1]):Et,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*La,d=n[1]%360*La,r()):[v*Ta,d*Ta]},t.rotate=function(n){return arguments.length?(m=n[0]%360*La,y=n[1]%360*La,x=n.length>2?n[2]%360*La:0,r()):[m*Ta,y*Ta,x*Ta]},Bo.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function or(n){return rr(n,function(t,e){n.point(t*La,e*La)})}function ar(n,t){return[n,t]}function cr(n,t){return[n>Ea?n-Aa:-Ea>n?n+Aa:n,t]}function lr(n,t,e){return n?t||e?Ye(fr(n),hr(t,e)):fr(n):t||e?hr(t,e):cr}function sr(n){return function(t,e){return t+=n,[t>Ea?t-Aa:-Ea>t?t+Aa:t,e]}}function fr(n){var t=sr(n);return t.invert=sr(-n),t}function hr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),nt(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),nt(s*r-a*u)]},e}function gr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=pr(e,u),i=pr(e,i),(o>0?i>u:u>i)&&(u+=o*Aa)):(u=n+o*Aa,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=Me([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function pr(n,t){var e=pe(t);e[0]-=n,xe(e);var r=Q(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Na)%(2*Math.PI)}function vr(n,t,e){var r=Bo.range(n,t-Na,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function dr(n,t,e){var r=Bo.range(n,t-Na,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function mr(n){return n.source}function yr(n){return n.target}function xr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(ut(r-t)+u*o*ut(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ta,Math.atan2(o,Math.sqrt(r*r+u*u))*Ta]}:function(){return[n*Ta,t*Ta]};return p.distance=h,p}function Mr(){function n(n,u){var i=Math.sin(u*=La),o=Math.cos(u),a=ca((n*=La)-t),c=Math.cos(a);Fc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Hc.point=function(u,i){t=u*La,e=Math.sin(i*=La),r=Math.cos(i),Hc.point=n},Hc.lineEnd=function(){Hc.point=Hc.lineEnd=y}}function _r(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asi
|
|||
|
}),Bo.timer(function(){return p.c=c(r||1)?Ae:c,1},0,o),void 0)}function c(r){if(u.active!==e)return l();for(var o=r/g,a=f(o),c=v.length;c>0;)v[--c].call(n,a);return o>=1?(i.event&&i.event.end.call(n,s,t),l()):void 0}function l(){return--u.count?delete u[e]:delete n.__transition__,1}var s=n.__data__,f=i.ease,h=i.delay,g=i.duration,p=Ka,v=[];return p.t=h+o,r>=h?a(r-h):(p.c=a,void 0)},0,o)}}function Oo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Yo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Io(n){return n.toISOString()}function Zo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Bo.bisect(Ol,u);return i==Ol.length?[t.year,Zi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Ol[i-1]<Ol[i]/u?i-1:i]:[Zl,Zi(n,e)[2]]}return r.invert=function(t){return Vo(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Vo)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Vo(+e+1),t).length}var i=r.domain(),o=Di(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(ji(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Vo(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Vo(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Di(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Vo(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Zo(n.copy(),t,e)},Yi(r,n)}function Vo(n){return new Date(n)}function Xo(n){return JSON.parse(n.responseText)}function $o(n){var t=Go.createRange();return t.selectNode(Go.body),t.createContextualFragment(n.responseText)}var Bo={version:"3.4.13"};Date.now||(Date.now=function(){return+new Date});var Wo=[].slice,Jo=function(n){return Wo.call(n)},Go=document,Ko=Go.documentElement,Qo=window;try{Jo(Ko.childNodes)[0].nodeType}catch(na){Jo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{Go.createElement("div").style.setProperty("opacity",0,"")}catch(ta){var ea=Qo.Element.prototype,ra=ea.setAttribute,ua=ea.setAttributeNS,ia=Qo.CSSStyleDeclaration.prototype,oa=ia.setProperty;ea.setAttribute=function(n,t){ra.call(this,n,t+"")},ea.setAttributeNS=function(n,t,e){ua.call(this,n,t,e+"")},ia.setProperty=function(n,t,e){oa.call(this,n,t+"",e)}}Bo.ascending=n,Bo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Bo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},Bo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},Bo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Bo.sum=function(n,t){var r,u=0,i=n.length,o=-1;if(1===arguments.length)for(;++o<i;)e(r=+n[o])&&(u+=r);else for(;++o<i;)e(r=+t.call(n,n[o],o))&&(u+=r);return u},Bo.mean=function(n,r){var u,i=0,o=n.length,a=-1,c=o;if(1===arguments.length)for(;++a<o;)e(u=t(n[a]))?i+=u:--c;else for(;++a<o;)e(u=t(r.call(n,n[a],a)))?i+=u:--c;return c?i/c:void 0},Bo.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},Bo.median=function(r,u){var i,o=[],a=r.length,c=-1;if(1===arguments.length)for(;++c<a;)e(i=t(r[c]))&&o.push(i);else for(;++c<a;)e(i=t(u.call(r,r[c],c)))&&o.push(i);return o.length?Bo.quantile(o.sort(n),.5):void 0};var aa=r(n);Bo.bisectLeft=aa.left,Bo.bisect=Bo.bisectRight=aa.
|
|||
|
var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return x=M=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),Bo.geo.centroid=function(n){dc=mc=yc=xc=Mc=_c=bc=wc=Sc=kc=Ec=0,Bo.geo.stream(n,Ac);var t=Sc,e=kc,r=Ec,u=t*t+e*e+r*r;return za>u&&(t=_c,e=bc,r=wc,Na>mc&&(t=yc,e=xc,r=Mc),u=t*t+e*e+r*r,za>u)?[0/0,0/0]:[Math.atan2(e,t)*Ta,nt(r/Math.sqrt(u))*Ta]};var dc,mc,yc,xc,Mc,_c,bc,wc,Sc,kc,Ec,Ac={sphere:y,point:be,lineStart:Se,lineEnd:ke,polygonStart:function(){Ac.lineStart=Ee},polygonEnd:function(){Ac.lineStart=Se}},Cc=Le(Ae,De,Ue,[-Ea,-Ea/2]),Nc=1e9;Bo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Oe(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Bo.geo.conicEqualArea=function(){return Ie(Ze)}).raw=Ze,Bo.geo.albers=function(){return Bo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Bo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Bo.geo.albers(),o=Bo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Bo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Na,f+.12*l+Na],[s-.214*l-Na,f+.234*l-Na]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Na,f+.166*l+Na],[s-.115*l-Na,f+.234*l-Na]]).stream(c).point,n},n.scale(1070)};var zc,Lc,Tc,qc,Rc,Dc,Pc={point:y,lineStart:y,lineEnd:y,polygonStart:function(){Lc=0,Pc.lineStart=Ve},polygonEnd:function(){Pc.lineStart=Pc.lineEnd=Pc.point=y,zc+=ca(Lc/2)}},Uc={point:Xe,lineStart:y,lineEnd:y,polygonStart:y,polygonEnd:y},jc={point:We,lineStart:Je,lineEnd:Ge,polygonStart:function(){jc.lineStart=Ke},polygonEnd:function(){jc.point=We,jc.lineStart=Je,jc.lineEnd=Ge}};Bo.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Bo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return zc=0,Bo.geo.stream(n,u(Pc)),zc},n.centroid=function(n){return yc=xc=Mc=_c=bc=wc=Sc=kc=Ec=0,Bo.geo.stream(n,u(jc)),Ec?[Sc/Ec,kc/Ec]:wc?[_c/wc,bc/wc]:Mc?[yc/Mc,xc/Mc]:[0/0,0/0]},n.bounds=function(n){return Rc=Dc=-(Tc=qc=1/0),Bo.geo.stream(n,u(Uc)),[[Tc,qc],[Rc,Dc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||tr(n):Et,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new $e:new Qe(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointR
|
|||
|
},Bo.scale.quantize=function(){return no(0,1,[0,1])},Bo.scale.threshold=function(){return to([.5],[0,1])},Bo.scale.identity=function(){return eo([0,1])},Bo.svg={},Bo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+_l,a=u.apply(this,arguments)+_l,c=(o>a&&(c=o,o=a,a=c),a-o),l=Ea>c?"0":"1",s=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a);return c>=bl?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*s+","+i*f+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+l+",0 "+n*s+","+n*f+"Z":"M"+i*s+","+i*f+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=ro,e=uo,r=io,u=oo;return n.innerRadius=function(e){return arguments.length?(t=kt(e),n):t},n.outerRadius=function(t){return arguments.length?(e=kt(t),n):e},n.startAngle=function(t){return arguments.length?(r=kt(t),n):r},n.endAngle=function(t){return arguments.length?(u=kt(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+_l;return[Math.cos(i)*n,Math.sin(i)*n]},n};var _l=-Ca,bl=Aa-Na;Bo.svg.line=function(){return ao(Et)};var wl=Bo.map({linear:co,"linear-closed":lo,step:so,"step-before":fo,"step-after":ho,basis:xo,"basis-open":Mo,"basis-closed":_o,bundle:bo,cardinal:vo,"cardinal-open":go,"cardinal-closed":po,monotone:Co});wl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Sl=[0,2/3,1/3,0],kl=[0,1/3,2/3,0],El=[0,1/6,2/3,1/6];Bo.svg.line.radial=function(){var n=ao(No);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},fo.reverse=ho,ho.reverse=fo,Bo.svg.area=function(){return zo(Et)},Bo.svg.area.radial=function(){var n=zo(No);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Bo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+_l,s=l.call(n,u,r)+_l;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Ea)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=mr,o=yr,a=Lo,c=io,l=oo;return n.radius=function(t){return arguments.length?(a=kt(t),n):a},n.source=function(t){return arguments.length?(i=kt(t),n):i},n.target=function(t){return arguments.length?(o=kt(t),n):o},n.startAngle=function(t){return arguments.length?(c=kt(t),n):c},n.endAngle=function(t){return arguments.length?(l=kt(t),n):l},n},Bo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=mr,e=yr,r=To;return n.source=function(e){return arguments.length?(t=kt(e),n):t},n.target=function(t){return arguments.length?(e=kt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Bo.svg.diagonal.radial=function(){var n=Bo.svg.diagonal(),t=To,e=n.projection;return n.projection=function(n){return arguments.length?e(qo(t=n)):t},n},Bo.svg.symbol=function(){function n(n,r){return(Al.get(t.call(this,n,r))||Po)(e.call(this,n,r))}var t=Do,e=Ro;return n.type=function(e){return arguments.length?(t=kt(e),n):t},n.size=function(t){return arguments.length?(e=kt(t),n):e},n};var Al=Bo.map({circle:Po,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Ll)),e=t*Ll;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){
|
|||
|
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.dagreD3=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){/**
|
|||
|
* @license
|
|||
|
* Copyright (c) 2012-2013 Chris Pettitt
|
|||
|
*
|
|||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|||
|
* of this software and associated documentation files (the "Software"), to deal
|
|||
|
* in the Software without restriction, including without limitation the rights
|
|||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|||
|
* copies of the Software, and to permit persons to whom the Software is
|
|||
|
* furnished to do so, subject to the following conditions:
|
|||
|
*
|
|||
|
* The above copyright notice and this permission notice shall be included in
|
|||
|
* all copies or substantial portions of the Software.
|
|||
|
*
|
|||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|||
|
* THE SOFTWARE.
|
|||
|
*/
|
|||
|
module.exports={graphlib:require("./lib/graphlib"),dagre:require("./lib/dagre"),intersect:require("./lib/intersect"),render:require("./lib/render"),util:require("./lib/util"),version:require("./lib/version")}},{"./lib/dagre":8,"./lib/graphlib":9,"./lib/intersect":10,"./lib/render":23,"./lib/util":25,"./lib/version":26}],2:[function(require,module,exports){var util=require("./util");module.exports={"default":normal,normal:normal,vee:vee};function normal(parent,id,edge,type){var marker=parent.append("marker").attr("id",id).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto");var path=marker.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");util.applyStyle(path,edge[type+"Style"])}function vee(parent,id,edge,type){var marker=parent.append("marker").attr("id",id).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto");var path=marker.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");util.applyStyle(path,edge[type+"Style"])}},{"./util":25}],3:[function(require,module,exports){var util=require("./util");module.exports=createClusters;function createClusters(selection,g){var clusters=g.nodes().filter(function(v){return util.isSubgraph(g,v)}),svgClusters=selection.selectAll("g.cluster").data(clusters,function(v){return v});svgClusters.enter().append("g").attr("class","cluster").style("opacity",0).append("rect");util.applyTransition(svgClusters.exit(),g).style("opacity",0).remove();util.applyTransition(svgClusters,g).style("opacity",1);util.applyTransition(svgClusters.selectAll("rect"),g).attr("width",function(v){return g.node(v).width}).attr("height",function(v){return g.node(v).height}).attr("x",function(v){var node=g.node(v);return node.x-node.width/2}).attr("y",function(v){var node=g.node(v);return node.y-node.height/2})}},{"./util":25}],4:[function(require,module,exports){"use strict";var _=require("./lodash"),addLabel=require("./label/add-label"),util=require("./util"),d3=require("./d3");module.exports=createEdgeLabels;function createEdgeLabels(selection,g){var svgEdgeLabels=selection.selectAll("g.edgeLabel").data(g.edges(),function(e){return util.edgeToId(e)}).classed("update",true);svgEdgeLabels.selectAll("*").remove();svgEdgeLabels.enter().append("g").classed("edgeLabel",true).style("opacity",0);svgEdgeLabels.each(function(e){var edge=g.edge(e),label=addLabel(d3.select(this),g.edge(e),0,0).classed("label",true),bbox=label.node().getBBox();if(edge.labelId){label.attr("id",edge.labelId)}if(!_.has(edge,"width")){edge.width=bbox.width}if(!_.has(edge,"height")){edge.height=bbox.height}});util.applyTransition(svgEdgeLabels.exit(),g).style("opacity",0).remove();return svgEdgeLabels}},{"./d3":7,"./label/add-label":18,"./lodash":20,"./util":25}],5:[function(require,module,exports){"use strict";var _=require("./lodash"),intersectNode=require("./intersect/intersect-node"),util=require("./util"),d3=require("./d3");module.exports=createEdgePaths;function createEdgePaths(selection,g,arrows){var svgPaths=selection.selectAll("g.edgePath").data(g.edges(),function(e){return util.edgeToId(e)}).classed("update",true);enter(svgPaths,g);exit(svgPaths,g);util.applyTransition(svgPaths,g).style("opacity",1);svgPaths.selectAll("path.path").each(function(e){var edge=g.edge(e);edge.arrowheadId=_.uniqueId("arrowhead");var domEdge=d3.select(this).attr("marker-end",function(){return"url(#"+edge.arrowheadId+")"}).style("fill","none");util.applyTransition(domEdge,g).attr("d",function(e){return calcPoints(g,e)});if(edge.id){domEdge.attr("id",edge.id)}util.applyStyle(domEdge,edge.style)});svgPaths.selectAll("defs *").remove();svgPaths.selectAll("defs").each(function(e){var edge=g.edge(e),arrowhead=arrows[edge.arrowhead];arrowhead(d3.select(this),edge.arrowheadId,edge,"arrowhead")});return svgPaths}function calcPoints(g,e){var edge=g.edg
|
|||
|
}_.each(g.nodes(),function(v){getExtremes(g.node(v))});_.each(g.edges(),function(e){var edge=g.edge(e);if(_.has(edge,"x")){getExtremes(edge)}});minX-=marginX;minY-=marginY;_.each(g.nodes(),function(v){var node=g.node(v);node.x-=minX;node.y-=minY});_.each(g.edges(),function(e){var edge=g.edge(e);_.each(edge.points,function(p){p.x-=minX;p.y-=minY});if(_.has(edge,"x")){edge.x-=minX}if(_.has(edge,"y")){edge.y-=minY}});graphLabel.width=maxX-minX+marginX;graphLabel.height=maxY-minY+marginY}function assignNodeIntersects(g){_.each(g.edges(),function(e){var edge=g.edge(e),nodeV=g.node(e.v),nodeW=g.node(e.w),p1,p2;if(!edge.points){edge.points=[];p1=nodeW;p2=nodeV}else{p1=edge.points[0];p2=edge.points[edge.points.length-1]}edge.points.unshift(util.intersectRect(nodeV,p1));edge.points.push(util.intersectRect(nodeW,p2))})}function fixupEdgeLabelCoords(g){_.each(g.edges(),function(e){var edge=g.edge(e);if(_.has(edge,"x")){if(edge.labelpos==="l"||edge.labelpos==="r"){edge.width-=edge.labeloffset}switch(edge.labelpos){case"l":edge.x-=edge.width/2+edge.labeloffset;break;case"r":edge.x+=edge.width/2+edge.labeloffset;break}}})}function reversePointsForReversedEdges(g){_.each(g.edges(),function(e){var edge=g.edge(e);if(edge.reversed){edge.points.reverse()}})}function removeBorderNodes(g){_.each(g.nodes(),function(v){if(g.children(v).length){var node=g.node(v),t=g.node(node.borderTop),b=g.node(node.borderBottom),l=g.node(_.last(node.borderLeft)),r=g.node(_.last(node.borderRight));node.width=Math.abs(r.x-l.x);node.height=Math.abs(b.y-t.y);node.x=l.x+node.width/2;node.y=t.y+node.height/2}});_.each(g.nodes(),function(v){if(g.node(v).dummy==="border"){g.removeNode(v)}})}function removeSelfEdges(g){_.each(g.edges(),function(e){if(e.v===e.w){var node=g.node(e.v);if(!node.selfEdges){node.selfEdges=[]}node.selfEdges.push({e:e,label:g.edge(e)});g.removeEdge(e)}})}function insertSelfEdges(g){var layers=util.buildLayerMatrix(g);_.each(layers,function(layer){var orderShift=0;_.each(layer,function(v,i){var node=g.node(v);node.order=i+orderShift;_.each(node.selfEdges,function(selfEdge){util.addDummyNode(g,"selfedge",{width:selfEdge.label.width,height:selfEdge.label.height,rank:node.rank,order:i+ ++orderShift,e:selfEdge.e,label:selfEdge.label},"_se")});delete node.selfEdges})})}function positionSelfEdges(g){_.each(g.nodes(),function(v){var node=g.node(v);if(node.dummy==="selfedge"){var selfNode=g.node(node.e.v),x=selfNode.x+selfNode.width/2,y=selfNode.y,dx=node.x-x,dy=selfNode.height/2;g.setEdge(node.e,node.label);g.removeNode(v);node.label.points=[{x:x+2*dx/3,y:y-dy},{x:x+5*dx/6,y:y-dy},{x:x+dx,y:y},{x:x+5*dx/6,y:y+dy},{x:x+2*dx/3,y:y+dy}];node.label.x=node.x;node.label.y=node.y}})}function selectNumberAttrs(obj,attrs){return _.mapValues(_.pick(obj,attrs),Number)}function canonicalize(attrs){var newAttrs={};_.each(attrs,function(v,k){newAttrs[k.toLowerCase()]=v});return newAttrs}},{"./acyclic":28,"./add-border-segments":29,"./coordinate-system":30,"./graphlib":33,"./lodash":36,"./nesting-graph":37,"./normalize":38,"./order":43,"./parent-dummy-chains":48,"./position":50,"./rank":52,"./util":55}],36:[function(require,module,exports){module.exports=require(20)},{"/Users/cpettitt/projects/dagre-d3/lib/lodash.js":20,lodash:77}],37:[function(require,module,exports){var _=require("./lodash"),util=require("./util");module.exports={run:run,cleanup:cleanup};function run(g){var root=util.addDummyNode(g,"root",{},"_root"),depths=treeDepths(g),height=_.max(depths)-1,nodeSep=2*height+1;g.graph().nestingRoot=root;_.each(g.edges(),function(e){g.edge(e).minlen*=nodeSep});var weight=sumWeights(g)+1;_.each(g.children(),function(child){dfs(g,root,nodeSep,weight,height,depths,child)});g.graph().nodeRankFactor=nodeSep}function dfs(g,root,nodeSep,weight,height,depths,v){var children=g.children(v);if(!children.length){if(v!==root){g.setEdge(root,v,{weight:0,minlen:nodeSep})}return}var top=util.addBorderNode(g,"_bt"),bottom=util.addBorderNode(g,"_bb"),label=g.node(v);g.setParent(top,v);label.borderTop=top;g.setParent(bottom,v);label.borderBottom=bottom;_.each(children,function(c
|
|||
|
}));_.each(g.nodes(),function(v){var node=g.node(v);if(_.has(node,"rank")){node.rank-=min}})}function removeEmptyRanks(g){var offset=_.min(_.map(g.nodes(),function(v){return g.node(v).rank}));var layers=[];_.each(g.nodes(),function(v){var rank=g.node(v).rank-offset;if(!_.has(layers,rank)){layers[rank]=[]}layers[rank].push(v)});var delta=0,nodeRankFactor=g.graph().nodeRankFactor;_.each(layers,function(vs,i){if(_.isUndefined(vs)&&i%nodeRankFactor!==0){--delta}else if(delta){_.each(vs,function(v){g.node(v).rank+=delta})}})}function addBorderNode(g,prefix,rank,order){var node={width:0,height:0};if(arguments.length>=4){node.rank=rank;node.order=order}return addDummyNode(g,"border",node,prefix)}function maxRank(g){return _.max(_.map(g.nodes(),function(v){var rank=g.node(v).rank;if(!_.isUndefined(rank)){return rank}}))}function partition(collection,fn){var result={lhs:[],rhs:[]};_.each(collection,function(value){if(fn(value)){result.lhs.push(value)}else{result.rhs.push(value)}});return result}function time(name,fn){var start=_.now();try{return fn()}finally{console.log(name+" time: "+(_.now()-start)+"ms")}}function notime(name,fn){return fn()}},{"./graphlib":33,"./lodash":36}],56:[function(require,module,exports){module.exports="0.6.1"},{}],57:[function(require,module,exports){var lib=require("./lib");module.exports={Graph:lib.Graph,json:require("./lib/json"),alg:require("./lib/alg"),version:lib.version}},{"./lib":73,"./lib/alg":64,"./lib/json":74}],58:[function(require,module,exports){var _=require("../lodash");module.exports=components;function components(g){var visited={},cmpts=[],cmpt;function dfs(v){if(_.has(visited,v))return;visited[v]=true;cmpt.push(v);_.each(g.successors(v),dfs);_.each(g.predecessors(v),dfs)}_.each(g.nodes(),function(v){cmpt=[];dfs(v);if(cmpt.length){cmpts.push(cmpt)}});return cmpts}},{"../lodash":75}],59:[function(require,module,exports){var _=require("../lodash");module.exports=dfs;function dfs(g,vs,order){if(!_.isArray(vs)){vs=[vs]}var acc=[],visited={};_.each(vs,function(v){if(!g.hasNode(v)){throw new Error("Graph does not have node: "+v)}doDfs(g,v,order==="post",visited,acc)});return acc}function doDfs(g,v,postorder,visited,acc){if(!_.has(visited,v)){visited[v]=true;if(!postorder){acc.push(v)}_.each(g.neighbors(v),function(w){doDfs(g,w,postorder,visited,acc)});if(postorder){acc.push(v)}}}},{"../lodash":75}],60:[function(require,module,exports){var dijkstra=require("./dijkstra"),_=require("../lodash");module.exports=dijkstraAll;function dijkstraAll(g,weightFunc,edgeFunc){return _.transform(g.nodes(),function(acc,v){acc[v]=dijkstra(g,v,weightFunc,edgeFunc)},{})}},{"../lodash":75,"./dijkstra":61}],61:[function(require,module,exports){var _=require("../lodash"),PriorityQueue=require("../data/priority-queue");module.exports=dijkstra;var DEFAULT_WEIGHT_FUNC=_.constant(1);function dijkstra(g,source,weightFn,edgeFn){return runDijkstra(g,String(source),weightFn||DEFAULT_WEIGHT_FUNC,edgeFn||function(v){return g.outEdges(v)})}function runDijkstra(g,source,weightFn,edgeFn){var results={},pq=new PriorityQueue,v,vEntry;var updateNeighbors=function(edge){var w=edge.v!==v?edge.v:edge.w,wEntry=results[w],weight=weightFn(edge),distance=vEntry.distance+weight;if(weight<0){throw new Error("dijkstra does not allow negative edge weights. "+"Bad edge: "+edge+" Weight: "+weight)}if(distance<wEntry.distance){wEntry.distance=distance;wEntry.predecessor=v;pq.decrease(w,distance)}};g.nodes().forEach(function(v){var distance=v===source?0:Number.POSITIVE_INFINITY;results[v]={distance:distance};pq.add(v,distance)});while(pq.size()>0){v=pq.removeMin();vEntry=results[v];if(vEntry.distance===Number.POSITIVE_INFINITY){break}edgeFn(v).forEach(updateNeighbors)}return results}},{"../data/priority-queue":71,"../lodash":75}],62:[function(require,module,exports){var _=require("../lodash"),tarjan=require("./tarjan");module.exports=findCycles;function findCycles(g){return _.filter(tarjan(g),function(cmpt){return cmpt.length>1})}},{"../lodash":75,"./tarjan":69}],63:[function(require,module,exports){var _=require("../lodash");module.exports=f
|
|||
|
}}var initedStack=!stackA;stackA||(stackA=getArray());stackB||(stackB=getArray());var length=stackA.length;while(length--){if(stackA[length]==a){return stackB[length]==b}}var size=0;result=true;stackA.push(a);stackB.push(b);if(isArr){length=a.length;size=b.length;result=size==length;if(result||isWhere){while(size--){var index=length,value=b[size];if(isWhere){while(index--){if(result=baseIsEqual(a[index],value,callback,isWhere,stackA,stackB)){break}}}else if(!(result=baseIsEqual(a[size],value,callback,isWhere,stackA,stackB))){break}}}}else{forIn(b,function(value,key,b){if(hasOwnProperty.call(b,key)){size++;return result=hasOwnProperty.call(a,key)&&baseIsEqual(a[key],value,callback,isWhere,stackA,stackB)}});if(result&&!isWhere){forIn(a,function(value,key,a){if(hasOwnProperty.call(a,key)){return result=--size>-1}})}}stackA.pop();stackB.pop();if(initedStack){releaseArray(stackA);releaseArray(stackB)}return result}function baseMerge(object,source,callback,stackA,stackB){(isArray(source)?forEach:forOwn)(source,function(source,key){var found,isArr,result=source,value=object[key];if(source&&((isArr=isArray(source))||isPlainObject(source))){var stackLength=stackA.length;while(stackLength--){if(found=stackA[stackLength]==source){value=stackB[stackLength];break}}if(!found){var isShallow;if(callback){result=callback(value,source);if(isShallow=typeof result!="undefined"){value=result}}if(!isShallow){value=isArr?isArray(value)?value:[]:isPlainObject(value)?value:{}}stackA.push(source);stackB.push(value);if(!isShallow){baseMerge(value,source,callback,stackA,stackB)}}}else{if(callback){result=callback(value,source);if(typeof result=="undefined"){result=source}}if(typeof result!="undefined"){value=result}}object[key]=value})}function baseRandom(min,max){return min+floor(nativeRandom()*(max-min+1))}function baseUniq(array,isSorted,callback){var index=-1,indexOf=getIndexOf(),length=array?array.length:0,result=[];var isLarge=!isSorted&&length>=largeArraySize&&indexOf===baseIndexOf,seen=callback||isLarge?getArray():result;if(isLarge){var cache=createCache(seen);indexOf=cacheIndexOf;seen=cache}while(++index<length){var value=array[index],computed=callback?callback(value,index,array):value;if(isSorted?!index||seen[seen.length-1]!==computed:indexOf(seen,computed)<0){if(callback||isLarge){seen.push(computed)}result.push(value)}}if(isLarge){releaseArray(seen.array);releaseObject(seen)}else if(callback){releaseArray(seen)}return result}function createAggregator(setter){return function(collection,callback,thisArg){var result={};callback=lodash.createCallback(callback,thisArg,3);var index=-1,length=collection?collection.length:0;if(typeof length=="number"){while(++index<length){var value=collection[index];setter(result,value,callback(value,index,collection),collection)}}else{forOwn(collection,function(value,key,collection){setter(result,value,callback(value,key,collection),collection)})}return result}}function createWrapper(func,bitmask,partialArgs,partialRightArgs,thisArg,arity){var isBind=bitmask&1,isBindKey=bitmask&2,isCurry=bitmask&4,isCurryBound=bitmask&8,isPartial=bitmask&16,isPartialRight=bitmask&32;if(!isBindKey&&!isFunction(func)){throw new TypeError}if(isPartial&&!partialArgs.length){bitmask&=~16;isPartial=partialArgs=false}if(isPartialRight&&!partialRightArgs.length){bitmask&=~32;isPartialRight=partialRightArgs=false}var bindData=func&&func.__bindData__;if(bindData&&bindData!==true){bindData=slice(bindData);if(bindData[2]){bindData[2]=slice(bindData[2])}if(bindData[3]){bindData[3]=slice(bindData[3])}if(isBind&&!(bindData[1]&1)){bindData[4]=thisArg}if(!isBind&&bindData[1]&1){bitmask|=8}if(isCurry&&!(bindData[1]&4)){bindData[5]=arity}if(isPartial){push.apply(bindData[2]||(bindData[2]=[]),partialArgs)}if(isPartialRight){unshift.apply(bindData[3]||(bindData[3]=[]),partialRightArgs)}bindData[1]|=bitmask;return createWrapper.apply(null,bindData)}var creater=bitmask==1||bitmask===17?baseBind:baseCreateWrapper;return creater([func,bitmask,partialArgs,partialRightArgs,thisArg,arity])}function escapeHtmlChar(match){return htmlEscapes[match]}functi
|
|||
|
func=null;return result}}function partial(func){return createWrapper(func,16,slice(arguments,1))}function partialRight(func){return createWrapper(func,32,null,slice(arguments,1))}function throttle(func,wait,options){var leading=true,trailing=true;if(!isFunction(func)){throw new TypeError}if(options===false){leading=false}else if(isObject(options)){leading="leading"in options?options.leading:leading;trailing="trailing"in options?options.trailing:trailing}debounceOptions.leading=leading;debounceOptions.maxWait=wait;debounceOptions.trailing=trailing;return debounce(func,wait,debounceOptions)}function wrap(value,wrapper){return createWrapper(wrapper,16,[value])}function constant(value){return function(){return value}}function createCallback(func,thisArg,argCount){var type=typeof func;if(func==null||type=="function"){return baseCreateCallback(func,thisArg,argCount)}if(type!="object"){return property(func)}var props=keys(func),key=props[0],a=func[key];if(props.length==1&&a===a&&!isObject(a)){return function(object){var b=object[key];return a===b&&(a!==0||1/a==1/b)}}return function(object){var length=props.length,result=false;while(length--){if(!(result=baseIsEqual(object[props[length]],func[props[length]],null,true))){break}}return result}}function escape(string){return string==null?"":String(string).replace(reUnescapedHtml,escapeHtmlChar)}function identity(value){return value}function mixin(object,source,options){var chain=true,methodNames=source&&functions(source);if(!source||!options&&!methodNames.length){if(options==null){options=source}ctor=lodashWrapper;source=object;object=lodash;methodNames=functions(source)}if(options===false){chain=false}else if(isObject(options)&&"chain"in options){chain=options.chain}var ctor=object,isFunc=isFunction(ctor);forEach(methodNames,function(methodName){var func=object[methodName]=source[methodName];if(isFunc){ctor.prototype[methodName]=function(){var chainAll=this.__chain__,value=this.__wrapped__,args=[value];push.apply(args,arguments);var result=func.apply(object,args);if(chain||chainAll){if(value===result&&isObject(result)){return this}result=new ctor(result);result.__chain__=chainAll}return result}}})}function noConflict(){context._=oldDash;return this}function noop(){}var now=isNative(now=Date.now)&&now||function(){return(new Date).getTime()};var parseInt=nativeParseInt(whitespace+"08")==8?nativeParseInt:function(value,radix){return nativeParseInt(isString(value)?value.replace(reLeadingSpacesAndZeros,""):value,radix||0)};function property(key){return function(object){return object[key]}}function random(min,max,floating){var noMin=min==null,noMax=max==null;if(floating==null){if(typeof min=="boolean"&&noMax){floating=min;min=1}else if(!noMax&&typeof max=="boolean"){floating=max;noMax=true}}if(noMin&&noMax){max=1}min=+min||0;if(noMax){max=min;min=0}else{max=+max||0}if(floating||min%1||max%1){var rand=nativeRandom();return nativeMin(min+rand*(max-min+parseFloat("1e-"+((rand+"").length-1))),max)}return baseRandom(min,max)}function result(object,key){if(object){var value=object[key];return isFunction(value)?object[key]():value}}function template(text,data,options){var settings=lodash.templateSettings;text=String(text||"");options=defaults({},options,settings);var imports=defaults({},options.imports,settings.imports),importsKeys=keys(imports),importsValues=values(imports);var isEvaluating,index=0,interpolate=options.interpolate||reNoMatch,source="__p += '";var reDelimiters=RegExp((options.escape||reNoMatch).source+"|"+interpolate.source+"|"+(interpolate===reInterpolate?reEsTemplate:reNoMatch).source+"|"+(options.evaluate||reNoMatch).source+"|$","g");text.replace(reDelimiters,function(match,escapeValue,interpolateValue,esTemplateValue,evaluateValue,offset){interpolateValue||(interpolateValue=esTemplateValue);source+=text.slice(index,offset).replace(reUnescapedString,escapeStringChar);if(escapeValue){source+="' +\n__e("+escapeValue+") +\n'"}if(evaluateValue){isEvaluating=true;source+="';\n"+evaluateValue+";\n__p += '"}if(interpolateValue){source+="' +\n((__t = ("+interpolateValue+")) == null
|
|||
|
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
|||
|
|
|||
|
},{}],2:[function(require,module,exports){
|
|||
|
(function (process){
|
|||
|
// Copyright Joyent, Inc. and other Node contributors.
|
|||
|
//
|
|||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|||
|
// copy of this software and associated documentation files (the
|
|||
|
// "Software"), to deal in the Software without restriction, including
|
|||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|||
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|||
|
// persons to whom the Software is furnished to do so, subject to the
|
|||
|
// following conditions:
|
|||
|
//
|
|||
|
// The above copyright notice and this permission notice shall be included
|
|||
|
// in all copies or substantial portions of the Software.
|
|||
|
//
|
|||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|||
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|||
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|||
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
|
|||
|
// resolves . and .. elements in a path array with directory names there
|
|||
|
// must be no slashes, empty elements, or device names (c:\) in the array
|
|||
|
// (so also no leading and trailing slashes - it does not distinguish
|
|||
|
// relative and absolute paths)
|
|||
|
function normalizeArray(parts, allowAboveRoot) {
|
|||
|
// if the path tries to go above the root, `up` ends up > 0
|
|||
|
var up = 0;
|
|||
|
for (var i = parts.length - 1; i >= 0; i--) {
|
|||
|
var last = parts[i];
|
|||
|
if (last === '.') {
|
|||
|
parts.splice(i, 1);
|
|||
|
} else if (last === '..') {
|
|||
|
parts.splice(i, 1);
|
|||
|
up++;
|
|||
|
} else if (up) {
|
|||
|
parts.splice(i, 1);
|
|||
|
up--;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// if the path is allowed to go above the root, restore leading ..s
|
|||
|
if (allowAboveRoot) {
|
|||
|
for (; up--; up) {
|
|||
|
parts.unshift('..');
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return parts;
|
|||
|
}
|
|||
|
|
|||
|
// Split a filename into [root, dir, basename, ext], unix version
|
|||
|
// 'root' is just a slash, or nothing.
|
|||
|
var splitPathRe =
|
|||
|
/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
|
|||
|
var splitPath = function(filename) {
|
|||
|
return splitPathRe.exec(filename).slice(1);
|
|||
|
};
|
|||
|
|
|||
|
// path.resolve([from ...], to)
|
|||
|
// posix version
|
|||
|
exports.resolve = function() {
|
|||
|
var resolvedPath = '',
|
|||
|
resolvedAbsolute = false;
|
|||
|
|
|||
|
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
|||
|
var path = (i >= 0) ? arguments[i] : process.cwd();
|
|||
|
|
|||
|
// Skip empty and invalid entries
|
|||
|
if (typeof path !== 'string') {
|
|||
|
throw new TypeError('Arguments to path.resolve must be strings');
|
|||
|
} else if (!path) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
resolvedPath = path + '/' + resolvedPath;
|
|||
|
resolvedAbsolute = path.charAt(0) === '/';
|
|||
|
}
|
|||
|
|
|||
|
// At this point the path should be resolved to a full absolute path, but
|
|||
|
// handle relative paths to be safe (might happen when process.cwd() fails)
|
|||
|
|
|||
|
// Normalize the path
|
|||
|
resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
|
|||
|
return !!p;
|
|||
|
}), !resolvedAbsolute).join('/');
|
|||
|
|
|||
|
return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
|
|||
|
};
|
|||
|
|
|||
|
// path.normalize(path)
|
|||
|
// posix version
|
|||
|
exports.normalize = function(path) {
|
|||
|
var isAbsolute = exports.isAbsolute(path),
|
|||
|
trailingSlash = substr(path, -1) === '/';
|
|||
|
|
|||
|
// Normalize the path
|
|||
|
path = normalizeArray(filter(path.split('/'), function(p) {
|
|||
|
return !!p;
|
|||
|
}), !isAbsolute).join('/');
|
|||
|
|
|||
|
if (!path && !isAbsolute) {
|
|||
|
path = '.';
|
|||
|
}
|
|||
|
if (path && trailingSlash) {
|
|||
|
path += '/';
|
|||
|
}
|
|||
|
|
|||
|
return (isAbsolute ? '/' : '') + path;
|
|||
|
};
|
|||
|
|
|||
|
// posix version
|
|||
|
exports.isAbsolute = function(path) {
|
|||
|
return path.charAt(0) === '/';
|
|||
|
};
|
|||
|
|
|||
|
// posix version
|
|||
|
exports.join = function() {
|
|||
|
var paths = Array.prototype.slice.call(arguments, 0);
|
|||
|
return exports.normalize(filter(paths, function(p, index) {
|
|||
|
if (typeof p !== 'string') {
|
|||
|
throw new TypeError('Arguments to path.join must be strings');
|
|||
|
}
|
|||
|
return p;
|
|||
|
}).join('/'));
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
// path.relative(from, to)
|
|||
|
// posix version
|
|||
|
exports.relative = function(from, to) {
|
|||
|
from = exports.resolve(from).substr(1);
|
|||
|
to = exports.resolve(to).substr(1);
|
|||
|
|
|||
|
function trim(arr) {
|
|||
|
var start = 0;
|
|||
|
for (; start < arr.length; start++) {
|
|||
|
if (arr[start] !== '') break;
|
|||
|
}
|
|||
|
|
|||
|
var end = arr.length - 1;
|
|||
|
for (; end >= 0; end--) {
|
|||
|
if (arr[end] !== '') break;
|
|||
|
}
|
|||
|
|
|||
|
if (start > end) return [];
|
|||
|
return arr.slice(start, end - start + 1);
|
|||
|
}
|
|||
|
|
|||
|
var fromParts = trim(from.split('/'));
|
|||
|
var toParts = trim(to.split('/'));
|
|||
|
|
|||
|
var length = Math.min(fromParts.length, toParts.length);
|
|||
|
var samePartsLength = length;
|
|||
|
for (var i = 0; i < length; i++) {
|
|||
|
if (fromParts[i] !== toParts[i]) {
|
|||
|
samePartsLength = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
var outputParts = [];
|
|||
|
for (var i = samePartsLength; i < fromParts.length; i++) {
|
|||
|
outputParts.push('..');
|
|||
|
}
|
|||
|
|
|||
|
outputParts = outputParts.concat(toParts.slice(samePartsLength));
|
|||
|
|
|||
|
return outputParts.join('/');
|
|||
|
};
|
|||
|
|
|||
|
exports.sep = '/';
|
|||
|
exports.delimiter = ':';
|
|||
|
|
|||
|
exports.dirname = function(path) {
|
|||
|
var result = splitPath(path),
|
|||
|
root = result[0],
|
|||
|
dir = result[1];
|
|||
|
|
|||
|
if (!root && !dir) {
|
|||
|
// No dirname whatsoever
|
|||
|
return '.';
|
|||
|
}
|
|||
|
|
|||
|
if (dir) {
|
|||
|
// It has a dirname, strip trailing slash
|
|||
|
dir = dir.substr(0, dir.length - 1);
|
|||
|
}
|
|||
|
|
|||
|
return root + dir;
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
exports.basename = function(path, ext) {
|
|||
|
var f = splitPath(path)[2];
|
|||
|
// TODO: make this comparison case-insensitive on windows?
|
|||
|
if (ext && f.substr(-1 * ext.length) === ext) {
|
|||
|
f = f.substr(0, f.length - ext.length);
|
|||
|
}
|
|||
|
return f;
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
exports.extname = function(path) {
|
|||
|
return splitPath(path)[3];
|
|||
|
};
|
|||
|
|
|||
|
function filter (xs, f) {
|
|||
|
if (xs.filter) return xs.filter(f);
|
|||
|
var res = [];
|
|||
|
for (var i = 0; i < xs.length; i++) {
|
|||
|
if (f(xs[i], i, xs)) res.push(xs[i]);
|
|||
|
}
|
|||
|
return res;
|
|||
|
}
|
|||
|
|
|||
|
// String.prototype.substr - negative index don't work in IE8
|
|||
|
var substr = 'ab'.substr(-1) === 'b'
|
|||
|
? function (str, start, len) { return str.substr(start, len) }
|
|||
|
: function (str, start, len) {
|
|||
|
if (start < 0) start = str.length + start;
|
|||
|
return str.substr(start, len);
|
|||
|
}
|
|||
|
;
|
|||
|
|
|||
|
}).call(this,require("1YiZ5S"))
|
|||
|
},{"1YiZ5S":3}],3:[function(require,module,exports){
|
|||
|
// shim for using process in browser
|
|||
|
|
|||
|
var process = module.exports = {};
|
|||
|
|
|||
|
process.nextTick = (function () {
|
|||
|
var canSetImmediate = typeof window !== 'undefined'
|
|||
|
&& window.setImmediate;
|
|||
|
var canPost = typeof window !== 'undefined'
|
|||
|
&& window.postMessage && window.addEventListener
|
|||
|
;
|
|||
|
|
|||
|
if (canSetImmediate) {
|
|||
|
return function (f) { return window.setImmediate(f) };
|
|||
|
}
|
|||
|
|
|||
|
if (canPost) {
|
|||
|
var queue = [];
|
|||
|
window.addEventListener('message', function (ev) {
|
|||
|
var source = ev.source;
|
|||
|
if ((source === window || source === null) && ev.data === 'process-tick') {
|
|||
|
ev.stopPropagation();
|
|||
|
if (queue.length > 0) {
|
|||
|
var fn = queue.shift();
|
|||
|
fn();
|
|||
|
}
|
|||
|
}
|
|||
|
}, true);
|
|||
|
|
|||
|
return function nextTick(fn) {
|
|||
|
queue.push(fn);
|
|||
|
window.postMessage('process-tick', '*');
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return function nextTick(fn) {
|
|||
|
setTimeout(fn, 0);
|
|||
|
};
|
|||
|
})();
|
|||
|
|
|||
|
process.title = 'browser';
|
|||
|
process.browser = true;
|
|||
|
process.env = {};
|
|||
|
process.argv = [];
|
|||
|
|
|||
|
function noop() {}
|
|||
|
|
|||
|
process.on = noop;
|
|||
|
process.addListener = noop;
|
|||
|
process.once = noop;
|
|||
|
process.off = noop;
|
|||
|
process.removeListener = noop;
|
|||
|
process.removeAllListeners = noop;
|
|||
|
process.emit = noop;
|
|||
|
|
|||
|
process.binding = function (name) {
|
|||
|
throw new Error('process.binding is not supported');
|
|||
|
}
|
|||
|
|
|||
|
// TODO(shtylman)
|
|||
|
process.cwd = function () { return '/' };
|
|||
|
process.chdir = function (dir) {
|
|||
|
throw new Error('process.chdir is not supported');
|
|||
|
};
|
|||
|
|
|||
|
},{}],4:[function(require,module,exports){
|
|||
|
(function (global){
|
|||
|
/*! http://mths.be/he v0.5.0 by @mathias | MIT license */
|
|||
|
;(function(root) {
|
|||
|
|
|||
|
// Detect free variables `exports`.
|
|||
|
var freeExports = typeof exports == 'object' && exports;
|
|||
|
|
|||
|
// Detect free variable `module`.
|
|||
|
var freeModule = typeof module == 'object' && module &&
|
|||
|
module.exports == freeExports && module;
|
|||
|
|
|||
|
// Detect free variable `global`, from Node.js or Browserified code,
|
|||
|
// and use it as `root`.
|
|||
|
var freeGlobal = typeof global == 'object' && global;
|
|||
|
if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
|
|||
|
root = freeGlobal;
|
|||
|
}
|
|||
|
|
|||
|
/*--------------------------------------------------------------------------*/
|
|||
|
|
|||
|
// All astral symbols.
|
|||
|
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
|||
|
// All ASCII symbols (not just printable ASCII) except those listed in the
|
|||
|
// first column of the overrides table.
|
|||
|
// http://whatwg.org/html/tokenization.html#table-charref-overrides
|
|||
|
var regexAsciiWhitelist = /[\x01-\x7F]/g;
|
|||
|
// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
|
|||
|
// code points listed in the first column of the overrides table on
|
|||
|
// http://whatwg.org/html/tokenization.html#table-charref-overrides.
|
|||
|
var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;
|
|||
|
|
|||
|
var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
|
|||
|
var encodeMap = {'\xC1':'Aacute','\xE1':'aacute','\u0102':'Abreve','\u0103':'abreve','\u223E':'ac','\u223F':'acd','\u223E\u0333':'acE','\xC2':'Acirc','\xE2':'acirc','\xB4':'acute','\u0410':'Acy','\u0430':'acy','\xC6':'AElig','\xE6':'aelig','\u2061':'af','\uD835\uDD04':'Afr','\uD835\uDD1E':'afr','\xC0':'Agrave','\xE0':'agrave','\u2135':'aleph','\u0391':'Alpha','\u03B1':'alpha','\u0100':'Amacr','\u0101':'amacr','\u2A3F':'amalg','&':'amp','\u2A55':'andand','\u2A53':'And','\u2227':'and','\u2A5C':'andd','\u2A58':'andslope','\u2A5A':'andv','\u2220':'ang','\u29A4':'ange','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u2221':'angmsd','\u221F':'angrt','\u22BE':'angrtvb','\u299D':'angrtvbd','\u2222':'angsph','\xC5':'angst','\u237C':'angzarr','\u0104':'Aogon','\u0105':'aogon','\uD835\uDD38':'Aopf','\uD835\uDD52':'aopf','\u2A6F':'apacir','\u2248':'ap','\u2A70':'apE','\u224A':'ape','\u224B':'apid','\'':'apos','\xE5':'aring','\uD835\uDC9C':'Ascr','\uD835\uDCB6':'ascr','\u2254':'colone','*':'ast','\u224D':'CupCap','\xC3':'Atilde','\xE3':'atilde','\xC4':'Auml','\xE4':'auml','\u2233':'awconint','\u2A11':'awint','\u224C':'bcong','\u03F6':'bepsi','\u2035':'bprime','\u223D':'bsim','\u22CD':'bsime','\u2216':'setmn','\u2AE7':'Barv','\u22BD':'barvee','\u2305':'barwed','\u2306':'Barwed','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u0411':'Bcy','\u0431':'bcy','\u201E':'bdquo','\u2235':'becaus','\u29B0':'bemptyv','\u212C':'Bscr','\u0392':'Beta','\u03B2':'beta','\u2136':'beth','\u226C':'twixt','\uD835\uDD05':'Bfr','\uD835\uDD1F':'bfr','\u22C2':'xcap','\u25EF':'xcirc','\u22C3':'xcup','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A06':'xsqcup','\u2605':'starf','\u25BD':'xdtri','\u25B3':'xutri','\u2A04':'xuplus','\u22C1':'Vee','\u22C0':'Wedge','\u290D':'rbarr','\u29EB':'lozf','\u25AA':'squf','\u25B4':'utrif','\u25BE':'dtrif','\u25C2':'ltrif','\u25B8':'rtrif','\u2423':'blank','\u2592':'blk12','\u2591':'blk14','\u2593':'blk34','\u2588':'block','=\u20E5':'bne','\u2261\u20E5':'bnequiv','\u2AED':'bNot','\u2310':'bnot','\uD835\uDD39':'Bopf','\uD835\uDD53':'bopf','\u22A5':'bot','\u22C8':'bowtie','\u29C9':'boxbox','\u2510':'boxdl','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u250C':'boxdr','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2500':'boxh','\u2550':'boxH','\u252C':'boxhd','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2534':'boxhu','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u229F':'minusb','\u229E':'plusb','\u22A0':'timesb','\u2518':'boxul','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u2514':'boxur','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u2502':'boxv','\u2551':'boxV','\u253C':'boxvh','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2524':'boxvl','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u251C':'boxvr','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u02D8':'breve','\xA6':'brvbar','\uD835\uDCB7':'bscr','\u204F':'bsemi','\u29C5':'bsolb','\\':'bsol','\u27C8':'bsolhsub','\u2022':'bull','\u224E':'bump','\u2AAE':'bumpE','\u224F':'bumpe','\u0106':'Cacute','\u0107':'cacute','\u2A44':'capand','\u2A49':'capbrcup','\u2A4B':'capcap','\u2229':'cap','\u22D2':'Cap','\u2A47':'capcup','\u2A40':'capdot','\u2145':'DD','\u2229\uFE00':'caps','\u2041':'caret','\u02C7':'caron','\u212D':'Cfr','\u2A4D':'ccaps','\u010C':'Ccaron','\u010D':'ccaron','\xC7':'Ccedil','\xE7':'ccedil','\u0108':'Ccirc','\u0109':'ccirc','\u2230':'Cconint','\u2A4C':'ccups','\u2A50':'ccupssm','\u010A':'Cdot','\u010B':'cdot','\xB8':'cedil','\u29B2':'cemptyv','\xA2':'cent','\xB7':'middot','\uD835\uDD20':'cfr','\u0427':'CHcy','\u0447':'chcy','\u2713':'check','\u03A7':'Chi','\u03C7':'chi','\u02C6':'circ','\u2257':'cire','\u21BA':'olarr','\u21BB':'orarr','\u229B':'oast','\u229A':'ocir','\u229D':'odash','\u2299':'odot','\xAE':'reg','\u24C8':'oS','\u2296':'ominus','\u2295':'oplus','\u2297':'otimes','\u25CB':'cir','\u29C3':'cirE','\u2A10':'cirfnint','\u2AEF':'cirmid','\u29C2':'cirscir','\u2232':'cwconint','\u201D':'rdq
|
|||
|
|
|||
|
var regexEscape = /["&'<>`]/g;
|
|||
|
var escapeMap = {
|
|||
|
'"': '"',
|
|||
|
'&': '&',
|
|||
|
'\'': ''',
|
|||
|
'<': '<',
|
|||
|
// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
|
|||
|
// following is not strictly necessary unless it’s part of a tag or an
|
|||
|
// unquoted attribute value. We’re only escaping it to support those
|
|||
|
// situations, and for XML support.
|
|||
|
'>': '>',
|
|||
|
// In Internet Explorer ≤ 8, the backtick character can be used
|
|||
|
// to break out of (un)quoted attribute values or HTML comments.
|
|||
|
// See http://html5sec.org/#102, http://html5sec.org/#108, and
|
|||
|
// http://html5sec.org/#133.
|
|||
|
'`': '`'
|
|||
|
};
|
|||
|
|
|||
|
var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
|
|||
|
var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
|
|||
|
var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egrave|egrave|ugrave|frac12|frac14|frac34|Ugrave|Oacute|Iacute|ntilde|Ntilde|uacute|middot|Igrave|igrave|iquest|aacute|laquo|THORN|micro|iexcl|icirc|Icirc|Acirc|ucirc|ecirc|Ocirc|ocirc|Ecirc|Ucirc|aring|Aring|aelig|AElig|acute|pound|raquo|acirc|times|thorn|szlig|cedil|COPY|Auml|ordf|ordm|uuml|macr|Uuml|auml|Ouml|ouml|para|nbsp|Euml|quot|QUOT|euml|yuml|cent|sect|copy|sup1|sup2|sup3|Iuml|iuml|shy|eth|reg|not|yen|amp|AMP|REG|uml|ETH|deg|gt|GT|LT|lt)([=a-zA-Z0-9])?/g;
|
|||
|
var decodeMap = {'Aacute':'\xC1','aacute':'\xE1','Abreve':'\u0102','abreve':'\u0103','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','Acy':'\u0410','acy':'\u0430','AElig':'\xC6','aelig':'\xE6','af':'\u2061','Afr':'\uD835\uDD04','afr':'\uD835\uDD1E','Agrave':'\xC0','agrave':'\xE0','alefsym':'\u2135','aleph':'\u2135','Alpha':'\u0391','alpha':'\u03B1','Amacr':'\u0100','amacr':'\u0101','amalg':'\u2A3F','amp':'&','AMP':'&','andand':'\u2A55','And':'\u2A53','and':'\u2227','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angmsd':'\u2221','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','Aogon':'\u0104','aogon':'\u0105','Aopf':'\uD835\uDD38','aopf':'\uD835\uDD52','apacir':'\u2A6F','ap':'\u2248','apE':'\u2A70','ape':'\u224A','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','Aring':'\xC5','aring':'\xE5','Ascr':'\uD835\uDC9C','ascr':'\uD835\uDCB6','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','Bcy':'\u0411','bcy':'\u0431','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','Beta':'\u0392','beta':'\u03B2','beth':'\u2136','between':'\u226C','Bfr':'\uD835\uDD05','bfr':'\uD835\uDD1F','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bNot':'\u2AED','bnot':'\u2310','Bopf':'\uD835\uDD39','bopf':'\uD835\uDD53','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxHd':'\u2564','boxhD':'\u2565','boxHD':'\u2566','boxhu':'\u2534','boxHu':'\u2567','boxhU':'\u2568','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsolb':'\u29C5','bsol':'\\','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpE':'\u2AAE','bumpe':'\u224F','Bumpeq':'\u224E','bumpeq':'\u224F','Cacute':'\u0106','cacute':'\u0107','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','cap':'\u2229','Cap':'\u22D2','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','Ccaron':'\u010C','ccaron':'\u010D','Ccedil':'\xC7','ccedil':'\xE7','Ccirc':'\u0108','ccirc':'\u0109','Cconint':'\
|
|||
|
var decodeMapLegacy = {'Aacute':'\xC1','aacute':'\xE1','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','AElig':'\xC6','aelig':'\xE6','Agrave':'\xC0','agrave':'\xE0','amp':'&','AMP':'&','Aring':'\xC5','aring':'\xE5','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','brvbar':'\xA6','Ccedil':'\xC7','ccedil':'\xE7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','Eacute':'\xC9','eacute':'\xE9','Ecirc':'\xCA','ecirc':'\xEA','Egrave':'\xC8','egrave':'\xE8','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','Iacute':'\xCD','iacute':'\xED','Icirc':'\xCE','icirc':'\xEE','iexcl':'\xA1','Igrave':'\xCC','igrave':'\xEC','iquest':'\xBF','Iuml':'\xCF','iuml':'\xEF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','Ntilde':'\xD1','ntilde':'\xF1','Oacute':'\xD3','oacute':'\xF3','Ocirc':'\xD4','ocirc':'\xF4','Ograve':'\xD2','ograve':'\xF2','ordf':'\xAA','ordm':'\xBA','Oslash':'\xD8','oslash':'\xF8','Otilde':'\xD5','otilde':'\xF5','Ouml':'\xD6','ouml':'\xF6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','THORN':'\xDE','thorn':'\xFE','times':'\xD7','Uacute':'\xDA','uacute':'\xFA','Ucirc':'\xDB','ucirc':'\xFB','Ugrave':'\xD9','ugrave':'\xF9','uml':'\xA8','Uuml':'\xDC','uuml':'\xFC','Yacute':'\xDD','yacute':'\xFD','yen':'\xA5','yuml':'\xFF'};
|
|||
|
var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
|
|||
|
var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];
|
|||
|
|
|||
|
/*--------------------------------------------------------------------------*/
|
|||
|
|
|||
|
var stringFromCharCode = String.fromCharCode;
|
|||
|
|
|||
|
var object = {};
|
|||
|
var hasOwnProperty = object.hasOwnProperty;
|
|||
|
var has = function(object, propertyName) {
|
|||
|
return hasOwnProperty.call(object, propertyName);
|
|||
|
};
|
|||
|
|
|||
|
var contains = function(array, value) {
|
|||
|
var index = -1;
|
|||
|
var length = array.length;
|
|||
|
while (++index < length) {
|
|||
|
if (array[index] == value) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
return false;
|
|||
|
};
|
|||
|
|
|||
|
var merge = function(options, defaults) {
|
|||
|
if (!options) {
|
|||
|
return defaults;
|
|||
|
}
|
|||
|
var result = {};
|
|||
|
var key;
|
|||
|
for (key in defaults) {
|
|||
|
// A `hasOwnProperty` check is not needed here, since only recognized
|
|||
|
// option names are used anyway. Any others are ignored.
|
|||
|
result[key] = has(options, key) ? options[key] : defaults[key];
|
|||
|
}
|
|||
|
return result;
|
|||
|
};
|
|||
|
|
|||
|
// Modified version of `ucs2encode`; see http://mths.be/punycode.
|
|||
|
var codePointToSymbol = function(codePoint, strict) {
|
|||
|
var output = '';
|
|||
|
if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
|
|||
|
// See issue #4:
|
|||
|
// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
|
|||
|
// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
|
|||
|
// REPLACEMENT CHARACTER.”
|
|||
|
if (strict) {
|
|||
|
parseError('character reference outside the permissible Unicode range');
|
|||
|
}
|
|||
|
return '\uFFFD';
|
|||
|
}
|
|||
|
if (has(decodeMapNumeric, codePoint)) {
|
|||
|
if (strict) {
|
|||
|
parseError('disallowed character reference');
|
|||
|
}
|
|||
|
return decodeMapNumeric[codePoint];
|
|||
|
}
|
|||
|
if (strict && contains(invalidReferenceCodePoints, codePoint)) {
|
|||
|
parseError('disallowed character reference');
|
|||
|
}
|
|||
|
if (codePoint > 0xFFFF) {
|
|||
|
codePoint -= 0x10000;
|
|||
|
output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
|
|||
|
codePoint = 0xDC00 | codePoint & 0x3FF;
|
|||
|
}
|
|||
|
output += stringFromCharCode(codePoint);
|
|||
|
return output;
|
|||
|
};
|
|||
|
|
|||
|
var hexEscape = function(symbol) {
|
|||
|
return '&#x' + symbol.charCodeAt(0).toString(16).toUpperCase() + ';';
|
|||
|
};
|
|||
|
|
|||
|
var parseError = function(message) {
|
|||
|
throw Error('Parse error: ' + message);
|
|||
|
};
|
|||
|
|
|||
|
/*--------------------------------------------------------------------------*/
|
|||
|
|
|||
|
var encode = function(string, options) {
|
|||
|
options = merge(options, encode.options);
|
|||
|
var strict = options.strict;
|
|||
|
if (strict && regexInvalidRawCodePoint.test(string)) {
|
|||
|
parseError('forbidden code point');
|
|||
|
}
|
|||
|
var encodeEverything = options.encodeEverything;
|
|||
|
var useNamedReferences = options.useNamedReferences;
|
|||
|
var allowUnsafeSymbols = options.allowUnsafeSymbols;
|
|||
|
if (encodeEverything) {
|
|||
|
// Encode ASCII symbols.
|
|||
|
string = string.replace(regexAsciiWhitelist, function(symbol) {
|
|||
|
// Use named references if requested & possible.
|
|||
|
if (useNamedReferences && has(encodeMap, symbol)) {
|
|||
|
return '&' + encodeMap[symbol] + ';';
|
|||
|
}
|
|||
|
return hexEscape(symbol);
|
|||
|
});
|
|||
|
// Shorten a few escapes that represent two symbols, of which at least one
|
|||
|
// is within the ASCII range.
|
|||
|
if (useNamedReferences) {
|
|||
|
string = string
|
|||
|
.replace(/>\u20D2/g, '>⃒')
|
|||
|
.replace(/<\u20D2/g, '<⃒')
|
|||
|
.replace(/fj/g, 'fj');
|
|||
|
}
|
|||
|
// Encode non-ASCII symbols.
|
|||
|
if (useNamedReferences) {
|
|||
|
// Encode non-ASCII symbols that can be replaced with a named reference.
|
|||
|
string = string.replace(regexEncodeNonAscii, function(string) {
|
|||
|
// Note: there is no need to check `has(encodeMap, string)` here.
|
|||
|
return '&' + encodeMap[string] + ';';
|
|||
|
});
|
|||
|
}
|
|||
|
// Note: any remaining non-ASCII symbols are handled outside of the `if`.
|
|||
|
} else if (useNamedReferences) {
|
|||
|
// Apply named character references.
|
|||
|
// Encode `<>"'&` using named character references.
|
|||
|
if (!allowUnsafeSymbols) {
|
|||
|
string = string.replace(regexEscape, function(string) {
|
|||
|
return '&' + encodeMap[string] + ';'; // no need to check `has()` here
|
|||
|
});
|
|||
|
}
|
|||
|
// Shorten escapes that represent two symbols, of which at least one is
|
|||
|
// `<>"'&`.
|
|||
|
string = string
|
|||
|
.replace(/>\u20D2/g, '>⃒')
|
|||
|
.replace(/<\u20D2/g, '<⃒');
|
|||
|
// Encode non-ASCII symbols that can be replaced with a named reference.
|
|||
|
string = string.replace(regexEncodeNonAscii, function(string) {
|
|||
|
// Note: there is no need to check `has(encodeMap, string)` here.
|
|||
|
return '&' + encodeMap[string] + ';';
|
|||
|
});
|
|||
|
} else if (!allowUnsafeSymbols) {
|
|||
|
// Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
|
|||
|
// using named character references.
|
|||
|
string = string.replace(regexEscape, hexEscape);
|
|||
|
}
|
|||
|
return string
|
|||
|
// Encode astral symbols.
|
|||
|
.replace(regexAstralSymbols, function($0) {
|
|||
|
// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
|||
|
var high = $0.charCodeAt(0);
|
|||
|
var low = $0.charCodeAt(1);
|
|||
|
var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
|
|||
|
return '&#x' + codePoint.toString(16).toUpperCase() + ';';
|
|||
|
})
|
|||
|
// Encode any remaining BMP symbols that are not printable ASCII symbols
|
|||
|
// using a hexadecimal escape.
|
|||
|
.replace(regexBmpWhitelist, hexEscape);
|
|||
|
};
|
|||
|
// Expose default options (so they can be overridden globally).
|
|||
|
encode.options = {
|
|||
|
'allowUnsafeSymbols': false,
|
|||
|
'encodeEverything': false,
|
|||
|
'strict': false,
|
|||
|
'useNamedReferences': false
|
|||
|
};
|
|||
|
|
|||
|
var decode = function(html, options) {
|
|||
|
options = merge(options, decode.options);
|
|||
|
var strict = options.strict;
|
|||
|
if (strict && regexInvalidEntity.test(html)) {
|
|||
|
parseError('malformed character reference');
|
|||
|
}
|
|||
|
return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) {
|
|||
|
var codePoint;
|
|||
|
var semicolon;
|
|||
|
var hexDigits;
|
|||
|
var reference;
|
|||
|
var next;
|
|||
|
if ($1) {
|
|||
|
// Decode decimal escapes, e.g. `𝌆`.
|
|||
|
codePoint = $1;
|
|||
|
semicolon = $2;
|
|||
|
if (strict && !semicolon) {
|
|||
|
parseError('character reference was not terminated by a semicolon');
|
|||
|
}
|
|||
|
return codePointToSymbol(codePoint, strict);
|
|||
|
}
|
|||
|
if ($3) {
|
|||
|
// Decode hexadecimal escapes, e.g. `𝌆`.
|
|||
|
hexDigits = $3;
|
|||
|
semicolon = $4;
|
|||
|
if (strict && !semicolon) {
|
|||
|
parseError('character reference was not terminated by a semicolon');
|
|||
|
}
|
|||
|
codePoint = parseInt(hexDigits, 16);
|
|||
|
return codePointToSymbol(codePoint, strict);
|
|||
|
}
|
|||
|
if ($5) {
|
|||
|
// Decode named character references with trailing `;`, e.g. `©`.
|
|||
|
reference = $5;
|
|||
|
if (has(decodeMap, reference)) {
|
|||
|
return decodeMap[reference];
|
|||
|
} else {
|
|||
|
// Ambiguous ampersand; see http://mths.be/notes/ambiguous-ampersands.
|
|||
|
if (strict) {
|
|||
|
parseError(
|
|||
|
'named character reference was not terminated by a semicolon'
|
|||
|
);
|
|||
|
}
|
|||
|
return $0;
|
|||
|
}
|
|||
|
}
|
|||
|
// If we’re still here, it’s a legacy reference for sure. No need for an
|
|||
|
// extra `if` check.
|
|||
|
// Decode named character references without trailing `;`, e.g. `&`
|
|||
|
// This is only a parse error if it gets converted to `&`, or if it is
|
|||
|
// followed by `=` in an attribute context.
|
|||
|
reference = $6;
|
|||
|
next = $7;
|
|||
|
if (next && options.isAttributeValue) {
|
|||
|
if (strict && next == '=') {
|
|||
|
parseError('`&` did not start a character reference');
|
|||
|
}
|
|||
|
return $0;
|
|||
|
} else {
|
|||
|
if (strict) {
|
|||
|
parseError(
|
|||
|
'named character reference was not terminated by a semicolon'
|
|||
|
);
|
|||
|
}
|
|||
|
// Note: there is no need to check `has(decodeMapLegacy, reference)`.
|
|||
|
return decodeMapLegacy[reference] + (next || '');
|
|||
|
}
|
|||
|
});
|
|||
|
};
|
|||
|
// Expose default options (so they can be overridden globally).
|
|||
|
decode.options = {
|
|||
|
'isAttributeValue': false,
|
|||
|
'strict': false
|
|||
|
};
|
|||
|
|
|||
|
var escape = function(string) {
|
|||
|
return string.replace(regexEscape, function($0) {
|
|||
|
// Note: there is no need to check `has(escapeMap, $0)` here.
|
|||
|
return escapeMap[$0];
|
|||
|
});
|
|||
|
};
|
|||
|
|
|||
|
/*--------------------------------------------------------------------------*/
|
|||
|
|
|||
|
var he = {
|
|||
|
'version': '0.5.0',
|
|||
|
'encode': encode,
|
|||
|
'decode': decode,
|
|||
|
'escape': escape,
|
|||
|
'unescape': decode
|
|||
|
};
|
|||
|
|
|||
|
// Some AMD build optimizers, like r.js, check for specific condition patterns
|
|||
|
// like the following:
|
|||
|
if (
|
|||
|
typeof define == 'function' &&
|
|||
|
typeof define.amd == 'object' &&
|
|||
|
define.amd
|
|||
|
) {
|
|||
|
define(function() {
|
|||
|
return he;
|
|||
|
});
|
|||
|
} else if (freeExports && !freeExports.nodeType) {
|
|||
|
if (freeModule) { // in Node.js or RingoJS v0.8.0+
|
|||
|
freeModule.exports = he;
|
|||
|
} else { // in Narwhal or RingoJS v0.7.0-
|
|||
|
for (var key in he) {
|
|||
|
has(he, key) && (freeExports[key] = he[key]);
|
|||
|
}
|
|||
|
}
|
|||
|
} else { // in Rhino or a web browser
|
|||
|
root.he = he;
|
|||
|
}
|
|||
|
|
|||
|
}(this));
|
|||
|
|
|||
|
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
|||
|
},{}],5:[function(require,module,exports){
|
|||
|
(function (global){
|
|||
|
var graph = require('./graphDb');
|
|||
|
var flow = require('./parser/flow');
|
|||
|
var utils = require('./utils');
|
|||
|
var seq = require('./sequenceRenderer');
|
|||
|
var he = require('he');
|
|||
|
|
|||
|
/**
|
|||
|
* Function that adds the vertices found in the graph definition to the graph to be rendered.
|
|||
|
* @param vert Object containing the vertices.
|
|||
|
* @param g The graph that is to be drawn.
|
|||
|
*/
|
|||
|
var addVertices = function (vert, g) {
|
|||
|
var keys = Object.keys(vert);
|
|||
|
|
|||
|
var styleFromStyleArr = function(styleStr,arr){
|
|||
|
var i;
|
|||
|
// Create a compound style definition from the style definitions found for the node in the graph definition
|
|||
|
for (i = 0; i < arr.length; i++) {
|
|||
|
if (typeof arr[i] !== 'undefined') {
|
|||
|
styleStr = styleStr + arr[i] + ';';
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return styleStr;
|
|||
|
};
|
|||
|
|
|||
|
// Iterate through each item in the vertice object (containing all the vertices found) in the graph definition
|
|||
|
keys.forEach(function (id) {
|
|||
|
var vertice = vert[id];
|
|||
|
var verticeText;
|
|||
|
|
|||
|
var i;
|
|||
|
|
|||
|
var style = '';
|
|||
|
var classes = graph.getClasses();
|
|||
|
// Check if class is defined for the node
|
|||
|
|
|||
|
if(vertice.classes.length >0){
|
|||
|
for (i = 0; i < vertice.classes.length; i++) {
|
|||
|
style = styleFromStyleArr(style,classes[vertice.classes[i]].styles);
|
|||
|
}
|
|||
|
}
|
|||
|
else{
|
|||
|
// Use default classes
|
|||
|
style = styleFromStyleArr(style,classes.default.styles);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// Create a compound style definition from the style definitions found for the node in the graph definition
|
|||
|
style = styleFromStyleArr(style, vertice.styles);
|
|||
|
|
|||
|
// Use vertice id as text in the box if no text is provided by the graph definition
|
|||
|
if (typeof vertice.text === 'undefined') {
|
|||
|
verticeText = vertice.id;
|
|||
|
}
|
|||
|
else {
|
|||
|
verticeText = vertice.text;
|
|||
|
}
|
|||
|
|
|||
|
var radious = 0;
|
|||
|
var _shape = '';
|
|||
|
|
|||
|
// Set the shape based parameters
|
|||
|
switch(vertice.type){
|
|||
|
case 'round':
|
|||
|
radious = 5;
|
|||
|
_shape = 'rect';
|
|||
|
break;
|
|||
|
case 'square':
|
|||
|
_shape = 'rect';
|
|||
|
break;
|
|||
|
case 'diamond':
|
|||
|
_shape = 'question';
|
|||
|
break;
|
|||
|
case 'odd':
|
|||
|
_shape = 'rect_left_inv_arrow';
|
|||
|
break;
|
|||
|
case 'circle':
|
|||
|
_shape = 'circle';
|
|||
|
break;
|
|||
|
default:
|
|||
|
_shape = 'rect';
|
|||
|
}
|
|||
|
// Add the node
|
|||
|
g.setNode(vertice.id, {labelType: "html",shape:_shape, label: verticeText, rx: radious, ry: radious, style: style, id:vertice.id});
|
|||
|
});
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Add edges to graph based on parsed graph defninition
|
|||
|
* @param edges
|
|||
|
* @param g
|
|||
|
*/
|
|||
|
var addEdges = function (edges, g) {
|
|||
|
var cnt=0;
|
|||
|
var aHead;
|
|||
|
edges.forEach(function (edge) {
|
|||
|
cnt++;
|
|||
|
|
|||
|
// Set link type for rendering
|
|||
|
if(edge.type === 'arrow_open'){
|
|||
|
aHead = 'none';
|
|||
|
}
|
|||
|
else{
|
|||
|
aHead = 'vee';
|
|||
|
}
|
|||
|
|
|||
|
var style = '';
|
|||
|
if(typeof edge.style !== 'undefined'){
|
|||
|
edge.style.forEach(function(s){
|
|||
|
style = style + s +';';
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
// Add the edge to the graph
|
|||
|
if (typeof edge.text === 'undefined') {
|
|||
|
if(typeof edge.style === 'undefined'){
|
|||
|
g.setEdge(edge.start, edge.end,{ style: "stroke: #333; stroke-width: 1.5px;fill:none", arrowheadStyle: "fill: #333", arrowhead: aHead},cnt);
|
|||
|
}else{
|
|||
|
g.setEdge(edge.start, edge.end, {
|
|||
|
style: style, arrowheadStyle: "fill: #333", arrowhead: aHead
|
|||
|
},cnt);
|
|||
|
}
|
|||
|
}
|
|||
|
// Edge with text
|
|||
|
else {
|
|||
|
|
|||
|
if(typeof edge.style === 'undefined'){
|
|||
|
g.setEdge(edge.start, edge.end,{labelType: "html",style: "stroke: #333; stroke-width: 1.5px;fill:none", labelpos:'c', label: '<span style="background:#e8e8e8">'+edge.text+'</span>', arrowheadStyle: "fill: #333", arrowhead: aHead},cnt);
|
|||
|
}else{
|
|||
|
g.setEdge(edge.start, edge.end, {
|
|||
|
labelType: "html",style: style, arrowheadStyle: "fill: #333", label: edge.text, arrowhead: aHead
|
|||
|
},cnt);
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Draws a flowchart in the tag with id: id based on the graph definition in text.
|
|||
|
* @param text
|
|||
|
* @param id
|
|||
|
*/
|
|||
|
var draw = function (text, id) {
|
|||
|
graph.clear();
|
|||
|
flow.parser.yy = graph;
|
|||
|
|
|||
|
// Parse the graph definition
|
|||
|
flow.parser.parse(text);
|
|||
|
|
|||
|
// Fetch the default direction, use TD if none was found
|
|||
|
var dir;
|
|||
|
dir = graph.getDirection();
|
|||
|
if(typeof dir === 'undefined'){
|
|||
|
dir='TD';
|
|||
|
}
|
|||
|
|
|||
|
// Create the input mermaid.graph
|
|||
|
var g = new dagreD3.graphlib.Graph({multigraph:true})
|
|||
|
.setGraph({
|
|||
|
rankdir: dir,
|
|||
|
marginx: 20,
|
|||
|
marginy: 20
|
|||
|
|
|||
|
})
|
|||
|
.setDefaultEdgeLabel(function () {
|
|||
|
return {};
|
|||
|
});
|
|||
|
|
|||
|
// Fetch the verices/nodes and edges/links from the parsed graph definition
|
|||
|
var vert = graph.getVertices();
|
|||
|
var edges = graph.getEdges();
|
|||
|
var classes = graph.getClasses();
|
|||
|
|
|||
|
if(typeof classes.default === 'undefined'){
|
|||
|
classes.default = {id:'default'};
|
|||
|
classes.default.styles = ['fill:#eaeaea','stroke:#666','stroke-width:1.5px'];
|
|||
|
}
|
|||
|
addVertices(vert, g);
|
|||
|
addEdges(edges, g);
|
|||
|
|
|||
|
// Create the renderer
|
|||
|
var render = new dagreD3.render();
|
|||
|
|
|||
|
// Add custom shape for rhombus type of boc (decision)
|
|||
|
render.shapes().question = function (parent, bbox, node) {
|
|||
|
var w = bbox.width,
|
|||
|
h = bbox.height,
|
|||
|
s = (w + h) * 0.8,
|
|||
|
points = [
|
|||
|
{x: s / 2, y: 0},
|
|||
|
{x: s, y: -s / 2},
|
|||
|
{x: s / 2, y: -s},
|
|||
|
{x: 0, y: -s / 2}
|
|||
|
];
|
|||
|
shapeSvg = parent.insert("polygon", ":first-child")
|
|||
|
.attr("points", points.map(function (d) {
|
|||
|
return d.x + "," + d.y;
|
|||
|
}).join(" "))
|
|||
|
.style("fill", "#fff")
|
|||
|
.style("stroke", "#333")
|
|||
|
.attr("rx", 5)
|
|||
|
.attr("ry", 5)
|
|||
|
.attr("transform", "translate(" + (-s / 2) + "," + (s * 2 / 4) + ")");
|
|||
|
node.intersect = function (point) {
|
|||
|
return dagreD3.intersect.polygon(node, points, point);
|
|||
|
};
|
|||
|
return shapeSvg;
|
|||
|
};
|
|||
|
|
|||
|
// Add custom shape for box with inverted arrow on left side
|
|||
|
render.shapes().rect_left_inv_arrow = function (parent, bbox, node) {
|
|||
|
var w = bbox.width,
|
|||
|
h = bbox.height,
|
|||
|
points = [
|
|||
|
{x: -h/2, y: 0},
|
|||
|
{x: w, y: 0},
|
|||
|
{x: w, y: -h},
|
|||
|
{x: -h/2, y: -h},
|
|||
|
{x: 0, y: -h/2},
|
|||
|
];
|
|||
|
shapeSvg = parent.insert("polygon", ":first-child")
|
|||
|
.attr("points", points.map(function (d) {
|
|||
|
return d.x + "," + d.y;
|
|||
|
}).join(" "))
|
|||
|
.style("fill", "#fff")
|
|||
|
.style("stroke", "#333")
|
|||
|
.attr("transform", "translate(" + (-w / 2) + "," + (h * 2 / 4) + ")");
|
|||
|
node.intersect = function (point) {
|
|||
|
return dagreD3.intersect.polygon(node, points, point);
|
|||
|
};
|
|||
|
return shapeSvg;
|
|||
|
};
|
|||
|
|
|||
|
// Add our custom arrow - an empty arrowhead
|
|||
|
render.arrows().none = function normal(parent, id, edge, type) {
|
|||
|
var marker = parent.append("marker")
|
|||
|
.attr("id", id)
|
|||
|
.attr("viewBox", "0 0 10 10")
|
|||
|
.attr("refX", 9)
|
|||
|
.attr("refY", 5)
|
|||
|
.attr("markerUnits", "strokeWidth")
|
|||
|
.attr("markerWidth", 8)
|
|||
|
.attr("markerHeight", 6)
|
|||
|
.attr("orient", "auto");
|
|||
|
|
|||
|
var path = marker.append("path")
|
|||
|
.attr("d", "M 0 0 L 0 0 L 0 0 z");
|
|||
|
dagreD3.util.applyStyle(path, edge[type + "Style"]);
|
|||
|
};
|
|||
|
|
|||
|
// Set up an SVG group so that we can translate the final graph.
|
|||
|
var svg = d3.select("#" + id);
|
|||
|
svgGroup = d3.select("#" + id + " g");
|
|||
|
|
|||
|
// Run the renderer. This is what draws the final graph.
|
|||
|
render(d3.select("#" + id + " g"), g);
|
|||
|
|
|||
|
// Center the graph
|
|||
|
var xCenterOffset = (svg.attr("width") - g.graph().width) / 2;
|
|||
|
//svgGroup.attr("transform", "translate(" + xCenterOffset + ", 20)");
|
|||
|
svg.attr("height", g.graph().height + 40);
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Go through the document and find the chart definitions in there and render the charts
|
|||
|
*/
|
|||
|
var init = function () {
|
|||
|
var arr = document.querySelectorAll('.mermaid');
|
|||
|
|
|||
|
var cnt = 0;
|
|||
|
for (i = 0; i < arr.length; i++) {
|
|||
|
var element = arr[i];
|
|||
|
var id;
|
|||
|
|
|||
|
id = 'mermaidChart' + cnt;
|
|||
|
cnt++;
|
|||
|
|
|||
|
var txt = element.innerHTML;
|
|||
|
txt = txt.replace(/>/g,'>');
|
|||
|
txt = txt.replace(/</g,'<');
|
|||
|
txt = he.decode(txt).trim();
|
|||
|
|
|||
|
element.innerHTML = '<svg id="' + id + '" width="100%">' +
|
|||
|
'<g />' +
|
|||
|
'</svg>';
|
|||
|
|
|||
|
if(utils.detectType(txt) === 'graph'){
|
|||
|
draw(txt, id);
|
|||
|
graph.bindFunctions();
|
|||
|
}
|
|||
|
else{
|
|||
|
seq.draw(txt,id);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
exports.tester = function(){};
|
|||
|
|
|||
|
/**
|
|||
|
* Version management
|
|||
|
* @returns {string}
|
|||
|
*/
|
|||
|
exports.version = function(){
|
|||
|
return '0.2.8';
|
|||
|
};
|
|||
|
|
|||
|
var equals = function (val, variable){
|
|||
|
if(typeof variable === 'undefined'){
|
|||
|
return false;
|
|||
|
}
|
|||
|
else{
|
|||
|
return (val === variable);
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Wait for coument loaded before starting the execution
|
|||
|
*/
|
|||
|
document.addEventListener('DOMContentLoaded', function(){
|
|||
|
// Check presence of config object
|
|||
|
if(typeof mermaid_config !== 'undefined'){
|
|||
|
// Check if property startOnLoad is set
|
|||
|
if(equals(true,mermaid_config.startOnLoad)){
|
|||
|
init();
|
|||
|
}
|
|||
|
}
|
|||
|
else{
|
|||
|
// No config found, do autostart in this simple case
|
|||
|
init();
|
|||
|
}
|
|||
|
}, false);
|
|||
|
|
|||
|
global.mermaid = {
|
|||
|
init:function(){
|
|||
|
init();
|
|||
|
},
|
|||
|
version:function(){
|
|||
|
return exports.version();
|
|||
|
}
|
|||
|
};
|
|||
|
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
|||
|
},{"./graphDb":6,"./parser/flow":7,"./sequenceRenderer":10,"./utils":11,"he":4}],6:[function(require,module,exports){
|
|||
|
/**
|
|||
|
* Created by knut on 14-11-03.
|
|||
|
*/
|
|||
|
|
|||
|
var vertices = {};
|
|||
|
var edges = [];
|
|||
|
var classes = [];
|
|||
|
var direction;
|
|||
|
// Functions to be run after graph rendering
|
|||
|
var funs = [];
|
|||
|
/**
|
|||
|
* Function called by parser when a node definition has been found
|
|||
|
* @param id
|
|||
|
* @param text
|
|||
|
* @param type
|
|||
|
* @param style
|
|||
|
*/
|
|||
|
exports.addVertex = function (id, text, type, style) {
|
|||
|
//console.log('Got node ' + id + ' ' + type + ' ' + text + ' styles: ' + JSON.stringify(style));
|
|||
|
if (typeof vertices[id] === 'undefined') {
|
|||
|
vertices[id] = {id: id, styles: [], classes:[]};
|
|||
|
}
|
|||
|
if (typeof text !== 'undefined') {
|
|||
|
vertices[id].text = text;
|
|||
|
}
|
|||
|
if (typeof type !== 'undefined') {
|
|||
|
vertices[id].type = type;
|
|||
|
}
|
|||
|
if (typeof type !== 'undefined') {
|
|||
|
vertices[id].type = type;
|
|||
|
}
|
|||
|
if (typeof style !== 'undefined') {
|
|||
|
if (style !== null) {
|
|||
|
style.forEach(function (s) {
|
|||
|
vertices[id].styles.push(s);
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
/**
|
|||
|
* Function called by parser when a link/edge definition has been found
|
|||
|
* @param start
|
|||
|
* @param end
|
|||
|
* @param type
|
|||
|
* @param linktext
|
|||
|
*/
|
|||
|
exports.addLink = function (start, end, type, linktext) {
|
|||
|
var edge = {start: start, end: end, type: undefined, text: ''};
|
|||
|
var linktext = type.text;
|
|||
|
if (typeof linktext !== 'undefined') {
|
|||
|
edge.text = linktext;
|
|||
|
}
|
|||
|
|
|||
|
if (typeof type !== 'undefined') {
|
|||
|
edge.type = type.type;
|
|||
|
}
|
|||
|
edges.push(edge);
|
|||
|
};
|
|||
|
/**
|
|||
|
* Updates a link with a style
|
|||
|
* @param pos
|
|||
|
* @param style
|
|||
|
*/
|
|||
|
exports.updateLink = function (pos, style) {
|
|||
|
var position = pos.substr(1);
|
|||
|
edges[pos].style = style;
|
|||
|
};
|
|||
|
|
|||
|
exports.addClass = function (id, style) {
|
|||
|
if (typeof classes[id] === 'undefined') {
|
|||
|
classes[id] = {id: id, styles: []};
|
|||
|
}
|
|||
|
|
|||
|
if (typeof style !== 'undefined') {
|
|||
|
if (style !== null) {
|
|||
|
style.forEach(function (s) {
|
|||
|
classes[id].styles.push(s);
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Called by parser when a graph definition is found, stores the direction of the chart.
|
|||
|
* @param dir
|
|||
|
*/
|
|||
|
exports.setDirection = function (dir) {
|
|||
|
direction = dir;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Called by parser when a graph definition is found, stores the direction of the chart.
|
|||
|
* @param dir
|
|||
|
*/
|
|||
|
exports.setClass = function (id,className) {
|
|||
|
if(id.indexOf(',')>0){
|
|||
|
id.split(',').forEach(function(id2){
|
|||
|
if(typeof vertices[id2] !== 'undefined'){
|
|||
|
vertices[id2].classes.push(className);
|
|||
|
}
|
|||
|
});
|
|||
|
}else{
|
|||
|
if(typeof vertices[id] !== 'undefined'){
|
|||
|
vertices[id].classes.push(className);
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
/**
|
|||
|
* Called by parser when a graph definition is found, stores the direction of the chart.
|
|||
|
* @param dir
|
|||
|
*/
|
|||
|
exports.setClickEvent = function (id,functionName) {
|
|||
|
|
|||
|
|
|||
|
if(id.indexOf(',')>0){
|
|||
|
id.split(',').forEach(function(id2) {
|
|||
|
if (typeof vertices[id2] !== 'undefined') {
|
|||
|
funs.push(function () {
|
|||
|
var elem = document.getElementById(id2);
|
|||
|
if (elem !== null) {
|
|||
|
elem.onclick = function () {
|
|||
|
eval(functionName + '(\'' + id2 + '\')');
|
|||
|
};
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
}else{
|
|||
|
//console.log('Checking now for ::'+id);
|
|||
|
if(typeof vertices[id] !== 'undefined'){
|
|||
|
funs.push(function(){
|
|||
|
var elem = document.getElementById(id);
|
|||
|
if(elem !== null){
|
|||
|
//console.log('id was NOT null: '+id);
|
|||
|
elem.onclick = function(){eval(functionName+'(\'' + id + '\')');};
|
|||
|
}
|
|||
|
else{
|
|||
|
//console.log('id was null: '+id);
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
exports.bindFunctions = function(){
|
|||
|
//setTimeout(function(){
|
|||
|
funs.forEach(function(fun){
|
|||
|
fun();
|
|||
|
});
|
|||
|
//},1000);
|
|||
|
|
|||
|
};
|
|||
|
exports.getDirection = function () {
|
|||
|
return direction;
|
|||
|
};
|
|||
|
/**
|
|||
|
* Retrieval function for fetching the found nodes after parsing has completed.
|
|||
|
* @returns {{}|*|vertices}
|
|||
|
*/
|
|||
|
exports.getVertices = function () {
|
|||
|
return vertices;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Retrieval function for fetching the found links after parsing has completed.
|
|||
|
* @returns {{}|*|edges}
|
|||
|
*/
|
|||
|
exports.getEdges = function () {
|
|||
|
return edges;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Retrieval function for fetching the found class definitions after parsing has completed.
|
|||
|
* @returns {{}|*|classes}
|
|||
|
*/
|
|||
|
exports.getClasses = function () {
|
|||
|
return classes;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Clears the internal graph db so that a new graph can be parsed.
|
|||
|
*/
|
|||
|
exports.clear = function () {
|
|||
|
vertices = {};
|
|||
|
classes = {};
|
|||
|
edges = [];
|
|||
|
funs = [];
|
|||
|
};
|
|||
|
/**
|
|||
|
*
|
|||
|
* @returns {string}
|
|||
|
*/
|
|||
|
exports.defaultStyle = function () {
|
|||
|
return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;";
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
},{}],7:[function(require,module,exports){
|
|||
|
(function (process){
|
|||
|
/* parser generated by jison 0.4.15 */
|
|||
|
/*
|
|||
|
Returns a Parser object of the following structure:
|
|||
|
|
|||
|
Parser: {
|
|||
|
yy: {}
|
|||
|
}
|
|||
|
|
|||
|
Parser.prototype: {
|
|||
|
yy: {},
|
|||
|
trace: function(),
|
|||
|
symbols_: {associative list: name ==> number},
|
|||
|
terminals_: {associative list: number ==> name},
|
|||
|
productions_: [...],
|
|||
|
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),
|
|||
|
table: [...],
|
|||
|
defaultActions: {...},
|
|||
|
parseError: function(str, hash),
|
|||
|
parse: function(input),
|
|||
|
|
|||
|
lexer: {
|
|||
|
EOF: 1,
|
|||
|
parseError: function(str, hash),
|
|||
|
setInput: function(input),
|
|||
|
input: function(),
|
|||
|
unput: function(str),
|
|||
|
more: function(),
|
|||
|
less: function(n),
|
|||
|
pastInput: function(),
|
|||
|
upcomingInput: function(),
|
|||
|
showPosition: function(),
|
|||
|
test_match: function(regex_match_array, rule_index),
|
|||
|
next: function(),
|
|||
|
lex: function(),
|
|||
|
begin: function(condition),
|
|||
|
popState: function(),
|
|||
|
_currentRules: function(),
|
|||
|
topState: function(),
|
|||
|
pushState: function(condition),
|
|||
|
|
|||
|
options: {
|
|||
|
ranges: boolean (optional: true ==> token location info will include a .range[] member)
|
|||
|
flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)
|
|||
|
backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)
|
|||
|
},
|
|||
|
|
|||
|
performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),
|
|||
|
rules: [...],
|
|||
|
conditions: {associative list: name ==> set},
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
token location info (@$, _$, etc.): {
|
|||
|
first_line: n,
|
|||
|
last_line: n,
|
|||
|
first_column: n,
|
|||
|
last_column: n,
|
|||
|
range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
the parseError function receives a 'hash' object with these members for lexer and parser errors: {
|
|||
|
text: (matched text)
|
|||
|
token: (the produced terminal token, if any)
|
|||
|
line: (yylineno)
|
|||
|
}
|
|||
|
while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {
|
|||
|
loc: (yylloc)
|
|||
|
expected: (string describing the set of expected tokens)
|
|||
|
recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)
|
|||
|
}
|
|||
|
*/
|
|||
|
var parser = (function(){
|
|||
|
var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,7],$V1=[1,23],$V2=[1,24],$V3=[1,25],$V4=[1,26],$V5=[1,27],$V6=[1,28],$V7=[1,29],$V8=[1,30],$V9=[1,31],$Va=[1,17],$Vb=[1,18],$Vc=[1,19],$Vd=[1,15],$Ve=[1,16],$Vf=[34,35,36,37,38,39,40,41,42,54,56,57,58,60],$Vg=[11,45,46,47,48],$Vh=[9,11,22,25,27,29,30,45,46,47,48],$Vi=[9,11,22,25,27,29,30,34,35,36,37,38,39,40,41,42,45,46,47,48],$Vj=[9,11,22,25,27,29,30,33,34,35,36,37,38,39,40,41,42,45,46,47,48],$Vk=[6,9],$Vl=[34,35,36,37,38,39,40,41,42],$Vm=[34,35,36,37,38,39,40,41,42,49],$Vn=[1,86],$Vo=[1,84],$Vp=[1,83],$Vq=[1,87],$Vr=[1,75],$Vs=[1,76],$Vt=[1,77],$Vu=[1,78],$Vv=[1,79],$Vw=[1,80],$Vx=[1,81],$Vy=[1,82],$Vz=[1,85],$VA=[9,24,26,28,29,30,33,34,35,36,37,38,39,40,41,42,49],$VB=[2,56],$VC=[1,118],$VD=[1,115],$VE=[1,113],$VF=[1,116],$VG=[1,114],$VH=[1,121],$VI=[1,120],$VJ=[1,119],$VK=[1,117],$VL=[2,21],$VM=[1,128],$VN=[11,37],$VO=[9,11,33,34,35,36,37,41,42,59,63];
|
|||
|
var parser = {trace: function trace() { },
|
|||
|
yy: {},
|
|||
|
symbols_: {"error":2,"expressions":3,"graphConfig":4,"statements":5,"EOF":6,"spaceList":7,"GRAPH":8,"SPACE":9,"DIR":10,"SEMI":11,"statement":12,"verticeStatement":13,"styleStatement":14,"linkStyleStatement":15,"classDefStatement":16,"classStatement":17,"clickStatement":18,"vertex":19,"link":20,"alphaNum":21,"SQS":22,"text":23,"SQE":24,"PS":25,"PE":26,"DIAMOND_START":27,"DIAMOND_STOP":28,"TAGEND":29,"TAGSTART":30,"alphaNumStatement":31,"alphaNumToken":32,"MINUS":33,"ALPHA":34,"NUM":35,"COLON":36,"COMMA":37,"PLUS":38,"EQUALS":39,"MULT":40,"DOT":41,"BRKT":42,"linkStatement":43,"arrowText":44,"ARROW_POINT":45,"ARROW_CIRCLE":46,"ARROW_CROSS":47,"ARROW_OPEN":48,"PIPE":49,"textToken":50,"textStatement":51,"textNoTags":52,"textNoTagsToken":53,"CLASSDEF":54,"stylesOpt":55,"CLASS":56,"CLICK":57,"STYLE":58,"HEX":59,"LINKSTYLE":60,"style":61,"styleComponent":62,"UNIT":63,"$accept":0,"$end":1},
|
|||
|
terminals_: {2:"error",6:"EOF",8:"GRAPH",9:"SPACE",10:"DIR",11:"SEMI",22:"SQS",24:"SQE",25:"PS",26:"PE",27:"DIAMOND_START",28:"DIAMOND_STOP",29:"TAGEND",30:"TAGSTART",33:"MINUS",34:"ALPHA",35:"NUM",36:"COLON",37:"COMMA",38:"PLUS",39:"EQUALS",40:"MULT",41:"DOT",42:"BRKT",45:"ARROW_POINT",46:"ARROW_CIRCLE",47:"ARROW_CROSS",48:"ARROW_OPEN",49:"PIPE",54:"CLASSDEF",56:"CLASS",57:"CLICK",58:"STYLE",59:"HEX",60:"LINKSTYLE",63:"UNIT"},
|
|||
|
productions_: [0,[3,3],[3,4],[4,4],[5,3],[5,1],[7,2],[7,1],[12,2],[12,2],[12,2],[12,2],[12,2],[12,2],[13,3],[13,1],[19,4],[19,6],[19,4],[19,4],[19,4],[19,4],[19,1],[21,1],[21,2],[31,1],[31,3],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[20,2],[20,1],[43,1],[43,1],[43,1],[43,1],[44,3],[23,1],[23,2],[51,1],[51,2],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[52,1],[52,2],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[16,5],[17,5],[18,5],[14,5],[14,5],[15,5],[55,1],[55,3],[61,1],[61,2],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1]],
|
|||
|
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
|
|||
|
/* this == yyval */
|
|||
|
|
|||
|
var $0 = $$.length - 1;
|
|||
|
switch (yystate) {
|
|||
|
case 2:
|
|||
|
this.$=$$[$0-3];
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
yy.setDirection($$[$0-1]);this.$ = $$[$0-1];
|
|||
|
break;
|
|||
|
case 14:
|
|||
|
yy.addLink($$[$0-2],$$[$0],$$[$0-1]);this.$ = 'oy'
|
|||
|
break;
|
|||
|
case 15:
|
|||
|
this.$ = 'yo';
|
|||
|
break;
|
|||
|
case 16:
|
|||
|
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square');
|
|||
|
break;
|
|||
|
case 17:
|
|||
|
this.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'circle');
|
|||
|
break;
|
|||
|
case 18:
|
|||
|
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round');
|
|||
|
break;
|
|||
|
case 19: case 21:
|
|||
|
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond');
|
|||
|
break;
|
|||
|
case 20:
|
|||
|
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'odd');
|
|||
|
break;
|
|||
|
case 22:
|
|||
|
this.$ = $$[$0];yy.addVertex($$[$0]);
|
|||
|
break;
|
|||
|
case 23: case 25: case 27: case 28: case 43: case 47: case 48: case 60: case 62: case 63: case 81:
|
|||
|
this.$=$$[$0];
|
|||
|
break;
|
|||
|
case 24: case 44: case 61:
|
|||
|
this.$=$$[$0-1]+''+$$[$0];
|
|||
|
break;
|
|||
|
case 26:
|
|||
|
this.$=$$[$0-2]+'-'+$$[$0];
|
|||
|
break;
|
|||
|
case 29: case 30: case 31: case 32: case 33: case 34: case 37: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 58: case 59: case 64: case 65: case 66: case 67: case 68: case 69: case 71: case 72:
|
|||
|
this.$ = $$[$0];
|
|||
|
break;
|
|||
|
case 35: case 57: case 70:
|
|||
|
this.$ = '<br>';
|
|||
|
break;
|
|||
|
case 36:
|
|||
|
$$[$0-1].text = $$[$0];this.$ = $$[$0-1];
|
|||
|
break;
|
|||
|
case 38:
|
|||
|
this.$ = {"type":"arrow"};
|
|||
|
break;
|
|||
|
case 39:
|
|||
|
this.$ = {"type":"arrow_circle"};
|
|||
|
break;
|
|||
|
case 40:
|
|||
|
this.$ = {"type":"arrow_cross"};
|
|||
|
break;
|
|||
|
case 41:
|
|||
|
this.$ = {"type":"arrow_open"};
|
|||
|
break;
|
|||
|
case 42:
|
|||
|
this.$ = $$[$0-1];
|
|||
|
break;
|
|||
|
case 73:
|
|||
|
this.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);
|
|||
|
break;
|
|||
|
case 74:
|
|||
|
this.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]);
|
|||
|
break;
|
|||
|
case 75:
|
|||
|
this.$ = $$[$0-4];yy.setClickEvent($$[$0-2], $$[$0]);
|
|||
|
break;
|
|||
|
case 76:
|
|||
|
this.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]);
|
|||
|
break;
|
|||
|
case 77: case 78:
|
|||
|
this.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]);
|
|||
|
break;
|
|||
|
case 79:
|
|||
|
this.$ = [$$[$0]]
|
|||
|
break;
|
|||
|
case 80:
|
|||
|
$$[$0-2].push($$[$0]);this.$ = $$[$0-2];
|
|||
|
break;
|
|||
|
case 82:
|
|||
|
this.$ = $$[$0-1] + $$[$0];
|
|||
|
break;
|
|||
|
case 83: case 84: case 85: case 86: case 87: case 88: case 89: case 90: case 91:
|
|||
|
this.$=$$[$0]
|
|||
|
break;
|
|||
|
}
|
|||
|
},
|
|||
|
table: [{3:1,4:2,8:[1,3]},{1:[3]},{5:4,7:5,9:$V0,12:6,13:8,14:9,15:10,16:11,17:12,18:13,19:14,21:20,31:21,32:22,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9,54:$Va,56:$Vb,57:$Vc,58:$Vd,60:$Ve},{9:[1,32]},{6:[1,33]},{5:34,12:6,13:8,14:9,15:10,16:11,17:12,18:13,19:14,21:20,31:21,32:22,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9,54:$Va,56:$Vb,57:$Vc,58:$Vd,60:$Ve},{6:[2,5],7:35,9:$V0},o($Vf,[2,7],{7:36,9:$V0}),{11:[1,37]},{11:[1,38]},{11:[1,39]},{11:[1,40]},{11:[1,41]},{11:[1,42]},{11:[2,15],20:43,43:44,45:[1,45],46:[1,46],47:[1,47],48:[1,48]},{9:[1,49]},{9:[1,50]},{9:[1,51]},{9:[1,52]},{9:[1,53]},o($Vg,[2,22],{22:[1,54],25:[1,55],27:[1,56],29:[1,57],30:[1,58]}),o($Vh,[2,23],{31:21,32:22,21:59,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9}),o($Vi,[2,25],{33:[1,60]}),o($Vj,[2,27]),o($Vj,[2,28]),o($Vj,[2,29]),o($Vj,[2,30]),o($Vj,[2,31]),o($Vj,[2,32]),o($Vj,[2,33]),o($Vj,[2,34]),o($Vj,[2,35]),{10:[1,61]},{1:[2,1]},{6:[1,62]},{5:63,12:6,13:8,14:9,15:10,16:11,17:12,18:13,19:14,21:20,31:21,32:22,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9,54:$Va,56:$Vb,57:$Vc,58:$Vd,60:$Ve},o($Vf,[2,6]),o($Vk,[2,8]),o($Vk,[2,9]),o($Vk,[2,10]),o($Vk,[2,11]),o($Vk,[2,12]),o($Vk,[2,13]),{19:64,21:20,31:21,32:22,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9},o($Vl,[2,37],{44:65,49:[1,66]}),o($Vm,[2,38]),o($Vm,[2,39]),o($Vm,[2,40]),o($Vm,[2,41]),{21:67,31:21,32:22,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9,59:[1,68]},{35:[1,69]},{21:70,31:21,32:22,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9},{21:71,31:21,32:22,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9},{21:72,31:21,32:22,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9},{9:$Vn,23:73,29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:74},{9:$Vn,23:89,25:[1,88],29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:74},{9:$Vn,23:90,29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:74},{9:$Vn,23:91,29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:74},{9:$Vn,23:92,29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:74},o($Vh,[2,24]),{32:93,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9},{11:[1,94]},{1:[2,2]},{6:[2,4]},{11:[2,14]},o($Vl,[2,36]),{9:$Vn,23:95,29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:74},{9:[1,96]},{9:[1,97]},{9:[1,98]},{9:[1,99]},{9:[1,100]},{9:[1,101]},{9:$Vn,24:[1,102],29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:103},o($VA,[2,43]),o($VA,[2,47]),o($VA,[2,48]),o($VA,[2,49]),o($VA,[2,50]),o($VA,[2,51]),o($VA,[2,52]),o($VA,[2,53]),o($VA,[2,54]),o($VA,[2,55]),o($VA,$VB),o($VA,[2,57]),o($VA,[2,58]),o($VA,[2,59]),{9:$Vn,23:104,29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:74},{9:$Vn,26:[1,105],29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:103},{9:$Vn,28:[1,106],29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:103},{9:$Vn,24:[1,107],29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:103},{9:$Vn,29:[1,108],30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,50:103},o($Vi,[2,26]),o([9,34,35,36,37,38,39,40,41,42,54,56,57,58,60],[2,3]),{9:$Vn,29:$Vo,30:$Vp,33:$Vq,34:$Vr,35:$Vs,36:$Vt,37:$Vu,38:$Vv,39:$Vw,40:$Vx,41:$Vy,42:$Vz,49:[1,109],50:103},{9:$VC,33:$VD,34:$VE,35:$VF,36:$VG,41:$VH,42:$VI,55:110,59:$VJ,61:111,62:112,63:$VK},{9:$VC,33:$VD,34:$VE,35:$VF,36:$VG,41:$VH,42:$VI,55:122,59:$VJ,61:111,62:112,63:$VK},{9:$VC,33:$VD,34:$VE,35:$VF,36:$VG,41:$VH,42:$VI,55:123,59:$VJ,61:111,62:112,63:$VK},{9:$VC,33:$VD,34:$VE,35:$VF,36:$VG,41:$VH,42:$VI,55:124,59:$VJ,61:111,62:112,63:$VK},{21:125,31:21,32:22,34:$V1,35:$V2,36:$V3,37:$V4,38:$V5,39:$V6,40:$V7,41:$V8,42:$V9},{21:126,31:21,32:22,34:$V
|
|||
|
defaultActions: {33:[2,1],62:[2,2],63:[2,4],64:[2,14],125:[2,74],126:[2,75]},
|
|||
|
parseError: function parseError(str, hash) {
|
|||
|
if (hash.recoverable) {
|
|||
|
this.trace(str);
|
|||
|
} else {
|
|||
|
throw new Error(str);
|
|||
|
}
|
|||
|
},
|
|||
|
parse: function parse(input) {
|
|||
|
var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
|
|||
|
var args = lstack.slice.call(arguments, 1);
|
|||
|
var lexer = Object.create(this.lexer);
|
|||
|
var sharedState = { yy: {} };
|
|||
|
for (var k in this.yy) {
|
|||
|
if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
|
|||
|
sharedState.yy[k] = this.yy[k];
|
|||
|
}
|
|||
|
}
|
|||
|
lexer.setInput(input, sharedState.yy);
|
|||
|
sharedState.yy.lexer = lexer;
|
|||
|
sharedState.yy.parser = this;
|
|||
|
if (typeof lexer.yylloc == 'undefined') {
|
|||
|
lexer.yylloc = {};
|
|||
|
}
|
|||
|
var yyloc = lexer.yylloc;
|
|||
|
lstack.push(yyloc);
|
|||
|
var ranges = lexer.options && lexer.options.ranges;
|
|||
|
if (typeof sharedState.yy.parseError === 'function') {
|
|||
|
this.parseError = sharedState.yy.parseError;
|
|||
|
} else {
|
|||
|
this.parseError = Object.getPrototypeOf(this).parseError;
|
|||
|
}
|
|||
|
function popStack(n) {
|
|||
|
stack.length = stack.length - 2 * n;
|
|||
|
vstack.length = vstack.length - n;
|
|||
|
lstack.length = lstack.length - n;
|
|||
|
}
|
|||
|
_token_stack:
|
|||
|
function lex() {
|
|||
|
var token;
|
|||
|
token = lexer.lex() || EOF;
|
|||
|
if (typeof token !== 'number') {
|
|||
|
token = self.symbols_[token] || token;
|
|||
|
}
|
|||
|
return token;
|
|||
|
}
|
|||
|
var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
|
|||
|
while (true) {
|
|||
|
state = stack[stack.length - 1];
|
|||
|
if (this.defaultActions[state]) {
|
|||
|
action = this.defaultActions[state];
|
|||
|
} else {
|
|||
|
if (symbol === null || typeof symbol == 'undefined') {
|
|||
|
symbol = lex();
|
|||
|
}
|
|||
|
action = table[state] && table[state][symbol];
|
|||
|
}
|
|||
|
if (typeof action === 'undefined' || !action.length || !action[0]) {
|
|||
|
var errStr = '';
|
|||
|
expected = [];
|
|||
|
for (p in table[state]) {
|
|||
|
if (this.terminals_[p] && p > TERROR) {
|
|||
|
expected.push('\'' + this.terminals_[p] + '\'');
|
|||
|
}
|
|||
|
}
|
|||
|
if (lexer.showPosition) {
|
|||
|
errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'';
|
|||
|
} else {
|
|||
|
errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'');
|
|||
|
}
|
|||
|
this.parseError(errStr, {
|
|||
|
text: lexer.match,
|
|||
|
token: this.terminals_[symbol] || symbol,
|
|||
|
line: lexer.yylineno,
|
|||
|
loc: yyloc,
|
|||
|
expected: expected
|
|||
|
});
|
|||
|
}
|
|||
|
if (action[0] instanceof Array && action.length > 1) {
|
|||
|
throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);
|
|||
|
}
|
|||
|
switch (action[0]) {
|
|||
|
case 1:
|
|||
|
stack.push(symbol);
|
|||
|
vstack.push(lexer.yytext);
|
|||
|
lstack.push(lexer.yylloc);
|
|||
|
stack.push(action[1]);
|
|||
|
symbol = null;
|
|||
|
if (!preErrorSymbol) {
|
|||
|
yyleng = lexer.yyleng;
|
|||
|
yytext = lexer.yytext;
|
|||
|
yylineno = lexer.yylineno;
|
|||
|
yyloc = lexer.yylloc;
|
|||
|
if (recovering > 0) {
|
|||
|
recovering--;
|
|||
|
}
|
|||
|
} else {
|
|||
|
symbol = preErrorSymbol;
|
|||
|
preErrorSymbol = null;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
len = this.productions_[action[1]][1];
|
|||
|
yyval.$ = vstack[vstack.length - len];
|
|||
|
yyval._$ = {
|
|||
|
first_line: lstack[lstack.length - (len || 1)].first_line,
|
|||
|
last_line: lstack[lstack.length - 1].last_line,
|
|||
|
first_column: lstack[lstack.length - (len || 1)].first_column,
|
|||
|
last_column: lstack[lstack.length - 1].last_column
|
|||
|
};
|
|||
|
if (ranges) {
|
|||
|
yyval._$.range = [
|
|||
|
lstack[lstack.length - (len || 1)].range[0],
|
|||
|
lstack[lstack.length - 1].range[1]
|
|||
|
];
|
|||
|
}
|
|||
|
r = this.performAction.apply(yyval, [
|
|||
|
yytext,
|
|||
|
yyleng,
|
|||
|
yylineno,
|
|||
|
sharedState.yy,
|
|||
|
action[1],
|
|||
|
vstack,
|
|||
|
lstack
|
|||
|
].concat(args));
|
|||
|
if (typeof r !== 'undefined') {
|
|||
|
return r;
|
|||
|
}
|
|||
|
if (len) {
|
|||
|
stack = stack.slice(0, -1 * len * 2);
|
|||
|
vstack = vstack.slice(0, -1 * len);
|
|||
|
lstack = lstack.slice(0, -1 * len);
|
|||
|
}
|
|||
|
stack.push(this.productions_[action[1]][0]);
|
|||
|
vstack.push(yyval.$);
|
|||
|
lstack.push(yyval._$);
|
|||
|
newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
|
|||
|
stack.push(newState);
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
return true;
|
|||
|
}};
|
|||
|
/* generated by jison-lex 0.3.4 */
|
|||
|
var lexer = (function(){
|
|||
|
var lexer = ({
|
|||
|
|
|||
|
EOF:1,
|
|||
|
|
|||
|
parseError:function parseError(str, hash) {
|
|||
|
if (this.yy.parser) {
|
|||
|
this.yy.parser.parseError(str, hash);
|
|||
|
} else {
|
|||
|
throw new Error(str);
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// resets the lexer, sets new input
|
|||
|
setInput:function (input, yy) {
|
|||
|
this.yy = yy || this.yy || {};
|
|||
|
this._input = input;
|
|||
|
this._more = this._backtrack = this.done = false;
|
|||
|
this.yylineno = this.yyleng = 0;
|
|||
|
this.yytext = this.matched = this.match = '';
|
|||
|
this.conditionStack = ['INITIAL'];
|
|||
|
this.yylloc = {
|
|||
|
first_line: 1,
|
|||
|
first_column: 0,
|
|||
|
last_line: 1,
|
|||
|
last_column: 0
|
|||
|
};
|
|||
|
if (this.options.ranges) {
|
|||
|
this.yylloc.range = [0,0];
|
|||
|
}
|
|||
|
this.offset = 0;
|
|||
|
return this;
|
|||
|
},
|
|||
|
|
|||
|
// consumes and returns one char from the input
|
|||
|
input:function () {
|
|||
|
var ch = this._input[0];
|
|||
|
this.yytext += ch;
|
|||
|
this.yyleng++;
|
|||
|
this.offset++;
|
|||
|
this.match += ch;
|
|||
|
this.matched += ch;
|
|||
|
var lines = ch.match(/(?:\r\n?|\n).*/g);
|
|||
|
if (lines) {
|
|||
|
this.yylineno++;
|
|||
|
this.yylloc.last_line++;
|
|||
|
} else {
|
|||
|
this.yylloc.last_column++;
|
|||
|
}
|
|||
|
if (this.options.ranges) {
|
|||
|
this.yylloc.range[1]++;
|
|||
|
}
|
|||
|
|
|||
|
this._input = this._input.slice(1);
|
|||
|
return ch;
|
|||
|
},
|
|||
|
|
|||
|
// unshifts one char (or a string) into the input
|
|||
|
unput:function (ch) {
|
|||
|
var len = ch.length;
|
|||
|
var lines = ch.split(/(?:\r\n?|\n)/g);
|
|||
|
|
|||
|
this._input = ch + this._input;
|
|||
|
this.yytext = this.yytext.substr(0, this.yytext.length - len);
|
|||
|
//this.yyleng -= len;
|
|||
|
this.offset -= len;
|
|||
|
var oldLines = this.match.split(/(?:\r\n?|\n)/g);
|
|||
|
this.match = this.match.substr(0, this.match.length - 1);
|
|||
|
this.matched = this.matched.substr(0, this.matched.length - 1);
|
|||
|
|
|||
|
if (lines.length - 1) {
|
|||
|
this.yylineno -= lines.length - 1;
|
|||
|
}
|
|||
|
var r = this.yylloc.range;
|
|||
|
|
|||
|
this.yylloc = {
|
|||
|
first_line: this.yylloc.first_line,
|
|||
|
last_line: this.yylineno + 1,
|
|||
|
first_column: this.yylloc.first_column,
|
|||
|
last_column: lines ?
|
|||
|
(lines.length === oldLines.length ? this.yylloc.first_column : 0)
|
|||
|
+ oldLines[oldLines.length - lines.length].length - lines[0].length :
|
|||
|
this.yylloc.first_column - len
|
|||
|
};
|
|||
|
|
|||
|
if (this.options.ranges) {
|
|||
|
this.yylloc.range = [r[0], r[0] + this.yyleng - len];
|
|||
|
}
|
|||
|
this.yyleng = this.yytext.length;
|
|||
|
return this;
|
|||
|
},
|
|||
|
|
|||
|
// When called from action, caches matched text and appends it on next action
|
|||
|
more:function () {
|
|||
|
this._more = true;
|
|||
|
return this;
|
|||
|
},
|
|||
|
|
|||
|
// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
|
|||
|
reject:function () {
|
|||
|
if (this.options.backtrack_lexer) {
|
|||
|
this._backtrack = true;
|
|||
|
} else {
|
|||
|
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), {
|
|||
|
text: "",
|
|||
|
token: null,
|
|||
|
line: this.yylineno
|
|||
|
});
|
|||
|
|
|||
|
}
|
|||
|
return this;
|
|||
|
},
|
|||
|
|
|||
|
// retain first n characters of the match
|
|||
|
less:function (n) {
|
|||
|
this.unput(this.match.slice(n));
|
|||
|
},
|
|||
|
|
|||
|
// displays already matched input, i.e. for error messages
|
|||
|
pastInput:function () {
|
|||
|
var past = this.matched.substr(0, this.matched.length - this.match.length);
|
|||
|
return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
|
|||
|
},
|
|||
|
|
|||
|
// displays upcoming input, i.e. for error messages
|
|||
|
upcomingInput:function () {
|
|||
|
var next = this.match;
|
|||
|
if (next.length < 20) {
|
|||
|
next += this._input.substr(0, 20-next.length);
|
|||
|
}
|
|||
|
return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
|
|||
|
},
|
|||
|
|
|||
|
// displays the character position where the lexing error occurred, i.e. for error messages
|
|||
|
showPosition:function () {
|
|||
|
var pre = this.pastInput();
|
|||
|
var c = new Array(pre.length + 1).join("-");
|
|||
|
return pre + this.upcomingInput() + "\n" + c + "^";
|
|||
|
},
|
|||
|
|
|||
|
// test the lexed token: return FALSE when not a match, otherwise return token
|
|||
|
test_match:function (match, indexed_rule) {
|
|||
|
var token,
|
|||
|
lines,
|
|||
|
backup;
|
|||
|
|
|||
|
if (this.options.backtrack_lexer) {
|
|||
|
// save context
|
|||
|
backup = {
|
|||
|
yylineno: this.yylineno,
|
|||
|
yylloc: {
|
|||
|
first_line: this.yylloc.first_line,
|
|||
|
last_line: this.last_line,
|
|||
|
first_column: this.yylloc.first_column,
|
|||
|
last_column: this.yylloc.last_column
|
|||
|
},
|
|||
|
yytext: this.yytext,
|
|||
|
match: this.match,
|
|||
|
matches: this.matches,
|
|||
|
matched: this.matched,
|
|||
|
yyleng: this.yyleng,
|
|||
|
offset: this.offset,
|
|||
|
_more: this._more,
|
|||
|
_input: this._input,
|
|||
|
yy: this.yy,
|
|||
|
conditionStack: this.conditionStack.slice(0),
|
|||
|
done: this.done
|
|||
|
};
|
|||
|
if (this.options.ranges) {
|
|||
|
backup.yylloc.range = this.yylloc.range.slice(0);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
lines = match[0].match(/(?:\r\n?|\n).*/g);
|
|||
|
if (lines) {
|
|||
|
this.yylineno += lines.length;
|
|||
|
}
|
|||
|
this.yylloc = {
|
|||
|
first_line: this.yylloc.last_line,
|
|||
|
last_line: this.yylineno + 1,
|
|||
|
first_column: this.yylloc.last_column,
|
|||
|
last_column: lines ?
|
|||
|
lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length :
|
|||
|
this.yylloc.last_column + match[0].length
|
|||
|
};
|
|||
|
this.yytext += match[0];
|
|||
|
this.match += match[0];
|
|||
|
this.matches = match;
|
|||
|
this.yyleng = this.yytext.length;
|
|||
|
if (this.options.ranges) {
|
|||
|
this.yylloc.range = [this.offset, this.offset += this.yyleng];
|
|||
|
}
|
|||
|
this._more = false;
|
|||
|
this._backtrack = false;
|
|||
|
this._input = this._input.slice(match[0].length);
|
|||
|
this.matched += match[0];
|
|||
|
token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
|
|||
|
if (this.done && this._input) {
|
|||
|
this.done = false;
|
|||
|
}
|
|||
|
if (token) {
|
|||
|
return token;
|
|||
|
} else if (this._backtrack) {
|
|||
|
// recover context
|
|||
|
for (var k in backup) {
|
|||
|
this[k] = backup[k];
|
|||
|
}
|
|||
|
return false; // rule action called reject() implying the next rule should be tested instead.
|
|||
|
}
|
|||
|
return false;
|
|||
|
},
|
|||
|
|
|||
|
// return next match in input
|
|||
|
next:function () {
|
|||
|
if (this.done) {
|
|||
|
return this.EOF;
|
|||
|
}
|
|||
|
if (!this._input) {
|
|||
|
this.done = true;
|
|||
|
}
|
|||
|
|
|||
|
var token,
|
|||
|
match,
|
|||
|
tempMatch,
|
|||
|
index;
|
|||
|
if (!this._more) {
|
|||
|
this.yytext = '';
|
|||
|
this.match = '';
|
|||
|
}
|
|||
|
var rules = this._currentRules();
|
|||
|
for (var i = 0; i < rules.length; i++) {
|
|||
|
tempMatch = this._input.match(this.rules[rules[i]]);
|
|||
|
if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
|
|||
|
match = tempMatch;
|
|||
|
index = i;
|
|||
|
if (this.options.backtrack_lexer) {
|
|||
|
token = this.test_match(tempMatch, rules[i]);
|
|||
|
if (token !== false) {
|
|||
|
return token;
|
|||
|
} else if (this._backtrack) {
|
|||
|
match = false;
|
|||
|
continue; // rule action called reject() implying a rule MISmatch.
|
|||
|
} else {
|
|||
|
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
|||
|
return false;
|
|||
|
}
|
|||
|
} else if (!this.options.flex) {
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (match) {
|
|||
|
token = this.test_match(match, rules[index]);
|
|||
|
if (token !== false) {
|
|||
|
return token;
|
|||
|
}
|
|||
|
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (this._input === "") {
|
|||
|
return this.EOF;
|
|||
|
} else {
|
|||
|
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), {
|
|||
|
text: "",
|
|||
|
token: null,
|
|||
|
line: this.yylineno
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// return next match that has a token
|
|||
|
lex:function lex() {
|
|||
|
var r = this.next();
|
|||
|
if (r) {
|
|||
|
return r;
|
|||
|
} else {
|
|||
|
return this.lex();
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
|
|||
|
begin:function begin(condition) {
|
|||
|
this.conditionStack.push(condition);
|
|||
|
},
|
|||
|
|
|||
|
// pop the previously active lexer condition state off the condition stack
|
|||
|
popState:function popState() {
|
|||
|
var n = this.conditionStack.length - 1;
|
|||
|
if (n > 0) {
|
|||
|
return this.conditionStack.pop();
|
|||
|
} else {
|
|||
|
return this.conditionStack[0];
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// produce the lexer rule set which is active for the currently active lexer condition state
|
|||
|
_currentRules:function _currentRules() {
|
|||
|
if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
|
|||
|
return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
|
|||
|
} else {
|
|||
|
return this.conditions["INITIAL"].rules;
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
|
|||
|
topState:function topState(n) {
|
|||
|
n = this.conditionStack.length - 1 - Math.abs(n || 0);
|
|||
|
if (n >= 0) {
|
|||
|
return this.conditionStack[n];
|
|||
|
} else {
|
|||
|
return "INITIAL";
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// alias for begin(condition)
|
|||
|
pushState:function pushState(condition) {
|
|||
|
this.begin(condition);
|
|||
|
},
|
|||
|
|
|||
|
// return the number of states currently on the stack
|
|||
|
stateStackSize:function stateStackSize() {
|
|||
|
return this.conditionStack.length;
|
|||
|
},
|
|||
|
options: {},
|
|||
|
performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
|
|||
|
var YYSTATE=YY_START;
|
|||
|
switch($avoiding_name_collisions) {
|
|||
|
case 0:return 58;
|
|||
|
break;
|
|||
|
case 1:return 60;
|
|||
|
break;
|
|||
|
case 2:return 54;
|
|||
|
break;
|
|||
|
case 3:return 56;
|
|||
|
break;
|
|||
|
case 4:return 57;
|
|||
|
break;
|
|||
|
case 5:return 8;
|
|||
|
break;
|
|||
|
case 6:return 10;
|
|||
|
break;
|
|||
|
case 7:return 10;
|
|||
|
break;
|
|||
|
case 8:return 10;
|
|||
|
break;
|
|||
|
case 9:return 10;
|
|||
|
break;
|
|||
|
case 10:return 10;
|
|||
|
break;
|
|||
|
case 11:return 10;
|
|||
|
break;
|
|||
|
case 12:return 35;
|
|||
|
break;
|
|||
|
case 13:return 42;
|
|||
|
break;
|
|||
|
case 14:return 36;
|
|||
|
break;
|
|||
|
case 15:return 11;
|
|||
|
break;
|
|||
|
case 16:return 37;
|
|||
|
break;
|
|||
|
case 17:return 39;
|
|||
|
break;
|
|||
|
case 18:return 40;
|
|||
|
break;
|
|||
|
case 19:return 41;
|
|||
|
break;
|
|||
|
case 20:return 30;
|
|||
|
break;
|
|||
|
case 21:return 29;
|
|||
|
break;
|
|||
|
case 22:return 47;
|
|||
|
break;
|
|||
|
case 23:return 45;
|
|||
|
break;
|
|||
|
case 24:return 46;
|
|||
|
break;
|
|||
|
case 25:return 48;
|
|||
|
break;
|
|||
|
case 26:return 33;
|
|||
|
break;
|
|||
|
case 27:return 38;
|
|||
|
break;
|
|||
|
case 28:return 39;
|
|||
|
break;
|
|||
|
case 29:return 34;
|
|||
|
break;
|
|||
|
case 30:return 49;
|
|||
|
break;
|
|||
|
case 31:return 25;
|
|||
|
break;
|
|||
|
case 32:return 26;
|
|||
|
break;
|
|||
|
case 33:return 22;
|
|||
|
break;
|
|||
|
case 34:return 24;
|
|||
|
break;
|
|||
|
case 35:return 27
|
|||
|
break;
|
|||
|
case 36:return 28
|
|||
|
break;
|
|||
|
case 37:return 'QUOTE';
|
|||
|
break;
|
|||
|
case 38:return 9;
|
|||
|
break;
|
|||
|
case 39:return 'NEWLINE';
|
|||
|
break;
|
|||
|
case 40:return 6;
|
|||
|
break;
|
|||
|
}
|
|||
|
},
|
|||
|
rules: [/^(?:style\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9])/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:<)/,/^(?:>)/,/^(?:--[x])/,/^(?:-->)/,/^(?:--[o])/,/^(?:---)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[a-zåäöæøA-ZÅÄÖÆØ_])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\s)/,/^(?:\n)/,/^(?:$)/],
|
|||
|
conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"inclusive":true}}
|
|||
|
});
|
|||
|
return lexer;
|
|||
|
})();
|
|||
|
parser.lexer = lexer;
|
|||
|
function Parser () {
|
|||
|
this.yy = {};
|
|||
|
}
|
|||
|
Parser.prototype = parser;parser.Parser = Parser;
|
|||
|
return new Parser;
|
|||
|
})();
|
|||
|
|
|||
|
|
|||
|
if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
|
|||
|
exports.parser = parser;
|
|||
|
exports.Parser = parser.Parser;
|
|||
|
exports.parse = function () { return parser.parse.apply(parser, arguments); };
|
|||
|
exports.main = function commonjsMain(args) {
|
|||
|
if (!args[1]) {
|
|||
|
console.log('Usage: '+args[0]+' FILE');
|
|||
|
process.exit(1);
|
|||
|
}
|
|||
|
var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8");
|
|||
|
return exports.parser.parse(source);
|
|||
|
};
|
|||
|
if (typeof module !== 'undefined' && require.main === module) {
|
|||
|
exports.main(process.argv.slice(1));
|
|||
|
}
|
|||
|
}
|
|||
|
}).call(this,require("1YiZ5S"))
|
|||
|
},{"1YiZ5S":3,"fs":1,"path":2}],8:[function(require,module,exports){
|
|||
|
(function (process){
|
|||
|
/* parser generated by jison 0.4.15 */
|
|||
|
/*
|
|||
|
Returns a Parser object of the following structure:
|
|||
|
|
|||
|
Parser: {
|
|||
|
yy: {}
|
|||
|
}
|
|||
|
|
|||
|
Parser.prototype: {
|
|||
|
yy: {},
|
|||
|
trace: function(),
|
|||
|
symbols_: {associative list: name ==> number},
|
|||
|
terminals_: {associative list: number ==> name},
|
|||
|
productions_: [...],
|
|||
|
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),
|
|||
|
table: [...],
|
|||
|
defaultActions: {...},
|
|||
|
parseError: function(str, hash),
|
|||
|
parse: function(input),
|
|||
|
|
|||
|
lexer: {
|
|||
|
EOF: 1,
|
|||
|
parseError: function(str, hash),
|
|||
|
setInput: function(input),
|
|||
|
input: function(),
|
|||
|
unput: function(str),
|
|||
|
more: function(),
|
|||
|
less: function(n),
|
|||
|
pastInput: function(),
|
|||
|
upcomingInput: function(),
|
|||
|
showPosition: function(),
|
|||
|
test_match: function(regex_match_array, rule_index),
|
|||
|
next: function(),
|
|||
|
lex: function(),
|
|||
|
begin: function(condition),
|
|||
|
popState: function(),
|
|||
|
_currentRules: function(),
|
|||
|
topState: function(),
|
|||
|
pushState: function(condition),
|
|||
|
|
|||
|
options: {
|
|||
|
ranges: boolean (optional: true ==> token location info will include a .range[] member)
|
|||
|
flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)
|
|||
|
backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)
|
|||
|
},
|
|||
|
|
|||
|
performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),
|
|||
|
rules: [...],
|
|||
|
conditions: {associative list: name ==> set},
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
token location info (@$, _$, etc.): {
|
|||
|
first_line: n,
|
|||
|
last_line: n,
|
|||
|
first_column: n,
|
|||
|
last_column: n,
|
|||
|
range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
the parseError function receives a 'hash' object with these members for lexer and parser errors: {
|
|||
|
text: (matched text)
|
|||
|
token: (the produced terminal token, if any)
|
|||
|
line: (yylineno)
|
|||
|
}
|
|||
|
while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {
|
|||
|
loc: (yylloc)
|
|||
|
expected: (string describing the set of expected tokens)
|
|||
|
recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)
|
|||
|
}
|
|||
|
*/
|
|||
|
var parser = (function(){
|
|||
|
var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,11],$V1=[1,12],$V2=[1,17],$V3=[1,16],$V4=[6,8,28],$V5=[6,8,14,16,28,31,32],$V6=[6,8,14,16,18,28,31,32],$V7=[6,31,32],$V8=[1,35],$V9=[6,8,16,18,28,31,32];
|
|||
|
var parser = {trace: function trace() { },
|
|||
|
yy: {},
|
|||
|
symbols_: {"error":2,"expressions":3,"sequenceConfig":4,"statements":5,"EOF":6,"SEQ":7,"SPACE":8,"DIR":9,"newlines":10,"statement":11,"preStatement":12,"alphaNum":13,"COLON":14,"text":15,"DOT":16,"message":17,"EQUALS":18,"callee":19,"action":20,"SQS":21,"SQE":22,"actorDefinition":23,"messageDefinition":24,"caller":25,"answer":26,"spaceList":27,"NEWLINE":28,"alphaNumStatement":29,"alphaNumToken":30,"ALPHA":31,"NUM":32,"textStatement":33,"textToken":34,"$accept":0,"$end":1},
|
|||
|
terminals_: {2:"error",6:"EOF",7:"SEQ",8:"SPACE",9:"DIR",14:"COLON",16:"DOT",18:"EQUALS",21:"SQS",22:"SQE",28:"NEWLINE",31:"ALPHA",32:"NUM"},
|
|||
|
productions_: [0,[3,2],[3,1],[4,4],[5,3],[5,2],[5,3],[12,3],[11,1],[11,3],[11,5],[20,2],[23,3],[24,7],[25,1],[26,1],[19,1],[17,1],[27,2],[27,1],[10,2],[10,2],[10,1],[10,1],[13,1],[29,2],[29,1],[30,1],[30,1],[15,1],[33,2],[33,1],[34,1],[34,1]],
|
|||
|
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
|
|||
|
/* this == yyval */
|
|||
|
|
|||
|
var $0 = $$.length - 1;
|
|||
|
switch (yystate) {
|
|||
|
case 1: case 5:
|
|||
|
this.$=$$[$0-1];
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
this.$ = $$[$0-1];
|
|||
|
break;
|
|||
|
case 4: case 6:
|
|||
|
this.$=$$[$0-2];
|
|||
|
break;
|
|||
|
case 7:
|
|||
|
this.$={a:$$[$0-2],b:$$[$0]}
|
|||
|
break;
|
|||
|
case 8:
|
|||
|
yy.addActor($$[$0].a,'actor',$$[$0].b);this.$='actor';
|
|||
|
break;
|
|||
|
case 9:
|
|||
|
yy.addMessage($$[$0-2].a,$$[$0-2].b,$$[$0]);this.$='message';
|
|||
|
break;
|
|||
|
case 10:
|
|||
|
yy.addMessage($$[$0-4].a,$$[$0-2],$$[$0],$$[$0-4].b);this.$='actor';
|
|||
|
break;
|
|||
|
case 11:
|
|||
|
this.$='action';
|
|||
|
break;
|
|||
|
case 12:
|
|||
|
this.$='actor';
|
|||
|
break;
|
|||
|
case 13:
|
|||
|
console.log('Got new message from='+$$[$0-6]+' to='+$$[$0-2]+' message='+$$[$0]+' answer='+$$[$0-4]);this.$='actor';
|
|||
|
break;
|
|||
|
case 24: case 27: case 28: case 29: case 33:
|
|||
|
this.$=$$[$0];
|
|||
|
break;
|
|||
|
case 25: case 30:
|
|||
|
this.$=$$[$0-1]+''+$$[$0];
|
|||
|
break;
|
|||
|
}
|
|||
|
},
|
|||
|
table: [{3:1,4:2,6:[1,3],7:[1,4]},{1:[3]},{5:5,11:6,12:7,13:8,29:9,30:10,31:$V0,32:$V1},{1:[2,2]},{8:[1,13]},{1:[2,1]},{6:[1,15],8:$V2,10:14,28:$V3},o($V4,[2,8],{16:[1,18],18:[1,19]}),{14:[1,20],30:21,31:$V0,32:$V1},o($V5,[2,24]),o($V5,[2,26]),o($V6,[2,27]),o($V6,[2,28]),{9:[1,22]},{5:23,6:[1,24],11:6,12:7,13:8,29:9,30:10,31:$V0,32:$V1},{1:[2,5]},o($V7,[2,22],{10:25,8:$V2,28:$V3}),o($V7,[2,23],{10:26,8:$V2,28:$V3}),{13:28,17:27,29:9,30:10,31:$V0,32:$V1},{13:30,19:29,29:9,30:10,31:$V0,32:$V1},{8:$V8,15:31,30:34,31:$V0,32:$V1,33:32,34:33},o($V5,[2,25]),{8:$V2,10:36,28:$V3},{1:[2,4]},{1:[2,6]},o($V7,[2,20]),o($V7,[2,21]),o($V4,[2,9]),o($V4,[2,17],{30:21,31:$V0,32:$V1}),{16:[1,37]},{16:[2,16],30:21,31:$V0,32:$V1},o([6,16,18,28],[2,7],{30:34,34:38,8:$V8,31:$V0,32:$V1}),o($V9,[2,29]),o($V9,[2,31]),o($V9,[2,32]),o($V9,[2,33]),o([31,32],[2,3]),{13:28,17:39,29:9,30:10,31:$V0,32:$V1},o($V9,[2,30]),o($V4,[2,10])],
|
|||
|
defaultActions: {3:[2,2],5:[2,1],15:[2,5],23:[2,4],24:[2,6]},
|
|||
|
parseError: function parseError(str, hash) {
|
|||
|
if (hash.recoverable) {
|
|||
|
this.trace(str);
|
|||
|
} else {
|
|||
|
throw new Error(str);
|
|||
|
}
|
|||
|
},
|
|||
|
parse: function parse(input) {
|
|||
|
var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
|
|||
|
var args = lstack.slice.call(arguments, 1);
|
|||
|
var lexer = Object.create(this.lexer);
|
|||
|
var sharedState = { yy: {} };
|
|||
|
for (var k in this.yy) {
|
|||
|
if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
|
|||
|
sharedState.yy[k] = this.yy[k];
|
|||
|
}
|
|||
|
}
|
|||
|
lexer.setInput(input, sharedState.yy);
|
|||
|
sharedState.yy.lexer = lexer;
|
|||
|
sharedState.yy.parser = this;
|
|||
|
if (typeof lexer.yylloc == 'undefined') {
|
|||
|
lexer.yylloc = {};
|
|||
|
}
|
|||
|
var yyloc = lexer.yylloc;
|
|||
|
lstack.push(yyloc);
|
|||
|
var ranges = lexer.options && lexer.options.ranges;
|
|||
|
if (typeof sharedState.yy.parseError === 'function') {
|
|||
|
this.parseError = sharedState.yy.parseError;
|
|||
|
} else {
|
|||
|
this.parseError = Object.getPrototypeOf(this).parseError;
|
|||
|
}
|
|||
|
function popStack(n) {
|
|||
|
stack.length = stack.length - 2 * n;
|
|||
|
vstack.length = vstack.length - n;
|
|||
|
lstack.length = lstack.length - n;
|
|||
|
}
|
|||
|
_token_stack:
|
|||
|
function lex() {
|
|||
|
var token;
|
|||
|
token = lexer.lex() || EOF;
|
|||
|
if (typeof token !== 'number') {
|
|||
|
token = self.symbols_[token] || token;
|
|||
|
}
|
|||
|
return token;
|
|||
|
}
|
|||
|
var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
|
|||
|
while (true) {
|
|||
|
state = stack[stack.length - 1];
|
|||
|
if (this.defaultActions[state]) {
|
|||
|
action = this.defaultActions[state];
|
|||
|
} else {
|
|||
|
if (symbol === null || typeof symbol == 'undefined') {
|
|||
|
symbol = lex();
|
|||
|
}
|
|||
|
action = table[state] && table[state][symbol];
|
|||
|
}
|
|||
|
if (typeof action === 'undefined' || !action.length || !action[0]) {
|
|||
|
var errStr = '';
|
|||
|
expected = [];
|
|||
|
for (p in table[state]) {
|
|||
|
if (this.terminals_[p] && p > TERROR) {
|
|||
|
expected.push('\'' + this.terminals_[p] + '\'');
|
|||
|
}
|
|||
|
}
|
|||
|
if (lexer.showPosition) {
|
|||
|
errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'';
|
|||
|
} else {
|
|||
|
errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'');
|
|||
|
}
|
|||
|
this.parseError(errStr, {
|
|||
|
text: lexer.match,
|
|||
|
token: this.terminals_[symbol] || symbol,
|
|||
|
line: lexer.yylineno,
|
|||
|
loc: yyloc,
|
|||
|
expected: expected
|
|||
|
});
|
|||
|
}
|
|||
|
if (action[0] instanceof Array && action.length > 1) {
|
|||
|
throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);
|
|||
|
}
|
|||
|
switch (action[0]) {
|
|||
|
case 1:
|
|||
|
stack.push(symbol);
|
|||
|
vstack.push(lexer.yytext);
|
|||
|
lstack.push(lexer.yylloc);
|
|||
|
stack.push(action[1]);
|
|||
|
symbol = null;
|
|||
|
if (!preErrorSymbol) {
|
|||
|
yyleng = lexer.yyleng;
|
|||
|
yytext = lexer.yytext;
|
|||
|
yylineno = lexer.yylineno;
|
|||
|
yyloc = lexer.yylloc;
|
|||
|
if (recovering > 0) {
|
|||
|
recovering--;
|
|||
|
}
|
|||
|
} else {
|
|||
|
symbol = preErrorSymbol;
|
|||
|
preErrorSymbol = null;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
len = this.productions_[action[1]][1];
|
|||
|
yyval.$ = vstack[vstack.length - len];
|
|||
|
yyval._$ = {
|
|||
|
first_line: lstack[lstack.length - (len || 1)].first_line,
|
|||
|
last_line: lstack[lstack.length - 1].last_line,
|
|||
|
first_column: lstack[lstack.length - (len || 1)].first_column,
|
|||
|
last_column: lstack[lstack.length - 1].last_column
|
|||
|
};
|
|||
|
if (ranges) {
|
|||
|
yyval._$.range = [
|
|||
|
lstack[lstack.length - (len || 1)].range[0],
|
|||
|
lstack[lstack.length - 1].range[1]
|
|||
|
];
|
|||
|
}
|
|||
|
r = this.performAction.apply(yyval, [
|
|||
|
yytext,
|
|||
|
yyleng,
|
|||
|
yylineno,
|
|||
|
sharedState.yy,
|
|||
|
action[1],
|
|||
|
vstack,
|
|||
|
lstack
|
|||
|
].concat(args));
|
|||
|
if (typeof r !== 'undefined') {
|
|||
|
return r;
|
|||
|
}
|
|||
|
if (len) {
|
|||
|
stack = stack.slice(0, -1 * len * 2);
|
|||
|
vstack = vstack.slice(0, -1 * len);
|
|||
|
lstack = lstack.slice(0, -1 * len);
|
|||
|
}
|
|||
|
stack.push(this.productions_[action[1]][0]);
|
|||
|
vstack.push(yyval.$);
|
|||
|
lstack.push(yyval._$);
|
|||
|
newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
|
|||
|
stack.push(newState);
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
return true;
|
|||
|
}};
|
|||
|
/* generated by jison-lex 0.3.4 */
|
|||
|
var lexer = (function(){
|
|||
|
var lexer = ({
|
|||
|
|
|||
|
EOF:1,
|
|||
|
|
|||
|
parseError:function parseError(str, hash) {
|
|||
|
if (this.yy.parser) {
|
|||
|
this.yy.parser.parseError(str, hash);
|
|||
|
} else {
|
|||
|
throw new Error(str);
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// resets the lexer, sets new input
|
|||
|
setInput:function (input, yy) {
|
|||
|
this.yy = yy || this.yy || {};
|
|||
|
this._input = input;
|
|||
|
this._more = this._backtrack = this.done = false;
|
|||
|
this.yylineno = this.yyleng = 0;
|
|||
|
this.yytext = this.matched = this.match = '';
|
|||
|
this.conditionStack = ['INITIAL'];
|
|||
|
this.yylloc = {
|
|||
|
first_line: 1,
|
|||
|
first_column: 0,
|
|||
|
last_line: 1,
|
|||
|
last_column: 0
|
|||
|
};
|
|||
|
if (this.options.ranges) {
|
|||
|
this.yylloc.range = [0,0];
|
|||
|
}
|
|||
|
this.offset = 0;
|
|||
|
return this;
|
|||
|
},
|
|||
|
|
|||
|
// consumes and returns one char from the input
|
|||
|
input:function () {
|
|||
|
var ch = this._input[0];
|
|||
|
this.yytext += ch;
|
|||
|
this.yyleng++;
|
|||
|
this.offset++;
|
|||
|
this.match += ch;
|
|||
|
this.matched += ch;
|
|||
|
var lines = ch.match(/(?:\r\n?|\n).*/g);
|
|||
|
if (lines) {
|
|||
|
this.yylineno++;
|
|||
|
this.yylloc.last_line++;
|
|||
|
} else {
|
|||
|
this.yylloc.last_column++;
|
|||
|
}
|
|||
|
if (this.options.ranges) {
|
|||
|
this.yylloc.range[1]++;
|
|||
|
}
|
|||
|
|
|||
|
this._input = this._input.slice(1);
|
|||
|
return ch;
|
|||
|
},
|
|||
|
|
|||
|
// unshifts one char (or a string) into the input
|
|||
|
unput:function (ch) {
|
|||
|
var len = ch.length;
|
|||
|
var lines = ch.split(/(?:\r\n?|\n)/g);
|
|||
|
|
|||
|
this._input = ch + this._input;
|
|||
|
this.yytext = this.yytext.substr(0, this.yytext.length - len);
|
|||
|
//this.yyleng -= len;
|
|||
|
this.offset -= len;
|
|||
|
var oldLines = this.match.split(/(?:\r\n?|\n)/g);
|
|||
|
this.match = this.match.substr(0, this.match.length - 1);
|
|||
|
this.matched = this.matched.substr(0, this.matched.length - 1);
|
|||
|
|
|||
|
if (lines.length - 1) {
|
|||
|
this.yylineno -= lines.length - 1;
|
|||
|
}
|
|||
|
var r = this.yylloc.range;
|
|||
|
|
|||
|
this.yylloc = {
|
|||
|
first_line: this.yylloc.first_line,
|
|||
|
last_line: this.yylineno + 1,
|
|||
|
first_column: this.yylloc.first_column,
|
|||
|
last_column: lines ?
|
|||
|
(lines.length === oldLines.length ? this.yylloc.first_column : 0)
|
|||
|
+ oldLines[oldLines.length - lines.length].length - lines[0].length :
|
|||
|
this.yylloc.first_column - len
|
|||
|
};
|
|||
|
|
|||
|
if (this.options.ranges) {
|
|||
|
this.yylloc.range = [r[0], r[0] + this.yyleng - len];
|
|||
|
}
|
|||
|
this.yyleng = this.yytext.length;
|
|||
|
return this;
|
|||
|
},
|
|||
|
|
|||
|
// When called from action, caches matched text and appends it on next action
|
|||
|
more:function () {
|
|||
|
this._more = true;
|
|||
|
return this;
|
|||
|
},
|
|||
|
|
|||
|
// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
|
|||
|
reject:function () {
|
|||
|
if (this.options.backtrack_lexer) {
|
|||
|
this._backtrack = true;
|
|||
|
} else {
|
|||
|
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), {
|
|||
|
text: "",
|
|||
|
token: null,
|
|||
|
line: this.yylineno
|
|||
|
});
|
|||
|
|
|||
|
}
|
|||
|
return this;
|
|||
|
},
|
|||
|
|
|||
|
// retain first n characters of the match
|
|||
|
less:function (n) {
|
|||
|
this.unput(this.match.slice(n));
|
|||
|
},
|
|||
|
|
|||
|
// displays already matched input, i.e. for error messages
|
|||
|
pastInput:function () {
|
|||
|
var past = this.matched.substr(0, this.matched.length - this.match.length);
|
|||
|
return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
|
|||
|
},
|
|||
|
|
|||
|
// displays upcoming input, i.e. for error messages
|
|||
|
upcomingInput:function () {
|
|||
|
var next = this.match;
|
|||
|
if (next.length < 20) {
|
|||
|
next += this._input.substr(0, 20-next.length);
|
|||
|
}
|
|||
|
return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
|
|||
|
},
|
|||
|
|
|||
|
// displays the character position where the lexing error occurred, i.e. for error messages
|
|||
|
showPosition:function () {
|
|||
|
var pre = this.pastInput();
|
|||
|
var c = new Array(pre.length + 1).join("-");
|
|||
|
return pre + this.upcomingInput() + "\n" + c + "^";
|
|||
|
},
|
|||
|
|
|||
|
// test the lexed token: return FALSE when not a match, otherwise return token
|
|||
|
test_match:function (match, indexed_rule) {
|
|||
|
var token,
|
|||
|
lines,
|
|||
|
backup;
|
|||
|
|
|||
|
if (this.options.backtrack_lexer) {
|
|||
|
// save context
|
|||
|
backup = {
|
|||
|
yylineno: this.yylineno,
|
|||
|
yylloc: {
|
|||
|
first_line: this.yylloc.first_line,
|
|||
|
last_line: this.last_line,
|
|||
|
first_column: this.yylloc.first_column,
|
|||
|
last_column: this.yylloc.last_column
|
|||
|
},
|
|||
|
yytext: this.yytext,
|
|||
|
match: this.match,
|
|||
|
matches: this.matches,
|
|||
|
matched: this.matched,
|
|||
|
yyleng: this.yyleng,
|
|||
|
offset: this.offset,
|
|||
|
_more: this._more,
|
|||
|
_input: this._input,
|
|||
|
yy: this.yy,
|
|||
|
conditionStack: this.conditionStack.slice(0),
|
|||
|
done: this.done
|
|||
|
};
|
|||
|
if (this.options.ranges) {
|
|||
|
backup.yylloc.range = this.yylloc.range.slice(0);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
lines = match[0].match(/(?:\r\n?|\n).*/g);
|
|||
|
if (lines) {
|
|||
|
this.yylineno += lines.length;
|
|||
|
}
|
|||
|
this.yylloc = {
|
|||
|
first_line: this.yylloc.last_line,
|
|||
|
last_line: this.yylineno + 1,
|
|||
|
first_column: this.yylloc.last_column,
|
|||
|
last_column: lines ?
|
|||
|
lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length :
|
|||
|
this.yylloc.last_column + match[0].length
|
|||
|
};
|
|||
|
this.yytext += match[0];
|
|||
|
this.match += match[0];
|
|||
|
this.matches = match;
|
|||
|
this.yyleng = this.yytext.length;
|
|||
|
if (this.options.ranges) {
|
|||
|
this.yylloc.range = [this.offset, this.offset += this.yyleng];
|
|||
|
}
|
|||
|
this._more = false;
|
|||
|
this._backtrack = false;
|
|||
|
this._input = this._input.slice(match[0].length);
|
|||
|
this.matched += match[0];
|
|||
|
token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
|
|||
|
if (this.done && this._input) {
|
|||
|
this.done = false;
|
|||
|
}
|
|||
|
if (token) {
|
|||
|
return token;
|
|||
|
} else if (this._backtrack) {
|
|||
|
// recover context
|
|||
|
for (var k in backup) {
|
|||
|
this[k] = backup[k];
|
|||
|
}
|
|||
|
return false; // rule action called reject() implying the next rule should be tested instead.
|
|||
|
}
|
|||
|
return false;
|
|||
|
},
|
|||
|
|
|||
|
// return next match in input
|
|||
|
next:function () {
|
|||
|
if (this.done) {
|
|||
|
return this.EOF;
|
|||
|
}
|
|||
|
if (!this._input) {
|
|||
|
this.done = true;
|
|||
|
}
|
|||
|
|
|||
|
var token,
|
|||
|
match,
|
|||
|
tempMatch,
|
|||
|
index;
|
|||
|
if (!this._more) {
|
|||
|
this.yytext = '';
|
|||
|
this.match = '';
|
|||
|
}
|
|||
|
var rules = this._currentRules();
|
|||
|
for (var i = 0; i < rules.length; i++) {
|
|||
|
tempMatch = this._input.match(this.rules[rules[i]]);
|
|||
|
if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
|
|||
|
match = tempMatch;
|
|||
|
index = i;
|
|||
|
if (this.options.backtrack_lexer) {
|
|||
|
token = this.test_match(tempMatch, rules[i]);
|
|||
|
if (token !== false) {
|
|||
|
return token;
|
|||
|
} else if (this._backtrack) {
|
|||
|
match = false;
|
|||
|
continue; // rule action called reject() implying a rule MISmatch.
|
|||
|
} else {
|
|||
|
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
|||
|
return false;
|
|||
|
}
|
|||
|
} else if (!this.options.flex) {
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (match) {
|
|||
|
token = this.test_match(match, rules[index]);
|
|||
|
if (token !== false) {
|
|||
|
return token;
|
|||
|
}
|
|||
|
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (this._input === "") {
|
|||
|
return this.EOF;
|
|||
|
} else {
|
|||
|
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), {
|
|||
|
text: "",
|
|||
|
token: null,
|
|||
|
line: this.yylineno
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// return next match that has a token
|
|||
|
lex:function lex() {
|
|||
|
var r = this.next();
|
|||
|
if (r) {
|
|||
|
return r;
|
|||
|
} else {
|
|||
|
return this.lex();
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
|
|||
|
begin:function begin(condition) {
|
|||
|
this.conditionStack.push(condition);
|
|||
|
},
|
|||
|
|
|||
|
// pop the previously active lexer condition state off the condition stack
|
|||
|
popState:function popState() {
|
|||
|
var n = this.conditionStack.length - 1;
|
|||
|
if (n > 0) {
|
|||
|
return this.conditionStack.pop();
|
|||
|
} else {
|
|||
|
return this.conditionStack[0];
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// produce the lexer rule set which is active for the currently active lexer condition state
|
|||
|
_currentRules:function _currentRules() {
|
|||
|
if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
|
|||
|
return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
|
|||
|
} else {
|
|||
|
return this.conditions["INITIAL"].rules;
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
|
|||
|
topState:function topState(n) {
|
|||
|
n = this.conditionStack.length - 1 - Math.abs(n || 0);
|
|||
|
if (n >= 0) {
|
|||
|
return this.conditionStack[n];
|
|||
|
} else {
|
|||
|
return "INITIAL";
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// alias for begin(condition)
|
|||
|
pushState:function pushState(condition) {
|
|||
|
this.begin(condition);
|
|||
|
},
|
|||
|
|
|||
|
// return the number of states currently on the stack
|
|||
|
stateStackSize:function stateStackSize() {
|
|||
|
return this.conditionStack.length;
|
|||
|
},
|
|||
|
options: {},
|
|||
|
performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
|
|||
|
var YYSTATE=YY_START;
|
|||
|
switch($avoiding_name_collisions) {
|
|||
|
case 0:return 28;
|
|||
|
break;
|
|||
|
case 1:return 7;
|
|||
|
break;
|
|||
|
case 2:return 9;
|
|||
|
break;
|
|||
|
case 3:return 32;
|
|||
|
break;
|
|||
|
case 4:return 14;
|
|||
|
break;
|
|||
|
case 5:return 'MINUS';
|
|||
|
break;
|
|||
|
case 6:return 'PLUS';
|
|||
|
break;
|
|||
|
case 7:return 18;
|
|||
|
break;
|
|||
|
case 8:return 31;
|
|||
|
break;
|
|||
|
case 9:return 'SLASH';
|
|||
|
break;
|
|||
|
case 10:return 'PS';
|
|||
|
break;
|
|||
|
case 11:return 'PE';
|
|||
|
break;
|
|||
|
case 12:return 21;
|
|||
|
break;
|
|||
|
case 13:return 22;
|
|||
|
break;
|
|||
|
case 14:return 16;
|
|||
|
break;
|
|||
|
case 15:return 8;
|
|||
|
break;
|
|||
|
case 16:return 6;
|
|||
|
break;
|
|||
|
}
|
|||
|
},
|
|||
|
rules: [/^(?:\n)/,/^(?:sequence\b)/,/^(?:TB\b)/,/^(?:[0-9]+)/,/^(?::)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[a-zåäöæøA-ZÅÄÖÆØ()]+)/,/^(?:\/)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\.)/,/^(?:\s)/,/^(?:$)/],
|
|||
|
conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"inclusive":true}}
|
|||
|
});
|
|||
|
return lexer;
|
|||
|
})();
|
|||
|
parser.lexer = lexer;
|
|||
|
function Parser () {
|
|||
|
this.yy = {};
|
|||
|
}
|
|||
|
Parser.prototype = parser;parser.Parser = Parser;
|
|||
|
return new Parser;
|
|||
|
})();
|
|||
|
|
|||
|
|
|||
|
if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
|
|||
|
exports.parser = parser;
|
|||
|
exports.Parser = parser.Parser;
|
|||
|
exports.parse = function () { return parser.parse.apply(parser, arguments); };
|
|||
|
exports.main = function commonjsMain(args) {
|
|||
|
if (!args[1]) {
|
|||
|
console.log('Usage: '+args[0]+' FILE');
|
|||
|
process.exit(1);
|
|||
|
}
|
|||
|
var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8");
|
|||
|
return exports.parser.parse(source);
|
|||
|
};
|
|||
|
if (typeof module !== 'undefined' && require.main === module) {
|
|||
|
exports.main(process.argv.slice(1));
|
|||
|
}
|
|||
|
}
|
|||
|
}).call(this,require("1YiZ5S"))
|
|||
|
},{"1YiZ5S":3,"fs":1,"path":2}],9:[function(require,module,exports){
|
|||
|
/**
|
|||
|
* Created by knut on 14-11-19.
|
|||
|
*/
|
|||
|
var actors = {};
|
|||
|
var actorKeys = [];
|
|||
|
var messages = [];
|
|||
|
exports.addActor = function(id,name,description){
|
|||
|
//console.log('Adding actor: '+id);
|
|||
|
actors[id] = {name:name, description:description};
|
|||
|
actorKeys.push(id);
|
|||
|
};
|
|||
|
|
|||
|
exports.addMessage = function(idFrom, idTo, message, answer){
|
|||
|
//console.log('Adding message from='+idFrom+' to='+idTo+' message='+message+' answer='+answer);
|
|||
|
messages.push({from:idFrom, to:idTo, message:message, answer:answer});
|
|||
|
};
|
|||
|
|
|||
|
exports.getMessages = function(){
|
|||
|
return messages;
|
|||
|
};
|
|||
|
|
|||
|
exports.getActors = function(){
|
|||
|
return actors;
|
|||
|
};
|
|||
|
|
|||
|
exports.getActorKeys = function(){
|
|||
|
return actorKeys;
|
|||
|
};
|
|||
|
|
|||
|
exports.clear = function(){
|
|||
|
actors = {};
|
|||
|
messages = [];
|
|||
|
};
|
|||
|
},{}],10:[function(require,module,exports){
|
|||
|
/**
|
|||
|
* Created by knut on 14-11-23.
|
|||
|
*/
|
|||
|
|
|||
|
var sq = require('./parser/sequence').parser;
|
|||
|
sq.yy = require('./sequenceDb');
|
|||
|
|
|||
|
/**
|
|||
|
* Draws a flowchart in the tag with id: id based on the graph definition in text.
|
|||
|
* @param text
|
|||
|
* @param id
|
|||
|
*/
|
|||
|
module.exports.draw = function (text, id) {
|
|||
|
sq.yy.clear();
|
|||
|
sq.parse(text);
|
|||
|
|
|||
|
var actors = sq.yy.getActors();
|
|||
|
var actorKeys = sq.yy.getActorKeys();
|
|||
|
|
|||
|
var i;
|
|||
|
//console.log('Len = ' + )
|
|||
|
for(i=0;i<actorKeys.length;i++){
|
|||
|
var key = actorKeys[i];
|
|||
|
|
|||
|
//console.log('Doing key: '+key)
|
|||
|
|
|||
|
var startMargin = 50;
|
|||
|
var margin = 50;
|
|||
|
var width = 150;
|
|||
|
var yStartMargin = 10;
|
|||
|
|
|||
|
console.log('x=: '+(startMargin + i*margin +i*150))
|
|||
|
|
|||
|
var cont = d3.select("#mermaidChart0");
|
|||
|
var g = cont.append("g")
|
|||
|
g.append("rect")
|
|||
|
.attr("x", startMargin + i*margin +i*150)
|
|||
|
.attr("y", yStartMargin)
|
|||
|
.attr("fill", '#eaeaea')
|
|||
|
.attr("stroke", '#666')
|
|||
|
.attr("width", 150)
|
|||
|
.attr("height", 65)
|
|||
|
.attr("rx", 3)
|
|||
|
.attr("ry", 3)
|
|||
|
g.append("text") // text label for the x axis
|
|||
|
.attr("x", startMargin + i*margin +i*150 + 75)
|
|||
|
.attr("y", yStartMargin+37.5)
|
|||
|
.style("text-anchor", "middle")
|
|||
|
.text(actors[actorKeys[i]].description)
|
|||
|
;
|
|||
|
|
|||
|
}
|
|||
|
//
|
|||
|
////var cont = d3.select(id);
|
|||
|
//var cont = d3.select("#mermaidChart0");
|
|||
|
//var g = cont.append("g")
|
|||
|
// .attr("x", 150)
|
|||
|
// .attr("y", 10);
|
|||
|
//g.append("rect")
|
|||
|
// .attr("fill", '#eaeaea')
|
|||
|
// .attr("stroke", '#666')
|
|||
|
// .attr("width", 150)
|
|||
|
// .attr("height", 75)
|
|||
|
// .attr("rx", 5)
|
|||
|
// .attr("ry", 5)
|
|||
|
//g.append("text") // text label for the x axis
|
|||
|
// .style("text-anchor", "middle")
|
|||
|
// .text("Date pok ")
|
|||
|
// .attr("y", 10);
|
|||
|
/*
|
|||
|
graph.clear();
|
|||
|
flow.parser.yy = graph;
|
|||
|
|
|||
|
// Parse the graph definition
|
|||
|
flow.parser.parse(text);
|
|||
|
|
|||
|
// Fetch the default direction, use TD if none was found
|
|||
|
var dir;
|
|||
|
dir = graph.getDirection();
|
|||
|
if(typeof dir === 'undefined'){
|
|||
|
dir='TD';
|
|||
|
}
|
|||
|
|
|||
|
// Create the input mermaid.graph
|
|||
|
var g = new dagreD3.graphlib.Graph({multigraph:true})
|
|||
|
.setGraph({
|
|||
|
rankdir: dir,
|
|||
|
marginx: 20,
|
|||
|
marginy: 20
|
|||
|
|
|||
|
})
|
|||
|
.setDefaultEdgeLabel(function () {
|
|||
|
return {};
|
|||
|
});
|
|||
|
|
|||
|
// Fetch the verices/nodes and edges/links from the parsed graph definition
|
|||
|
var vert = graph.getVertices();
|
|||
|
var edges = graph.getEdges();
|
|||
|
var classes = graph.getClasses();
|
|||
|
|
|||
|
if(typeof classes.default === 'undefined'){
|
|||
|
classes.default = {id:'default'};
|
|||
|
classes.default.styles = ['fill:#eaeaea','stroke:#666','stroke-width:1.5px'];
|
|||
|
}
|
|||
|
addVertices(vert, g);
|
|||
|
addEdges(edges, g);
|
|||
|
|
|||
|
// Create the renderer
|
|||
|
var render = new dagreD3.render();
|
|||
|
|
|||
|
// Add custom shape for rhombus type of boc (decision)
|
|||
|
render.shapes().question = function (parent, bbox, node) {
|
|||
|
var w = bbox.width,
|
|||
|
h = bbox.height * 3,
|
|||
|
points = [
|
|||
|
{x: w / 2, y: 0},
|
|||
|
{x: w, y: -h / 2},
|
|||
|
{x: w / 2, y: -h},
|
|||
|
{x: 0, y: -h / 2}
|
|||
|
];
|
|||
|
shapeSvg = parent.insert("polygon", ":first-child")
|
|||
|
.attr("points", points.map(function (d) {
|
|||
|
return d.x + "," + d.y;
|
|||
|
}).join(" "))
|
|||
|
.style("fill", "#fff")
|
|||
|
.style("stroke", "#333")
|
|||
|
.attr("rx", 5)
|
|||
|
.attr("ry", 5)
|
|||
|
.attr("transform", "translate(" + (-w / 2) + "," + (h * 2 / 4) + ")");
|
|||
|
node.intersect = function (point) {
|
|||
|
return dagreD3.intersect.polygon(node, points, point);
|
|||
|
};
|
|||
|
return shapeSvg;
|
|||
|
};
|
|||
|
|
|||
|
// Add our custom arrow - an empty arrowhead
|
|||
|
render.arrows().none = function normal(parent, id, edge, type) {
|
|||
|
var marker = parent.append("marker")
|
|||
|
.attr("id", id)
|
|||
|
.attr("viewBox", "0 0 10 10")
|
|||
|
.attr("refX", 9)
|
|||
|
.attr("refY", 5)
|
|||
|
.attr("markerUnits", "strokeWidth")
|
|||
|
.attr("markerWidth", 8)
|
|||
|
.attr("markerHeight", 6)
|
|||
|
.attr("orient", "auto");
|
|||
|
|
|||
|
var path = marker.append("path")
|
|||
|
.attr("d", "M 0 0 L 0 0 L 0 0 z");
|
|||
|
dagreD3.util.applyStyle(path, edge[type + "Style"]);
|
|||
|
};
|
|||
|
|
|||
|
// Set up an SVG group so that we can translate the final graph.
|
|||
|
var svg = d3.select("#" + id);
|
|||
|
svgGroup = d3.select("#" + id + " g");
|
|||
|
|
|||
|
// Run the renderer. This is what draws the final graph.
|
|||
|
render(d3.select("#" + id + " g"), g);
|
|||
|
|
|||
|
// Center the graph
|
|||
|
var xCenterOffset = (svg.attr("width") - g.graph().width) / 2;
|
|||
|
//svgGroup.attr("transform", "translate(" + xCenterOffset + ", 20)");
|
|||
|
svg.attr("height", g.graph().height + 40);
|
|||
|
*/
|
|||
|
};
|
|||
|
|
|||
|
},{"./parser/sequence":8,"./sequenceDb":9}],11:[function(require,module,exports){
|
|||
|
/**
|
|||
|
* Created by knut on 14-11-23.
|
|||
|
*/
|
|||
|
module.exports.detectType = function(text){
|
|||
|
if(text.match(/^\s*sequence/)){
|
|||
|
return "sequence";
|
|||
|
}
|
|||
|
else{
|
|||
|
return "graph";
|
|||
|
}
|
|||
|
}
|
|||
|
},{}]},{},[5])
|
|||
|
function decodeHTMLEntities (str) {
|
|||
|
if(str && typeof str === 'string') {
|
|||
|
// strip script/html tags
|
|||
|
element = document.querySelector('.editor');
|
|||
|
|
|||
|
str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
|
|||
|
str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
|
|||
|
element.innerHTML = str;
|
|||
|
str = element.textContent;
|
|||
|
element.textContent = '';
|
|||
|
}
|
|||
|
|
|||
|
return str;
|
|||
|
}
|
|||
|
|
|||
|
var mermaidEditor = {
|
|||
|
$ : document.querySelector,
|
|||
|
textField : '',
|
|||
|
submit : '',
|
|||
|
graph : '',
|
|||
|
|
|||
|
init: function () {
|
|||
|
|
|||
|
document.querySelector('.button').addEventListener('click', function () {
|
|||
|
mermaidEditor.update();
|
|||
|
}.bind(this));
|
|||
|
},
|
|||
|
|
|||
|
update: function () {
|
|||
|
var txt = document.querySelector('.editor').value;
|
|||
|
txt = txt.replace(/>/g,'>');
|
|||
|
txt = txt.replace(/</g,'<');
|
|||
|
txt = decodeHTMLEntities(txt).trim();
|
|||
|
|
|||
|
document.querySelector('.mermaid').innerHTML = txt;
|
|||
|
mermaid.init();
|
|||
|
document.querySelector('.editor').value = txt;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
document.addEventListener('DOMContentLoaded', function () {
|
|||
|
|
|||
|
mermaidEditor.init();
|
|||
|
|
|||
|
}, false);
|
|||
|
|
|||
|
exports = mermaidEditor;
|