2014-11-13 19:53:31 +01:00
! 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 .
* /
2014-11-21 08:03:43 +01:00
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
2014-11-13 19:53:31 +01:00
} _ . 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
2014-11-21 08:03:43 +01:00
} ) ) ; _ . 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 ) {
var graph = require ( './graphDb' ) ;
var flow = require ( './parser/flow' ) ;
2014-11-24 22:03:32 +01:00
var utils = require ( './utils' ) ;
var seq = require ( './sequenceRenderer' ) ;
2014-11-21 08:03:43 +01:00
/ * *
* 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 ) ;
2014-11-22 15:34:21 +01:00
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 ;
}
2014-11-21 08:03:43 +01:00
// 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 ;
2014-11-22 15:34:21 +01:00
2014-11-21 08:03:43 +01:00
var style = '' ;
2014-11-22 15:34:21 +01:00
var classes = graph . getClasses ( ) ;
// Check if class is defined for the node
2014-11-22 17:27:08 +01:00
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 ) ;
2014-11-21 08:03:43 +01:00
}
2014-11-22 15:34:21 +01:00
// Create a compound style definition from the style definitions found for the node in the graph definition
style = styleFromStyleArr ( style , vertice . styles ) ;
2014-11-21 08:03:43 +01:00
// Use vertice id as text in the box if no text is provided by the graph definition
if ( vertice . text === undefined ) {
verticeText = vertice . id ;
}
else {
verticeText = vertice . text ;
}
2014-11-22 15:34:21 +01:00
// Create the node in the graph based on defined form
2014-11-21 08:03:43 +01:00
if ( vertice . type === 'round' ) {
2014-11-24 22:03:32 +01:00
g . setNode ( vertice . id , { label : verticeText , rx : 5 , ry : 5 , style : style , id : vertice . id } ) ;
2014-11-21 08:03:43 +01:00
} else {
if ( vertice . type === 'diamond' ) {
2014-11-24 22:03:32 +01:00
g . setNode ( vertice . id , { shape : "question" , label : verticeText , rx : 0 , ry : 0 , style : style , id : vertice . id } ) ;
2014-11-21 08:03:43 +01:00
} else {
2014-11-24 22:03:32 +01:00
g . setNode ( vertice . id , { label : verticeText , rx : 0 , ry : 0 , style : style , id : vertice . id } ) ;
2014-11-21 08:03:43 +01:00
}
}
} ) ;
} ;
/ * *
* Add edges to graph based on parsed graph defninition
* @ param edges
* @ param g
* /
var addEdges = function ( edges , g ) {
2014-11-22 15:34:21 +01:00
var cnt = 0 ;
2014-11-21 08:03:43 +01:00
edges . forEach ( function ( edge ) {
2014-11-22 15:34:21 +01:00
cnt ++ ;
2014-11-21 08:03:43 +01:00
// Set link type for rendering
if ( edge . type === 'arrow_open' ) {
aHead = 'none' ;
}
else {
aHead = 'vee' ;
}
// Add the edge to the graph
2014-11-22 15:34:21 +01:00
if ( typeof edge . text === 'undefined' ) {
2014-11-21 08:03:43 +01:00
if ( typeof edge . style === 'undefined' ) {
2014-11-22 19:06:04 +01:00
g . setEdge ( edge . start , edge . end , { style : "stroke: #333; stroke-width: 1.5px;fill:none" , arrowheadStyle : "fill: #333" , arrowhead : aHead } , cnt ) ;
2014-11-21 08:03:43 +01:00
} else {
g . setEdge ( edge . start , edge . end , {
style : edge . style , arrowheadStyle : "fill: #333" , arrowhead : aHead
2014-11-22 15:34:21 +01:00
} , cnt ) ;
2014-11-21 08:03:43 +01:00
}
}
2014-11-22 15:34:21 +01:00
// Edge with text
2014-11-21 08:03:43 +01:00
else {
2014-11-22 15:34:21 +01:00
2014-11-21 08:03:43 +01:00
if ( typeof edge . style === 'undefined' ) {
2014-11-22 19:06:04 +01:00
g . setEdge ( edge . start , edge . end , { style : "stroke: #333; stroke-width: 1.5px;fill:none" , label : edge . text , arrowheadStyle : "fill: #333" , arrowhead : aHead } , cnt ) ;
2014-11-21 08:03:43 +01:00
} else {
2014-11-22 15:34:21 +01:00
2014-11-21 08:03:43 +01:00
g . setEdge ( edge . start , edge . end , {
style : edge . style , arrowheadStyle : "fill: #333" , label : edge . text , arrowhead : aHead
2014-11-22 15:34:21 +01:00
} , cnt ) ;
2014-11-21 08:03:43 +01:00
}
}
} ) ;
} ;
/ * *
2014-11-24 22:03:32 +01:00
* Draws a flowchart in the tag with id : id based on the graph definition in text .
2014-11-21 08:03:43 +01:00
* @ param text
* @ param id
* /
2014-11-24 22:03:32 +01:00
var draw = function ( text , id ) {
2014-11-21 08:03:43 +01:00
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
2014-11-22 15:34:21 +01:00
var g = new dagreD3 . graphlib . Graph ( { multigraph : true } )
2014-11-21 08:03:43 +01:00
. setGraph ( {
rankdir : dir ,
marginx : 20 ,
marginy : 20
2014-11-22 15:34:21 +01:00
2014-11-21 08:03:43 +01:00
} )
. setDefaultEdgeLabel ( function ( ) {
return { } ;
} ) ;
// Fetch the verices/nodes and edges/links from the parsed graph definition
var vert = graph . getVertices ( ) ;
var edges = graph . getEdges ( ) ;
2014-11-22 17:27:08 +01:00
var classes = graph . getClasses ( ) ;
if ( typeof classes . default === 'undefined' ) {
classes . default = { id : 'default' } ;
classes . default . styles = [ 'fill:#eaeaea' , 'stroke:#666' , 'stroke-width:1.5px' ] ;
}
2014-11-21 08:03:43 +01:00
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 ) ;
} ;
/ * *
* 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 chartText = element . textContent . trim ( ) ;
element . innerHTML = '<svg id="' + id + '" width="100%">' +
'<g />' +
'</svg>' ;
2014-11-24 22:03:32 +01:00
if ( utils . detectType ( chartText ) === 'graph' ) {
draw ( chartText , id ) ;
graph . bindFunctions ( ) ;
}
else {
seq . draw ( chartText , id ) ;
}
2014-11-21 08:03:43 +01:00
}
;
} ;
/ * *
* Version management
* @ returns { string }
* /
exports . version = function ( ) {
2014-11-24 22:03:32 +01:00
return '0.2.3' ;
2014-11-21 08:03:43 +01:00
}
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 ( ) {
2014-11-22 10:02:38 +01:00
return exports . version ( ) ;
2014-11-21 08:03:43 +01:00
}
} ;
} ) . call ( this , typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : { } )
2014-11-24 22:03:32 +01:00
} , { "./graphDb" : 5 , "./parser/flow" : 6 , "./sequenceRenderer" : 9 , "./utils" : 10 } ] , 5 : [ function ( require , module , exports ) {
2014-11-21 08:03:43 +01:00
/ * *
* Created by knut on 14 - 11 - 03.
* /
var vertices = { } ;
var edges = [ ] ;
2014-11-22 15:34:21 +01:00
var classes = [ ] ;
2014-11-21 08:03:43 +01:00
var direction ;
2014-11-24 22:03:32 +01:00
// Functions to be run after graph rendering
var funs = [ ] ;
2014-11-21 08:03:43 +01:00
/ * *
* 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 ) {
2014-11-22 15:34:21 +01:00
//console.log('Got node ' + id + ' ' + type + ' ' + text + ' styles: ' + JSON.stringify(style));
2014-11-21 08:03:43 +01:00
if ( typeof vertices [ id ] === 'undefined' ) {
2014-11-22 15:34:21 +01:00
vertices [ id ] = { id : id , styles : [ ] , classes : [ ] } ;
2014-11-21 08:03:43 +01:00
}
if ( typeof text !== 'undefined' ) {
vertices [ id ] . text = text ;
}
if ( typeof type !== 'undefined' ) {
vertices [ id ] . type = type ;
}
2014-11-22 15:34:21 +01:00
if ( typeof type !== 'undefined' ) {
vertices [ id ] . type = type ;
}
2014-11-21 08:03:43 +01:00
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 [ position ] . style = style ;
} ;
2014-11-22 15:34:21 +01:00
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 ) ;
} ) ;
}
}
} ;
2014-11-21 08:03:43 +01:00
/ * *
* Called by parser when a graph definition is found , stores the direction of the chart .
* @ param dir
* /
exports . setDirection = function ( dir ) {
direction = dir ;
} ;
2014-11-22 15:34:21 +01:00
/ * *
* 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 ) ;
}
}
} ;
2014-11-24 22:03:32 +01:00
/ * *
* 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);
2014-11-22 15:34:21 +01:00
2014-11-24 22:03:32 +01:00
} ;
2014-11-21 08:03:43 +01:00
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 ;
} ;
2014-11-22 15:34:21 +01:00
/ * *
* Retrieval function for fetching the found class definitions after parsing has completed .
* @ returns { { } | * | classes }
* /
exports . getClasses = function ( ) {
return classes ;
} ;
2014-11-21 08:03:43 +01:00
/ * *
* Clears the internal graph db so that a new graph can be parsed .
* /
exports . clear = function ( ) {
vertices = { } ;
2014-11-22 15:34:21 +01:00
classes = { } ;
2014-11-21 08:03:43 +01:00
edges = [ ] ;
2014-11-24 22:03:32 +01:00
funs = [ ] ;
2014-11-21 08:03:43 +01:00
} ;
/ * *
*
* @ returns { string }
* /
exports . defaultStyle = function ( ) {
return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;" ;
} ;
} , { } ] , 6 : [ function ( require , module , exports ) {
( function ( process ) {
2014-11-13 19:53:31 +01:00
/* 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 ( ) {
2014-11-24 22:03:32 +01:00
var o = function ( k , v , o , l ) { for ( o = o || { } , l = k . length ; l -- ; o [ k [ l ] ] = v ) ; return o } , $V0 = [ 1 , 7 ] , $V1 = [ 2 , 13 ] , $V2 = [ 1 , 21 ] , $V3 = [ 1 , 22 ] , $V4 = [ 1 , 23 ] , $V5 = [ 1 , 24 ] , $V6 = [ 1 , 25 ] , $V7 = [ 1 , 26 ] , $V8 = [ 1 , 27 ] , $V9 = [ 1 , 28 ] , $Va = [ 1 , 29 ] , $Vb = [ 1 , 30 ] , $Vc = [ 1 , 15 ] , $Vd = [ 1 , 16 ] , $Ve = [ 1 , 17 ] , $Vf = [ 1 , 14 ] , $Vg = [ 6 , 9 ] , $Vh = [ 11 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 48 , 50 , 51 , 52 ] , $Vi = [ 2 , 7 ] , $Vj = [ 11 , 43 , 44 , 45 , 46 ] , $Vk = [ 9 , 11 , 21 , 23 , 24 , 25 , 26 , 27 , 43 , 44 , 45 , 46 , 47 ] , $Vl = [ 9 , 11 , 21 , 23 , 24 , 25 , 26 , 27 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 43 , 44 , 45 , 46 , 47 ] , $Vm = [ 9 , 11 , 21 , 23 , 24 , 25 , 26 , 27 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 43 , 44 , 45 , 46 , 47 ] , $Vn = [ 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 ] , $Vo = [ 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 47 ] , $Vp = [ 23 , 25 , 27 , 47 ] , $Vq = [ 1 , 93 ] , $Vr = [ 1 , 90 ] , $Vs = [ 1 , 88 ] , $Vt = [ 1 , 91 ] , $Vu = [ 1 , 89 ] , $Vv = [ 1 , 94 ] , $Vw = [ 1 , 92 ] , $Vx = [ 1 , 101 ] , $Vy = [ 11 , 34 ] , $Vz = [ 9 , 11 , 30 , 31 , 32 , 33 , 34 , 53 , 56 ] ;
2014-11-13 19:53:31 +01:00
var parser = { trace : function trace ( ) { } ,
yy : { } ,
2014-11-24 22:03:32 +01:00
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 , "classDefStatement" : 15 , "classStatement" : 16 , "clickStatement" : 17 , "vertex" : 18 , "link" : 19 , "alphaNum" : 20 , "SQS" : 21 , "text" : 22 , "SQE" : 23 , "PS" : 24 , "PE" : 25 , "DIAMOND_START" : 26 , "DIAMOND_STOP" : 27 , "alphaNumStatement" : 28 , "alphaNumToken" : 29 , "MINUS" : 30 , "ALPHA" : 31 , "NUM" : 32 , "COLON" : 33 , "COMMA" : 34 , "PLUS" : 35 , "EQUALS" : 36 , "MULT" : 37 , "DOT" : 38 , "TAGSTART" : 39 , "TAGEND" : 40 , "linkStatement" : 41 , "arrowText" : 42 , "ARROW_POINT" : 43 , "ARROW_CIRCLE" : 44 , "ARROW_CROSS" : 45 , "ARROW_OPEN" : 46 , "PIPE" : 47 , "CLASSDEF" : 48 , "stylesOpt" : 49 , "CLASS" : 50 , "CLICK" : 51 , "STYLE" : 52 , "HEX" : 53 , "style" : 54 , "styleComponent" : 55 , "UNIT" : 56 , "$accept" : 0 , "$end" : 1 } ,
terminals _ : { 2 : "error" , 6 : "EOF" , 8 : "GRAPH" , 9 : "SPACE" , 10 : "DIR" , 11 : "SEMI" , 21 : "SQS" , 23 : "SQE" , 24 : "PS" , 25 : "PE" , 26 : "DIAMOND_START" , 27 : "DIAMOND_STOP" , 30 : "MINUS" , 31 : "ALPHA" , 32 : "NUM" , 33 : "COLON" , 34 : "COMMA" , 35 : "PLUS" , 36 : "EQUALS" , 37 : "MULT" , 38 : "DOT" , 39 : "TAGSTART" , 40 : "TAGEND" , 43 : "ARROW_POINT" , 44 : "ARROW_CIRCLE" , 45 : "ARROW_CROSS" , 46 : "ARROW_OPEN" , 47 : "PIPE" , 48 : "CLASSDEF" , 50 : "CLASS" , 51 : "CLICK" , 52 : "STYLE" , 53 : "HEX" , 56 : "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 ] , [ 13 , 0 ] , [ 13 , 3 ] , [ 13 , 1 ] , [ 18 , 4 ] , [ 18 , 4 ] , [ 18 , 4 ] , [ 18 , 1 ] , [ 20 , 1 ] , [ 20 , 2 ] , [ 28 , 1 ] , [ 28 , 3 ] , [ 29 , 1 ] , [ 29 , 1 ] , [ 29 , 1 ] , [ 29 , 1 ] , [ 29 , 1 ] , [ 29 , 1 ] , [ 29 , 1 ] , [ 29 , 1 ] , [ 29 , 1 ] , [ 29 , 1 ] , [ 19 , 2 ] , [ 19 , 1 ] , [ 41 , 1 ] , [ 41 , 1 ] , [ 41 , 1 ] , [ 41 , 1 ] , [ 42 , 3 ] , [ 22 , 3 ] , [ 22 , 5 ] , [ 22 , 1 ] , [ 15 , 5 ] , [ 16 , 5 ] , [ 17 , 5 ] , [ 14 , 5 ] , [ 14 , 5 ] , [ 49 , 1 ] , [ 49 , 3 ] , [ 54 , 1 ] , [ 54 , 2 ] , [ 55 , 1 ] , [ 55 , 1 ] , [ 55 , 1 ] , [ 55 , 1 ] , [ 55 , 1 ] , [ 55 , 1 ] , [ 55 , 1 ] ] ,
2014-11-13 19:53:31 +01:00
performAction : function anonymous ( yytext , yyleng , yylineno , yy , yystate /* action[1] */ , $$ /* vstack */ , _$ /* lstack */ ) {
/* this == yyval */
var $0 = $$ . length - 1 ;
switch ( yystate ) {
2014-11-15 21:28:26 +01:00
case 2 :
this . $ = $$ [ $0 - 3 ] ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-15 21:28:26 +01:00
case 3 :
2014-11-21 08:03:43 +01:00
yy . setDirection ( $$ [ $0 - 1 ] ) ; this . $ = $$ [ $0 - 1 ] ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 14 :
2014-11-21 08:03:43 +01:00
yy . addLink ( $$ [ $0 - 2 ] , $$ [ $0 ] , $$ [ $0 - 1 ] ) ; this . $ = 'oy'
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 15 :
2014-11-21 08:03:43 +01:00
this . $ = 'yo' ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 16 :
2014-11-15 21:28:26 +01:00
this . $ = $$ [ $0 - 3 ] ; yy . addVertex ( $$ [ $0 - 3 ] , $$ [ $0 - 1 ] , 'square' ) ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 17 :
2014-11-15 21:28:26 +01:00
this . $ = $$ [ $0 - 3 ] ; yy . addVertex ( $$ [ $0 - 3 ] , $$ [ $0 - 1 ] , 'round' ) ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 18 :
2014-11-15 21:28:26 +01:00
this . $ = $$ [ $0 - 3 ] ; yy . addVertex ( $$ [ $0 - 3 ] , $$ [ $0 - 1 ] , 'diamond' ) ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 19 :
2014-11-21 08:03:43 +01:00
this . $ = $$ [ $0 ] ; yy . addVertex ( $$ [ $0 ] ) ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 20 : case 22 : case 24 : case 25 : case 51 :
2014-11-16 09:02:03 +01:00
this . $ = $$ [ $0 ] ;
break ;
2014-11-24 22:03:32 +01:00
case 21 :
2014-11-16 09:02:03 +01:00
this . $ = $$ [ $0 - 1 ] + '' + $$ [ $0 ] ;
break ;
2014-11-24 22:03:32 +01:00
case 23 :
2014-11-16 10:35:18 +01:00
this . $ = $$ [ $0 - 2 ] + '-' + $$ [ $0 ] ;
break ;
2014-11-24 22:03:32 +01:00
case 26 : case 27 : case 28 : case 29 : case 30 : case 31 : case 32 : case 33 : case 35 : case 43 :
2014-11-13 19:53:31 +01:00
this . $ = $$ [ $0 ] ;
break ;
2014-11-24 22:03:32 +01:00
case 34 :
2014-11-22 10:02:38 +01:00
$$ [ $0 - 1 ] . text = $$ [ $0 ] ; this . $ = $$ [ $0 - 1 ] ;
break ;
2014-11-24 22:03:32 +01:00
case 36 :
2014-11-13 19:53:31 +01:00
this . $ = { "type" : "arrow" } ;
break ;
2014-11-24 22:03:32 +01:00
case 37 :
2014-11-13 19:53:31 +01:00
this . $ = { "type" : "arrow_circle" } ;
break ;
2014-11-24 22:03:32 +01:00
case 38 :
2014-11-13 19:53:31 +01:00
this . $ = { "type" : "arrow_cross" } ;
break ;
2014-11-24 22:03:32 +01:00
case 39 :
2014-11-13 19:53:31 +01:00
this . $ = { "type" : "arrow_open" } ;
break ;
2014-11-24 22:03:32 +01:00
case 40 :
2014-11-21 08:03:43 +01:00
this . $ = $$ [ $0 - 1 ] ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 41 :
2014-11-15 21:28:26 +01:00
this . $ = $$ [ $0 - 2 ] + ' ' + $$ [ $0 ] ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 42 :
2014-11-17 07:50:42 +01:00
this . $ = $$ [ $0 - 4 ] + ' - ' + $$ [ $0 ] ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 44 :
2014-11-22 15:34:21 +01:00
this . $ = $$ [ $0 - 4 ] ; yy . addClass ( $$ [ $0 - 2 ] , $$ [ $0 ] ) ;
break ;
2014-11-24 22:03:32 +01:00
case 45 :
2014-11-22 15:34:21 +01:00
this . $ = $$ [ $0 - 4 ] ; yy . setClass ( $$ [ $0 - 2 ] , $$ [ $0 ] ) ;
break ;
2014-11-24 22:03:32 +01:00
case 46 :
this . $ = $$ [ $0 - 4 ] ; yy . setClickEvent ( $$ [ $0 - 2 ] , $$ [ $0 ] ) ;
break ;
case 47 :
2014-11-15 21:28:26 +01:00
this . $ = $$ [ $0 - 4 ] ; yy . addVertex ( $$ [ $0 - 2 ] , undefined , undefined , $$ [ $0 ] ) ;
break ;
2014-11-24 22:03:32 +01:00
case 48 :
2014-11-21 08:03:43 +01:00
this . $ = $$ [ $0 - 4 ] ; yy . updateLink ( $$ [ $0 - 2 ] , $$ [ $0 ] ) ;
2014-11-15 21:28:26 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 49 :
2014-11-15 21:28:26 +01:00
this . $ = [ $$ [ $0 ] ]
break ;
2014-11-24 22:03:32 +01:00
case 50 :
2014-11-15 21:28:26 +01:00
$$ [ $0 - 2 ] . push ( $$ [ $0 ] ) ; this . $ = $$ [ $0 - 2 ] ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 52 :
2014-11-15 21:28:26 +01:00
this . $ = $$ [ $0 - 1 ] + $$ [ $0 ] ;
break ;
2014-11-24 22:03:32 +01:00
case 53 : case 54 : case 55 : case 56 : case 57 : case 58 : case 59 :
2014-11-15 21:28:26 +01:00
this . $ = $$ [ $0 ]
2014-11-13 19:53:31 +01:00
break ;
}
} ,
2014-11-24 22:03:32 +01:00
table : [ { 3 : 1 , 4 : 2 , 8 : [ 1 , 3 ] } , { 1 : [ 3 ] } , { 5 : 4 , 7 : 5 , 9 : $V0 , 11 : $V1 , 12 : 6 , 13 : 8 , 14 : 9 , 15 : 10 , 16 : 11 , 17 : 12 , 18 : 13 , 20 : 18 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb , 48 : $Vc , 50 : $Vd , 51 : $Ve , 52 : $Vf } , { 9 : [ 1 , 31 ] } , { 6 : [ 1 , 32 ] , 7 : 33 , 9 : $V0 } , { 5 : 34 , 11 : $V1 , 12 : 6 , 13 : 8 , 14 : 9 , 15 : 10 , 16 : 11 , 17 : 12 , 18 : 13 , 20 : 18 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb , 48 : $Vc , 50 : $Vd , 51 : $Ve , 52 : $Vf } , o ( $Vg , [ 2 , 5 ] ) , o ( $Vh , $Vi , { 7 : 35 , 9 : $V0 } ) , { 11 : [ 1 , 36 ] } , { 11 : [ 1 , 37 ] } , { 11 : [ 1 , 38 ] } , { 11 : [ 1 , 39 ] } , { 11 : [ 1 , 40 ] } , { 11 : [ 2 , 15 ] , 19 : 41 , 41 : 42 , 43 : [ 1 , 43 ] , 44 : [ 1 , 44 ] , 45 : [ 1 , 45 ] , 46 : [ 1 , 46 ] } , { 9 : [ 1 , 47 ] } , { 9 : [ 1 , 48 ] } , { 9 : [ 1 , 49 ] } , { 9 : [ 1 , 50 ] } , o ( $Vj , [ 2 , 19 ] , { 21 : [ 1 , 51 ] , 24 : [ 1 , 52 ] , 26 : [ 1 , 53 ] } ) , o ( $Vk , [ 2 , 20 ] , { 28 : 19 , 29 : 20 , 20 : 54 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } ) , o ( $Vl , [ 2 , 22 ] , { 30 : [ 1 , 55 ] } ) , o ( $Vm , [ 2 , 24 ] ) , o ( $Vm , [ 2 , 25 ] ) , o ( $Vm , [ 2 , 26 ] ) , o ( $Vm , [ 2 , 27 ] ) , o ( $Vm , [ 2 , 28 ] ) , o ( $Vm , [ 2 , 29 ] ) , o ( $Vm , [ 2 , 30 ] ) , o ( $Vm , [ 2 , 31 ] ) , o ( $Vm , [ 2 , 32 ] ) , o ( $Vm , [ 2 , 33 ] ) , { 10 : [ 1 , 56 ] } , { 1 : [ 2 , 1 ] } , { 11 : $V1 , 12 : 57 , 13 : 8 , 14 : 9 , 15 : 10 , 16 : 11 , 17 : 12 , 18 : 13 , 20 : 18 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb , 48 : $Vc , 50 : $Vd , 51 : $Ve , 52 : $Vf } , { 6 : [ 1 , 58 ] , 7 : 33 , 9 : $V0 } , o ( $Vh , [ 2 , 6 ] ) , o ( $Vg , [ 2 , 8 ] ) , o ( $Vg , [ 2 , 9 ] ) , o ( $Vg , [ 2 , 10 ] ) , o ( $Vg , [ 2 , 11 ] ) , o ( $Vg , [ 2 , 12 ] ) , { 18 : 59 , 20 : 18 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , o ( $Vn , [ 2 , 35 ] , { 42 : 60 , 47 : [ 1 , 61 ] } ) , o ( $Vo , [ 2 , 36 ] ) , o ( $Vo , [ 2 , 37 ] ) , o ( $Vo , [ 2 , 38 ] ) , o ( $Vo , [ 2 , 39 ] ) , { 20 : 62 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb , 53 : [ 1 , 63 ] } , { 20 : 64 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , { 20 : 65 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , { 20 : 66 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , { 20 : 68 , 22 : 67 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , { 20 : 68 , 22 : 69 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , { 20 : 68 , 22 : 70 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , o ( $Vk , [ 2 , 21 ] ) , { 29 : 71 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , { 11 : [ 1 , 72 ] } , o ( $Vg , [ 2 , 4 ] ) , { 1 : [ 2 , 2 ] } , { 11 : [ 2 , 14 ] } , o ( $Vn , [ 2 , 34 ] ) , { 20 : 68 , 22 : 73 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , { 9 : [ 1 , 74 ] } , { 9 : [ 1 , 75 ] } , { 9 : [ 1 , 76 ] } , { 9 : [ 1 , 77 ] } , { 9 : [ 1 , 78 ] } , { 23 : [ 1 , 79 ] } , o ( $Vp , [ 2 , 43 ] , { 7 : 81 , 9 : [ 1 , 80 ] } ) , { 25 : [ 1 , 82 ] } , { 27 : [ 1 , 83 ] } , o ( $Vl , [ 2 , 23 ] ) , o ( [ 9 , 11 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 48 , 50 , 51 , 52 ] , [ 2 , 3 ] ) , { 47 : [ 1 , 84 ] } , { 9 : $Vq , 30 : $Vr , 31 : $Vs , 32 : $Vt , 33 : $Vu , 49 : 85 , 53 : $Vv , 54 : 86 , 55 : 87 , 56 : $Vw } , { 9 : $Vq , 30 : $Vr , 31 : $Vs , 32 : $Vt , 33 : $Vu , 49 : 95 , 53 : $Vv , 54 : 86 , 55 : 87 , 56 : $Vw } , { 9 : $Vq , 30 : $Vr , 31 : $Vs , 32 : $Vt , 33 : $Vu , 49 : 96 , 53 : $Vv , 54 : 86 , 55 : 87 , 56 : $Vw } , { 20 : 97 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , { 20 : 98 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , o ( $Vj , [ 2 , 16 ] ) , { 7 : 35 , 9 : $V0 , 20 : 68 , 22 : 99 , 28 : 19 , 29 : 20 , 30 : $Vi , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , { 30 : [ 1 , 100 ] } , o ( $Vj , [ 2 , 17 ] ) , o ( $Vj , [ 2 , 18 ] ) , o ( $Vn , [ 2 , 40 ] ) , { 11 : [ 2 , 47 ] , 34 : $Vx } , o ( $Vy , [ 2 , 49 ] , { 55 : 102 , 9 : $Vq , 30 : $Vr , 31 : $Vs , 32 : $Vt , 33 : $Vu , 53 : $Vv , 56 : $Vw } ) , o ( $Vz , [ 2 , 51 ] ) , o ( $Vz , [ 2 , 53 ] ) , o ( $Vz , [ 2 , 54 ] ) , o ( $Vz , [ 2 , 55 ] ) , o ( $Vz , [ 2 , 56 ] ) , o ( $Vz , [ 2 , 57 ] ) , o ( $Vz , [ 2 , 58 ] ) , o ( $Vz , [ 2 , 59 ] ) , { 11 : [ 2 , 48 ] , 34 : $Vx } , { 11 : [ 2 , 44 ] , 34 : $Vx } , { 11 : [ 2 , 45 ] } , { 11 : [ 2 , 46 ] } , o ( $Vp , [ 2 , 41 ] ) , { 7 : 103 , 9 : $V0 } , { 9 : $Vq , 30 : $Vr , 31 : $Vs , 32 : $Vt , 33 : $Vu , 53 : $Vv , 54 : 104 , 55 : 87 , 56 : $Vw } , o ( $Vz , [ 2 , 52 ] ) , { 20 : 68 , 22 : 105 , 28 : 19 , 29 : 20 , 31 : $V2 , 32 : $V3 , 33 : $V4 , 34 : $V5 , 35 : $V6 , 36 : $V7 , 37 : $V8 , 38 : $V9 , 39 : $Va , 40 : $Vb } , o ( $Vy , [ 2 , 50 ] , { 55 : 102 , 9 : $Vq , 30 : $Vr , 31 : $Vs , 32 : $Vt , 33 : $Vu , 53 : $Vv , 56 : $Vw } ) , o ( $Vp , [ 2 , 42 ] ) ] ,
defaultActions : { 32 : [ 2 , 1 ] , 58 : [ 2 , 2 ] , 59 : [ 2 , 14 ] , 97 : [ 2 , 45 ] , 98 : [ 2 , 46 ] } ,
2014-11-13 19:53:31 +01:00
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 ;
} } ;
2014-11-21 08:03:43 +01:00
/* generated by jison-lex 0.3.4 */
2014-11-13 19:53:31 +01:00
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 ) {
2014-11-24 22:03:32 +01:00
case 0 : return 52 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 1 : return 48 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 2 : return 50 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 3 : return 51 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 4 : return 8 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-22 15:34:21 +01:00
case 5 : return 10 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-22 17:27:08 +01:00
case 6 : return 10 ;
break ;
case 7 : return 10 ;
break ;
case 8 : return 10 ;
break ;
case 9 : return 10 ;
break ;
2014-11-24 22:03:32 +01:00
case 10 : return 10 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 11 : return 53 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 12 : return 32 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 13 : return 'BRKT' ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 14 : return 56 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 15 : return 56 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 16 : return 56 ;
2014-11-22 10:02:38 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 17 : return 33 ;
2014-11-22 10:02:38 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 18 : return 11 ;
2014-11-22 10:02:38 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 19 : return 34 ;
2014-11-22 10:02:38 +01:00
break ;
2014-11-22 17:27:08 +01:00
case 20 : return 36 ;
2014-11-22 10:02:38 +01:00
break ;
2014-11-22 17:27:08 +01:00
case 21 : return 37 ;
2014-11-22 10:02:38 +01:00
break ;
2014-11-22 17:27:08 +01:00
case 22 : return 38 ;
2014-11-22 15:34:21 +01:00
break ;
2014-11-22 17:27:08 +01:00
case 23 : return 39 ;
2014-11-22 15:34:21 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 24 : return 40 ;
2014-11-22 10:02:38 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 25 : return 45 ;
2014-11-16 10:35:18 +01:00
break ;
2014-11-22 17:27:08 +01:00
case 26 : return 43 ;
2014-11-15 21:28:26 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 27 : return 44 ;
2014-11-15 21:28:26 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 28 : return 46 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 29 : return 30 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-22 17:27:08 +01:00
case 30 : return 35 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 31 : return 36 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 32 : return 31 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 33 : return 47 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-22 17:27:08 +01:00
case 34 : return 24 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 35 : return 25 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 36 : return 21 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 37 : return 23 ;
2014-11-13 19:53:31 +01:00
break ;
2014-11-22 17:27:08 +01:00
case 38 : return 26
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 39 : return 27
2014-11-13 19:53:31 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 40 : return 9 ;
2014-11-15 21:28:26 +01:00
break ;
2014-11-24 22:03:32 +01:00
case 41 : return 'NEWLINE' ;
break ;
case 42 : return 6 ;
2014-11-13 19:53:31 +01:00
break ;
}
} ,
2014-11-24 22:03:32 +01:00
rules : [ /^(?:style\b)/ , /^(?:classDef\b)/ , /^(?:class\b)/ , /^(?:click\b)/ , /^(?:graph\b)/ , /^(?:LR\b)/ , /^(?:RL\b)/ , /^(?:TB\b)/ , /^(?:BT\b)/ , /^(?:TD\b)/ , /^(?:BR\b)/ , /^(?:#[a-f0-9]+)/ , /^(?:[0-9]+)/ , /^(?:#)/ , /^(?:px\b)/ , /^(?:pt\b)/ , /^(?:dot\b)/ , /^(?::)/ , /^(?:;)/ , /^(?:,)/ , /^(?:=)/ , /^(?:\*)/ , /^(?:\.)/ , /^(?:<)/ , /^(?:>)/ , /^(?:--[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 , 41 , 42 ] , "inclusive" : true } }
2014-11-13 19:53:31 +01:00
} ) ;
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 ) ) ;
}
}
2014-11-21 08:03:43 +01:00
} ) . call ( this , require ( "1YiZ5S" ) )
2014-11-24 22:03:32 +01:00
} , { "1YiZ5S" : 3 , "fs" : 1 , "path" : 2 } ] , 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 , 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 } ] , 8 : [ 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 = [ ] ;
} ;
} , { } ] , 9 : [ 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" : 7 , "./sequenceDb" : 8 } ] , 10 : [ 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" ;
}
}
} , { } ] } , { } , [ 4 ] )