diff --git a/dist/autolayout.js b/dist/autolayout.js index 264d7e3..ab4e1cd 100644 --- a/dist/autolayout.js +++ b/dist/autolayout.js @@ -8,8 +8,7 @@ * @copyright Gloey Apps, 2015 * * @library autolayout.js -* @version 0.4.2 -* @generated 28-07-2015 +* @version 0.4.3 */ /** * Parts Copyright (C) 2011-2012, Alex Russell (slightlyoff@chromium.org) @@ -18,31 +17,7 @@ * Use of this source code is governed by the LGPL, which can be found in the * COPYING.LGPL file. */ - (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AutoLayout = f()}})(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;oMath.abs(d):0==d?e>Math.abs(c):Math.abs(c-d)64||this._deleted>this._compactThreshold&&(this._compact(),this._deleted=0)},"delete":function(a){a=b(a),this._store.hasOwnProperty(a)&&(this._deleted++,delete this._store[a],this.size>0&&this.size--)},each:function(a,b){if(this.size){this._perhapsCompact();var c=this._store,d=this._keyStrMap;Object.keys(this._store).forEach(function(e){a.call(b||null,d[e],c[e])},this)}},escapingEach:function(a,b){if(this.size){this._perhapsCompact();for(var c=this,e=this._store,f=this._keyStrMap,g=d,h=Object.keys(e),i=0;h.length>i;i++)if(function(d){c._store.hasOwnProperty(d)&&(g=a.call(b||null,f[d],e[d]))}(h[i]),g){if(void 0!==g.retval)return g;if(g.brk)break}}},clone:function(){var b=new a.HashTable;return this.size&&(b.size=this.size,c(this._store,b._store),c(this._keyStrMap,b._keyStrMap)),b},equals:function(b){if(b===this)return!0;if(!(b instanceof a.HashTable)||b._size!==this._size)return!1;for(var c=Object.keys(this._store),d=0;c.length>d;d++){var e=c[d];if(this._keyStrMap[e]!==b._keyStrMap[e]||this._store[e]!==b._store[e])return!1}return!0},toString:function(){var b="";return this.each(function(a,c){b+=a+" => "+c+"\n"}),b}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.HashSet=a.inherit({_t:"c.HashSet",initialize:function(){this.storage=[],this.size=0},add:function(a){var b=this.storage;b.indexOf(a),-1==b.indexOf(a)&&b.push(a),this.size=this.storage.length},values:function(){return this.storage},has:function(a){var b=this.storage;return-1!=b.indexOf(a)},"delete":function(a){var b=this.storage.indexOf(a);return-1==b?null:(this.storage.splice(b,1)[0],this.size=this.storage.length,void 0)},clear:function(){this.storage.length=0},each:function(a,b){this.size&&this.storage.forEach(a,b)},escapingEach:function(a,b){this.size&&this.storage.forEach(a,b)},toString:function(){var a=this.size+" {",b=!0;return this.each(function(c){b?b=!1:a+=", ",a+=c}),a+="}\n"},toJSON:function(){var a=[];return this.each(function(b){a.push(b.toJSON())}),{_t:"c.HashSet",data:a}},fromJSON:function(b){var c=new a.HashSet;return b.data&&(c.size=b.data.length,c.storage=b.data),c}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Error=a.inherit({initialize:function(a){a&&(this._description=a)},_name:"c.Error",_description:"An error has occured in Cassowary",set description(a){this._description=a},get description(){return"("+this._name+") "+this._description},get message(){return this.description},toString:function(){return this.description}});var b=function(b,c){return a.inherit({"extends":a.Error,initialize:function(){a.Error.apply(this,arguments)},_name:b||"",_description:c||""})};a.ConstraintNotFound=b("c.ConstraintNotFound","Tried to remove a constraint never added to the tableu"),a.InternalError=b("c.InternalError"),a.NonExpression=b("c.NonExpression","The resulting expression would be non"),a.NotEnoughStays=b("c.NotEnoughStays","There are not enough stays to give specific values to every variable"),a.RequiredFailure=b("c.RequiredFailure","A required constraint cannot be satisfied"),a.TooDifficult=b("c.TooDifficult","The constraints are too difficult to solve")}(this.c||module.parent.exports||{}),function(a){"use strict";var b=1e3;a.SymbolicWeight=a.inherit({_t:"c.SymbolicWeight",initialize:function(){this.value=0;for(var a=1,c=arguments.length-1;c>=0;--c)this.value+=arguments[c]*a,a*=b},toJSON:function(){return{_t:this._t,value:this.value}}})}(this.c||module.parent.exports||{}),function(a){a.Strength=a.inherit({initialize:function(b,c,d,e){this.name=b,this.symbolicWeight=c instanceof a.SymbolicWeight?c:new a.SymbolicWeight(c,d,e)},get required(){return this===a.Strength.required},toString:function(){return this.name+(this.isRequired?"":":"+this.symbolicWeight)}}),a.Strength.required=new a.Strength("",1e3,1e3,1e3),a.Strength.strong=new a.Strength("strong",1,0,0),a.Strength.medium=new a.Strength("medium",0,1,0),a.Strength.weak=new a.Strength("weak",0,0,1)}(this.c||("undefined"!=typeof module?module.parent.exports.c:{})),function(a){"use strict";a.AbstractVariable=a.inherit({isDummy:!1,isExternal:!1,isPivotable:!1,isRestricted:!1,_init:function(b,c){this.hashCode=a._inc(),this.name=(c||"")+this.hashCode,b&&(b.name!==void 0&&(this.name=b.name),b.value!==void 0&&(this.value=b.value),b.prefix!==void 0&&(this._prefix=b.prefix))},_prefix:"",name:"",value:0,toJSON:function(){var a={};return this._t&&(a._t=this._t),this.name&&(a.name=this.name),this.value!==void 0&&(a.value=this.value),this._prefix&&(a._prefix=this._prefix),this._t&&(a._t=this._t),a},fromJSON:function(b,c){var d=new c;return a.extend(d,b),d},toString:function(){return this._prefix+"["+this.name+":"+this.value+"]"}}),a.Variable=a.inherit({_t:"c.Variable","extends":a.AbstractVariable,initialize:function(b){this._init(b,"v");var c=a.Variable._map;c&&(c[this.name]=this)},isExternal:!0}),a.DummyVariable=a.inherit({_t:"c.DummyVariable","extends":a.AbstractVariable,initialize:function(a){this._init(a,"d")},isDummy:!0,isRestricted:!0,value:"dummy"}),a.ObjectiveVariable=a.inherit({_t:"c.ObjectiveVariable","extends":a.AbstractVariable,initialize:function(a){this._init(a,"o")},value:"obj"}),a.SlackVariable=a.inherit({_t:"c.SlackVariable","extends":a.AbstractVariable,initialize:function(a){this._init(a,"s")},isPivotable:!0,isRestricted:!0,value:"slack"})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Point=a.inherit({initialize:function(b,c,d){if(b instanceof a.Variable)this._x=b;else{var e={value:b};d&&(e.name="x"+d),this._x=new a.Variable(e)}if(c instanceof a.Variable)this._y=c;else{var f={value:c};d&&(f.name="y"+d),this._y=new a.Variable(f)}},get x(){return this._x},set x(b){b instanceof a.Variable?this._x=b:this._x.value=b},get y(){return this._y},set y(b){b instanceof a.Variable?this._y=b:this._y.value=b},toString:function(){return"("+this.x+", "+this.y+")"}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Expression=a.inherit({initialize:function(b,c,d){a.GC&&console.log("new c.Expression"),this.constant="number"!=typeof d||isNaN(d)?0:d,this.terms=new a.HashTable,b instanceof a.AbstractVariable?this.setVariable(b,"number"==typeof c?c:1):"number"==typeof b&&(isNaN(b)?console.trace():this.constant=b)},initializeFromHash:function(b,c){return a.verbose&&(console.log("*******************************"),console.log("clone c.initializeFromHash"),console.log("*******************************")),a.GC&&console.log("clone c.Expression"),this.constant=b,this.terms=c.clone(),this},multiplyMe:function(a){this.constant*=a;var b=this.terms;return b.each(function(c,d){b.set(c,d*a)}),this},clone:function(){a.verbose&&(console.log("*******************************"),console.log("clone c.Expression"),console.log("*******************************"));var b=new a.Expression;return b.initializeFromHash(this.constant,this.terms),b},times:function(b){if("number"==typeof b)return this.clone().multiplyMe(b);if(this.isConstant)return b.times(this.constant);if(b.isConstant)return this.times(b.constant);throw new a.NonExpression},plus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,1):b instanceof a.Variable?this.clone().addVariable(b,1):void 0},minus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,-1):b instanceof a.Variable?this.clone().addVariable(b,-1):void 0},divide:function(b){if("number"==typeof b){if(a.approx(b,0))throw new a.NonExpression;return this.times(1/b)}if(b instanceof a.Expression){if(!b.isConstant)throw new a.NonExpression;return this.times(1/b.constant)}},addExpression:function(b,c,d,e){return b instanceof a.AbstractVariable&&(b=new a.Expression(b),a.trace&&console.log("addExpression: Had to cast a var to an expression")),c=c||1,this.constant+=c*b.constant,b.terms.each(function(a,b){this.addVariable(a,b*c,d,e)},this),this},addVariable:function(b,c,d,e){null==c&&(c=1),a.trace&&console.log("c.Expression::addVariable():",b,c);var f=this.terms.get(b);if(f){var g=f+c;0==g||a.approx(g,0)?(e&&e.noteRemovedVariable(b,d),this.terms.delete(b)):this.setVariable(b,g)}else a.approx(c,0)||(this.setVariable(b,c),e&&e.noteAddedVariable(b,d));return this},setVariable:function(a,b){return this.terms.set(a,b),this},anyPivotableVariable:function(){if(this.isConstant)throw new a.InternalError("anyPivotableVariable called on a constant");var b=this.terms.escapingEach(function(a){return a.isPivotable?{retval:a}:void 0});return b&&void 0!==b.retval?b.retval:null},substituteOut:function(b,c,d,e){a.trace&&(a.fnenterprint("CLE:substituteOut: "+b+", "+c+", "+d+", ..."),a.traceprint("this = "+this));var f=this.setVariable.bind(this),g=this.terms,h=g.get(b);g.delete(b),this.constant+=h*c.constant,c.terms.each(function(b,c){var i=g.get(b);if(i){var j=i+h*c;a.approx(j,0)?(e.noteRemovedVariable(b,d),g.delete(b)):f(b,j)}else f(b,h*c),e&&e.noteAddedVariable(b,d)}),a.trace&&a.traceprint("Now this is "+this)},changeSubject:function(a,b){this.setVariable(a,this.newSubject(b))},newSubject:function(b){a.trace&&a.fnenterprint("newSubject:"+b);var c=1/this.terms.get(b);return this.terms.delete(b),this.multiplyMe(-c),c},coefficientFor:function(a){return this.terms.get(a)||0},get isConstant(){return 0==this.terms.size},toString:function(){var b="",c=!1;if(!a.approx(this.constant,0)||this.isConstant){if(b+=this.constant,this.isConstant)return b;c=!0}return this.terms.each(function(a,d){c&&(b+=" + "),b+=d+"*"+a,c=!0}),b},equals:function(b){return b===this?!0:b instanceof a.Expression&&b.constant===this.constant&&b.terms.equals(this.terms)},Plus:function(a,b){return a.plus(b)},Minus:function(a,b){return a.minus(b)},Times:function(a,b){return a.times(b)},Divide:function(a,b){return a.divide(b)}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.AbstractConstraint=a.inherit({initialize:function(b,c){this.hashCode=a._inc(),this.strength=b||a.Strength.required,this.weight=c||1},isEditConstraint:!1,isInequality:!1,isStayConstraint:!1,get required(){return this.strength===a.Strength.required},toString:function(){return this.strength+" {"+this.weight+"} ("+this.expression+")"}});var b=a.AbstractConstraint.prototype.toString,c=function(b,c,d){a.AbstractConstraint.call(this,c||a.Strength.strong,d),this.variable=b,this.expression=new a.Expression(b,-1,b.value)};a.EditConstraint=a.inherit({"extends":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isEditConstraint:!0,toString:function(){return"edit:"+b.call(this)}}),a.StayConstraint=a.inherit({"extends":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isStayConstraint:!0,toString:function(){return"stay:"+b.call(this)}});var d=a.Constraint=a.inherit({"extends":a.AbstractConstraint,initialize:function(b,c,d){a.AbstractConstraint.call(this,c,d),this.expression=b}});a.Inequality=a.inherit({"extends":a.Constraint,_cloneOrNewCle:function(b){return b.clone?b.clone():new a.Expression(b)},initialize:function(b,c,e,f,g){var h=b instanceof a.Expression,i=e instanceof a.Expression,j=b instanceof a.AbstractVariable,k=e instanceof a.AbstractVariable,l="number"==typeof b,m="number"==typeof e;if((h||l)&&k){var n=b,o=c,p=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.GEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addVariable(p,-1)}}else if(j&&(i||m)){var n=e,o=c,p=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.LEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addVariable(p,-1)}}else{if(h&&m){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.GEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(l&&i){var s=e,o=c,t=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.LEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(h&&i){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(t),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(s));else{if(o!=a.LEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addExpression(this._cloneOrNewCle(s),-1)}}else{if(h)return d.call(this,b,c,e);if(c==a.GEQ)d.call(this,new a.Expression(e),f,g),this.expression.multiplyMe(-1),this.expression.addVariable(b);else{if(c!=a.LEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");d.call(this,new a.Expression(e),f,g),this.expression.addVariable(b,-1)}}}},isInequality:!0,toString:function(){return d.prototype.toString.call(this)+" >= 0) id: "+this.hashCode}}),a.Equation=a.inherit({"extends":a.Constraint,initialize:function(b,c,e,f){if(b instanceof a.Expression&&!c||c instanceof a.Strength)d.call(this,b,c,e);else if(b instanceof a.AbstractVariable&&c instanceof a.Expression){var g=b,h=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.AbstractVariable&&"number"==typeof c){var g=b,k=c,i=e,j=f;d.call(this,new a.Expression(k),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.Expression&&c instanceof a.AbstractVariable){var h=b,g=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else{if(!(b instanceof a.Expression||b instanceof a.AbstractVariable||"number"==typeof b)||!(c instanceof a.Expression||c instanceof a.AbstractVariable||"number"==typeof c))throw"Bad initializer to c.Equation";b=b instanceof a.Expression?b.clone():new a.Expression(b),c=c instanceof a.Expression?c.clone():new a.Expression(c),d.call(this,b,e,f),this.expression.addExpression(c,-1)}a.assert(this.strength instanceof a.Strength,"_strength not set")},toString:function(){return d.prototype.toString.call(this)+" = 0)"}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.EditInfo=a.inherit({initialize:function(a,b,c,d,e){this.constraint=a,this.editPlus=b,this.editMinus=c,this.prevEditConstant=d,this.index=e},toString:function(){return""}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Tableau=a.inherit({initialize:function(){this.columns=new a.HashTable,this.rows=new a.HashTable,this._infeasibleRows=new a.HashSet,this._externalRows=new a.HashSet,this._externalParametricVars=new a.HashSet},noteRemovedVariable:function(b,c){a.trace&&console.log("c.Tableau::noteRemovedVariable: ",b,c);var d=this.columns.get(b);c&&d&&d.delete(c)},noteAddedVariable:function(a,b){b&&this.insertColVar(a,b)},getInternalInfo:function(){var a="Tableau Information:\n";return a+="Rows: "+this.rows.size,a+=" (= "+(this.rows.size-1)+" constraints)",a+="\nColumns: "+this.columns.size,a+="\nInfeasible Rows: "+this._infeasibleRows.size,a+="\nExternal basic variables: "+this._externalRows.size,a+="\nExternal parametric variables: ",a+=this._externalParametricVars.size,a+="\n"},toString:function(){var a="Tableau:\n";return this.rows.each(function(b,c){a+=b,a+=" <==> ",a+=c,a+="\n"}),a+="\nColumns:\n",a+=this.columns,a+="\nInfeasible rows: ",a+=this._infeasibleRows,a+="External basic variables: ",a+=this._externalRows,a+="External parametric variables: ",a+=this._externalParametricVars},insertColVar:function(b,c){var d=this.columns.get(b);d||(d=new a.HashSet,this.columns.set(b,d)),d.add(c)},addRow:function(b,c){a.trace&&a.fnenterprint("addRow: "+b+", "+c),this.rows.set(b,c),c.terms.each(function(a){this.insertColVar(a,b),a.isExternal&&this._externalParametricVars.add(a)},this),b.isExternal&&this._externalRows.add(b),a.trace&&a.traceprint(""+this)},removeColumn:function(b){a.trace&&a.fnenterprint("removeColumn:"+b);var c=this.columns.get(b);c?(this.columns.delete(b),c.each(function(a){var c=this.rows.get(a);c.terms.delete(b)},this)):a.trace&&console.log("Could not find var",b,"in columns"),b.isExternal&&(this._externalRows.delete(b),this._externalParametricVars.delete(b))},removeRow:function(b){a.trace&&a.fnenterprint("removeRow:"+b);var c=this.rows.get(b);return a.assert(null!=c),c.terms.each(function(c){var e=this.columns.get(c);null!=e&&(a.trace&&console.log("removing from varset:",b),e.delete(b))},this),this._infeasibleRows.delete(b),b.isExternal&&this._externalRows.delete(b),this.rows.delete(b),a.trace&&a.fnexitprint("returning "+c),c},substituteOut:function(b,c){a.trace&&a.fnenterprint("substituteOut:"+b+", "+c),a.trace&&a.traceprint(""+this);var d=this.columns.get(b);d.each(function(a){var d=this.rows.get(a);d.substituteOut(b,c,a,this),a.isRestricted&&0>d.constant&&this._infeasibleRows.add(a)},this),b.isExternal&&(this._externalRows.add(b),this._externalParametricVars.delete(b)),this.columns.delete(b)},columnsHasKey:function(a){return!!this.columns.get(a)}})}(this.c||module.parent.exports||{}),function(a){var b=a.Tableau,c=b.prototype,d=1e-8,e=a.Strength.weak;a.SimplexSolver=a.inherit({"extends":a.Tableau,initialize:function(){a.Tableau.call(this),this._stayMinusErrorVars=[],this._stayPlusErrorVars=[],this._errorVars=new a.HashTable,this._markerVars=new a.HashTable,this._objective=new a.ObjectiveVariable({name:"Z"}),this._editVarMap=new a.HashTable,this._editVarList=[],this._slackCounter=0,this._artificialCounter=0,this._dummyCounter=0,this.autoSolve=!0,this._fNeedsSolving=!1,this._optimizeCount=0,this.rows.set(this._objective,new a.Expression),this._stkCedcns=[0],a.trace&&a.traceprint("objective expr == "+this.rows.get(this._objective))},addLowerBound:function(b,c){var d=new a.Inequality(b,a.GEQ,new a.Expression(c));return this.addConstraint(d)},addUpperBound:function(b,c){var d=new a.Inequality(b,a.LEQ,new a.Expression(c));return this.addConstraint(d)},addBounds:function(a,b,c){return this.addLowerBound(a,b),this.addUpperBound(a,c),this},add:function(){for(var a=0;arguments.length>a;a++)this.addConstraint(arguments[a]);return this},addConstraint:function(b){a.trace&&a.fnenterprint("addConstraint: "+b);var c=Array(2),d=Array(1),e=this.newExpression(b,c,d);if(d=d[0],this.tryAddingDirectly(e)||this.addWithArtificialVariable(e),this._fNeedsSolving=!0,b.isEditConstraint){var f=this._editVarMap.size,g=c[0],h=c[1];!g instanceof a.SlackVariable&&console.warn("cvEplus not a slack variable =",g),!h instanceof a.SlackVariable&&console.warn("cvEminus not a slack variable =",h),a.debug&&console.log("new c.EditInfo("+b+", "+g+", "+h+", "+d+", "+f+")");var i=new a.EditInfo(b,g,h,d,f);this._editVarMap.set(b.variable,i),this._editVarList[f]={v:b.variable,info:i}}return this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},addConstraintNoException:function(b){a.trace&&a.fnenterprint("addConstraintNoException: "+b);try{return this.addConstraint(b),!0}catch(c){return!1}},addEditVar:function(b,c){return a.trace&&a.fnenterprint("addEditVar: "+b+" @ "+c),this.addConstraint(new a.EditConstraint(b,c||a.Strength.strong))},beginEdit:function(){return a.assert(this._editVarMap.size>0,"_editVarMap.size > 0"),this._infeasibleRows.clear(),this._resetStayConstants(),this._stkCedcns.push(this._editVarMap.size),this},endEdit:function(){return a.assert(this._editVarMap.size>0,"_editVarMap.size > 0"),this.resolve(),this._stkCedcns.pop(),this.removeEditVarsTo(this._stkCedcns[this._stkCedcns.length-1]),this},removeAllEditVars:function(){return this.removeEditVarsTo(0)},removeEditVarsTo:function(b){try{for(var c=this._editVarList.length,d=b;c>d;d++)this._editVarList[d]&&this.removeConstraint(this._editVarMap.get(this._editVarList[d].v).constraint);return this._editVarList.length=b,a.assert(this._editVarMap.size==b,"_editVarMap.size == n"),this}catch(e){throw new a.InternalError("Constraint not found in removeEditVarsTo")}},addPointStays:function(b){return a.trace&&console.log("addPointStays",b),b.forEach(function(a,b){this.addStay(a.x,e,Math.pow(2,b)),this.addStay(a.y,e,Math.pow(2,b))},this),this},addStay:function(b,c,d){var f=new a.StayConstraint(b,c||e,d||1);return this.addConstraint(f)},removeConstraint:function(a){return this.removeConstraintInternal(a),this},removeConstraintInternal:function(b){a.trace&&a.fnenterprint("removeConstraintInternal: "+b),a.trace&&a.traceprint(""+this),this._fNeedsSolving=!0,this._resetStayConstants();var c=this.rows.get(this._objective),d=this._errorVars.get(b);a.trace&&a.traceprint("eVars == "+d),null!=d&&d.each(function(e){var f=this.rows.get(e);null==f?c.addVariable(e,-b.weight*b.strength.symbolicWeight.value,this._objective,this):c.addExpression(f,-b.weight*b.strength.symbolicWeight.value,this._objective,this),a.trace&&a.traceprint("now eVars == "+d)},this);var e=this._markerVars.get(b);if(this._markerVars.delete(b),null==e)throw new a.InternalError("Constraint not found in removeConstraintInternal");if(a.trace&&a.traceprint("Looking to remove var "+e),null==this.rows.get(e)){var f=this.columns.get(e);a.trace&&a.traceprint("Must pivot -- columns are "+f);var g=null,h=0;f.each(function(b){if(b.isRestricted){var c=this.rows.get(b),d=c.coefficientFor(e);if(a.trace&&a.traceprint("Marker "+e+"'s coefficient in "+c+" is "+d),0>d){var f=-c.constant/d;(null==g||h>f||a.approx(f,h)&&b.hashCoded)&&(h=d,g=a)}},this)),null==g&&(0==f.size?this.removeColumn(e):f.escapingEach(function(a){return a!=this._objective?(g=a,{brk:!0}):void 0},this)),null!=g&&this.pivot(e,g)}if(null!=this.rows.get(e)&&this.removeRow(e),null!=d&&d.each(function(a){a!=e&&this.removeColumn(a)},this),b.isStayConstraint){if(null!=d)for(var j=0;this._stayPlusErrorVars.length>j;j++)d.delete(this._stayPlusErrorVars[j]),d.delete(this._stayMinusErrorVars[j])}else if(b.isEditConstraint){a.assert(null!=d,"eVars != null");var k=this._editVarMap.get(b.variable);this.removeColumn(k.editMinus),this._editVarMap.delete(b.variable)}return null!=d&&this._errorVars.delete(d),this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},reset:function(){throw a.trace&&a.fnenterprint("reset"),new a.InternalError("reset not implemented")},resolveArray:function(b){a.trace&&a.fnenterprint("resolveArray"+b);var c=b.length;this._editVarMap.each(function(a,d){var e=d.index;c>e&&this.suggestValue(a,b[e])},this),this.resolve()},resolvePair:function(a,b){this.suggestValue(this._editVarList[0].v,a),this.suggestValue(this._editVarList[1].v,b),this.resolve()},resolve:function(){a.trace&&a.fnenterprint("resolve()"),this.dualOptimize(),this._setExternalVariables(),this._infeasibleRows.clear(),this._resetStayConstants()},suggestValue:function(b,c){a.trace&&console.log("suggestValue("+b+", "+c+")");var d=this._editVarMap.get(b);if(!d)throw new a.Error("suggestValue for variable "+b+", but var is not an edit variable");var e=c-d.prevEditConstant;return d.prevEditConstant=c,this.deltaEditConstant(e,d.editPlus,d.editMinus),this},solve:function(){return this._fNeedsSolving&&(this.optimize(this._objective),this._setExternalVariables()),this},setEditedValue:function(b,c){if(!this.columnsHasKey(b)&&null==this.rows.get(b))return b.value=c,this;if(!a.approx(c,b.value)){this.addEditVar(b),this.beginEdit();try{this.suggestValue(b,c)}catch(d){throw new a.InternalError("Error in setEditedValue")}this.endEdit()}return this},addVar:function(b){if(!this.columnsHasKey(b)&&null==this.rows.get(b)){try{this.addStay(b)}catch(c){throw new a.InternalError("Error in addVar -- required failure is impossible")}a.trace&&a.traceprint("added initial stay on "+b)}return this},getInternalInfo:function(){var a=c.getInternalInfo.call(this);return a+="\nSolver info:\n",a+="Stay Error Variables: ",a+=this._stayPlusErrorVars.length+this._stayMinusErrorVars.length,a+=" ("+this._stayPlusErrorVars.length+" +, ",a+=this._stayMinusErrorVars.length+" -)\n",a+="Edit Variables: "+this._editVarMap.size,a+="\n"},getDebugInfo:function(){return""+this+this.getInternalInfo()+"\n"},toString:function(){var a=c.getInternalInfo.call(this);return a+="\n_stayPlusErrorVars: ",a+="["+this._stayPlusErrorVars+"]",a+="\n_stayMinusErrorVars: ",a+="["+this._stayMinusErrorVars+"]",a+="\n",a+="_editVarMap:\n"+this._editVarMap,a+="\n"},getConstraintMap:function(){return this._markerVars},addWithArtificialVariable:function(b){a.trace&&a.fnenterprint("addWithArtificialVariable: "+b);var c=new a.SlackVariable({value:++this._artificialCounter,prefix:"a"}),d=new a.ObjectiveVariable({name:"az"}),e=b.clone();a.trace&&a.traceprint("before addRows:\n"+this),this.addRow(d,e),this.addRow(c,b),a.trace&&a.traceprint("after addRows:\n"+this),this.optimize(d);var f=this.rows.get(d);if(a.trace&&a.traceprint("azTableauRow.constant == "+f.constant),!a.approx(f.constant,0))throw this.removeRow(d),this.removeColumn(c),new a.RequiredFailure;var g=this.rows.get(c);if(null!=g){if(g.isConstant)return this.removeRow(c),this.removeRow(d),void 0;var h=g.anyPivotableVariable();this.pivot(h,c)}a.assert(null==this.rows.get(c),"rowExpression(av) == null"),this.removeColumn(c),this.removeRow(d)},tryAddingDirectly:function(b){a.trace&&a.fnenterprint("tryAddingDirectly: "+b);var c=this.chooseSubject(b);return null==c?(a.trace&&a.fnexitprint("returning false"),!1):(b.newSubject(c),this.columnsHasKey(c)&&this.substituteOut(c,b),this.addRow(c,b),a.trace&&a.fnexitprint("returning true"),!0)},chooseSubject:function(b){a.trace&&a.fnenterprint("chooseSubject: "+b);var c=null,d=!1,e=!1,f=b.terms,g=f.escapingEach(function(a,b){if(d){if(!a.isRestricted&&!this.columnsHasKey(a))return{retval:a}}else if(a.isRestricted){if(!e&&!a.isDummy&&0>b){var f=this.columns.get(a);(null==f||1==f.size&&this.columnsHasKey(this._objective))&&(c=a,e=!0)}}else c=a,d=!0},this);if(g&&void 0!==g.retval)return g.retval;if(null!=c)return c;var h=0,g=f.escapingEach(function(a,b){return a.isDummy?(this.columnsHasKey(a)||(c=a,h=b),void 0):{retval:null}},this);if(g&&void 0!==g.retval)return g.retval;if(!a.approx(b.constant,0))throw new a.RequiredFailure;return h>0&&b.multiplyMe(-1),c},deltaEditConstant:function(b,c,d){a.trace&&a.fnenterprint("deltaEditConstant :"+b+", "+c+", "+d);var e=this.rows.get(c);if(null!=e)return e.constant+=b,0>e.constant&&this._infeasibleRows.add(c),void 0;var f=this.rows.get(d);if(null!=f)return f.constant+=-b,0>f.constant&&this._infeasibleRows.add(d),void 0;var g=this.columns.get(d);g||console.log("columnVars is null -- tableau is:\n"+this),g.each(function(a){var c=this.rows.get(a),e=c.coefficientFor(d);c.constant+=e*b,a.isRestricted&&0>c.constant&&this._infeasibleRows.add(a)},this)},dualOptimize:function(){a.trace&&a.fnenterprint("dualOptimize:");for(var b=this.rows.get(this._objective);this._infeasibleRows.size;){var c=this._infeasibleRows.values()[0];this._infeasibleRows.delete(c);var d=null,e=this.rows.get(c);if(e&&0>e.constant){var g,f=Number.MAX_VALUE,h=e.terms;if(h.each(function(c,e){if(e>0&&c.isPivotable){var h=b.coefficientFor(c);g=h/e,(f>g||a.approx(g,f)&&c.hashCodef.constant&&f.multiplyMe(-1),a.trace&&a.fnexitprint("returning "+f),f},optimize:function(b){a.trace&&a.fnenterprint("optimize: "+b),a.trace&&a.traceprint(""+this),this._optimizeCount++;var c=this.rows.get(b);a.assert(null!=c,"zRow != null");for(var g,h,e=null,f=null;;){if(g=0,h=c.terms,h.escapingEach(function(a,b){return a.isPivotable&&g>b?(g=b,e=a,{brk:1}):void 0},this),g>=-d)return;a.trace&&console.log("entryVar:",e,"objectiveCoeff:",g);var i=Number.MAX_VALUE,j=this.columns.get(e),k=0;if(j.each(function(b){if(a.trace&&a.traceprint("Checking "+b),b.isPivotable){var c=this.rows.get(b),d=c.coefficientFor(e);a.trace&&a.traceprint("pivotable, coeff = "+d),0>d&&(k=-c.constant/d,(i>k||a.approx(k,i)&&b.hashCodeb;b++){var c=this.rows.get(this._stayPlusErrorVars[b]);null==c&&(c=this.rows.get(this._stayMinusErrorVars[b])),null!=c&&(c.constant=0)}},_setExternalVariables:function(){a.trace&&a.fnenterprint("_setExternalVariables:"),a.trace&&a.traceprint(""+this),this._externalParametricVars.each(function(b){null!=this.rows.get(b)?a.trace&&console.log("Error: variable"+b+" in _externalParametricVars is basic"):b.value=0},this),this._externalRows.each(function(a){var b=this.rows.get(a);a.value!=b.constant&&(a.value=b.constant)},this),this._fNeedsSolving=!1,this.onsolved()},onsolved:function(){},insertErrorVar:function(b,c){a.trace&&a.fnenterprint("insertErrorVar:"+b+", "+c);var d=this._errorVars.get(c);d||(d=new a.HashSet,this._errorVars.set(b,d)),d.add(c)}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Timer=a.inherit({initialize:function(){this.isRunning=!1,this._elapsedMs=0},start:function(){return this.isRunning=!0,this._startReading=new Date,this},stop:function(){return this.isRunning=!1,this._elapsedMs+=new Date-this._startReading,this},reset:function(){return this.isRunning=!1,this._elapsedMs=0,this},elapsedTime:function(){return this.isRunning?(this._elapsedMs+(new Date-this._startReading))/1e3:this._elapsedMs/1e3}})}(this.c||module.parent.exports||{}),__cassowary_parser=function(){function a(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g,escape)+'"'}var b={parse:function(b,c){function k(a){g>e||(e>g&&(g=e,h=[]),h.push(a))}function l(){var a,b,c,d,f;if(d=e,f=e,a=z(),null!==a){if(c=m(),null!==c)for(b=[];null!==c;)b.push(c),c=m();else b=null;null!==b?(c=z(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)}else a=null,e=f;return null!==a&&(a=function(a,b){return b}(d,a[1])),null===a&&(e=d),a}function m(){var a,b,c,d;return c=e,d=e,a=P(),null!==a?(b=s(),null!==b?a=[a,b]:(a=null,e=d)):(a=null,e=d),null!==a&&(a=function(a,b){return b}(c,a[0])),null===a&&(e=c),a}function n(){var a;return b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k("any character")),a}function o(){var a;return/^[a-zA-Z]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k("[a-zA-Z]")),null===a&&(36===b.charCodeAt(e)?(a="$",e++):(a=null,0===f&&k('"$"')),null===a&&(95===b.charCodeAt(e)?(a="_",e++):(a=null,0===f&&k('"_"')))),a}function p(){var a;return f++,/^[\t\x0B\f \xA0\uFEFF]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k("[\\t\\x0B\\f \\xA0\\uFEFF]")),f--,0===f&&null===a&&k("whitespace"),a}function q(){var a;return/^[\n\r\u2028\u2029]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k("[\\n\\r\\u2028\\u2029]")),a}function r(){var a;return f++,10===b.charCodeAt(e)?(a="\n",e++):(a=null,0===f&&k('"\\n"')),null===a&&("\r\n"===b.substr(e,2)?(a="\r\n",e+=2):(a=null,0===f&&k('"\\r\\n"')),null===a&&(13===b.charCodeAt(e)?(a="\r",e++):(a=null,0===f&&k('"\\r"')),null===a&&(8232===b.charCodeAt(e)?(a="\u2028",e++):(a=null,0===f&&k('"\\u2028"')),null===a&&(8233===b.charCodeAt(e)?(a="\u2029",e++):(a=null,0===f&&k('"\\u2029"')))))),f--,0===f&&null===a&&k("end of line"),a}function s(){var a,c,d;return d=e,a=z(),null!==a?(59===b.charCodeAt(e)?(c=";",e++):(c=null,0===f&&k('";"')),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=y(),null!==a?(c=r(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=z(),null!==a?(c=t(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d))),a}function t(){var a,c;return c=e,f++,b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k("any character")),f--,null===a?a="":(a=null,e=c),a}function u(){var a;return f++,a=v(),null===a&&(a=x()),f--,0===f&&null===a&&k("comment"),a}function v(){var a,c,d,g,h,i,j;if(h=e,"/*"===b.substr(e,2)?(a="/*",e+=2):(a=null,0===f&&k('"/*"')),null!==a){for(c=[],i=e,j=e,f++,"*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,"*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?("*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function w(){var a,c,d,g,h,i,j;if(h=e,"/*"===b.substr(e,2)?(a="/*",e+=2):(a=null,0===f&&k('"/*"')),null!==a){for(c=[],i=e,j=e,f++,"*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),null===d&&(d=q()),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,"*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),null===d&&(d=q()),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?("*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function x(){var a,c,d,g,h,i,j;if(h=e,"//"===b.substr(e,2)?(a="//",e+=2):(a=null,0===f&&k('"//"')),null!==a){for(c=[],i=e,j=e,f++,d=q(),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,d=q(),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?a=[a,c]:(a=null,e=h)}else a=null,e=h;return a}function y(){var a,b;for(a=[],b=p(),null===b&&(b=w(),null===b&&(b=x()));null!==b;)a.push(b),b=p(),null===b&&(b=w(),null===b&&(b=x()));return a}function z(){var a,b;for(a=[],b=p(),null===b&&(b=r(),null===b&&(b=u()));null!==b;)a.push(b),b=p(),null===b&&(b=r(),null===b&&(b=u()));return a}function A(){var a,b;return b=e,a=C(),null===a&&(a=B()),null!==a&&(a=function(a,b){return{type:"NumericLiteral",value:b}}(b,a)),null===a&&(e=b),a}function B(){var a,c,d;if(d=e,/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k("[0-9]")),null!==c)for(a=[];null!==c;)a.push(c),/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k("[0-9]"));else a=null;return null!==a&&(a=function(a,b){return parseInt(b.join(""))}(d,a)),null===a&&(e=d),a}function C(){var a,c,d,g,h;return g=e,h=e,a=B(),null!==a?(46===b.charCodeAt(e)?(c=".",e++):(c=null,0===f&&k('"."')),null!==c?(d=B(),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)):(a=null,e=h),null!==a&&(a=function(a,b){return parseFloat(b.join(""))}(g,a)),null===a&&(e=g),a}function D(){var a,c,d,g;if(g=e,/^[\-+]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k("[\\-+]")),a=null!==a?a:"",null!==a){if(/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k("[0-9]")),null!==d)for(c=[];null!==d;)c.push(d),/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k("[0-9]"));else c=null;null!==c?a=[a,c]:(a=null,e=g)}else a=null,e=g;return a}function E(){var a,b;return f++,b=e,a=F(),null!==a&&(a=function(a,b){return b}(b,a)),null===a&&(e=b),f--,0===f&&null===a&&k("identifier"),a}function F(){var a,b,c,d,g;if(f++,d=e,g=e,a=o(),null!==a){for(b=[],c=o();null!==c;)b.push(c),c=o();null!==b?a=[a,b]:(a=null,e=g)}else a=null,e=g;return null!==a&&(a=function(a,b,c){return b+c.join("")}(d,a[0],a[1])),null===a&&(e=d),f--,0===f&&null===a&&k("identifier"),a}function G(){var a,c,d,g,h,i,j;return i=e,a=E(),null!==a&&(a=function(a,b){return{type:"Variable",name:b}}(i,a)),null===a&&(e=i),null===a&&(a=A(),null===a&&(i=e,j=e,40===b.charCodeAt(e)?(a="(",e++):(a=null,0===f&&k('"("')),null!==a?(c=z(),null!==c?(d=P(),null!==d?(g=z(),null!==g?(41===b.charCodeAt(e)?(h=")",e++):(h=null,0===f&&k('")"')),null!==h?a=[a,c,d,g,h]:(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j),null!==a&&(a=function(a,b){return b}(i,a[2])),null===a&&(e=i))),a}function H(){var a,b,c,d,f;return a=G(),null===a&&(d=e,f=e,a=I(),null!==a?(b=z(),null!==b?(c=H(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)):(a=null,e=f),null!==a&&(a=function(a,b,c){return{type:"UnaryExpression",operator:b,expression:c}}(d,a[0],a[2])),null===a&&(e=d)),a}function I(){var a;return 43===b.charCodeAt(e)?(a="+",e++):(a=null,0===f&&k('"+"')),null===a&&(45===b.charCodeAt(e)?(a="-",e++):(a=null,0===f&&k('"-"')),null===a&&(33===b.charCodeAt(e)?(a="!",e++):(a=null,0===f&&k('"!"')))),a}function J(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=H(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:"MultiplicativeExpression",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function K(){var a;return 42===b.charCodeAt(e)?(a="*",e++):(a=null,0===f&&k('"*"')),null===a&&(47===b.charCodeAt(e)?(a="/",e++):(a=null,0===f&&k('"/"'))),a}function L(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=J(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:"AdditiveExpression",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function M(){var a;return 43===b.charCodeAt(e)?(a="+",e++):(a=null,0===f&&k('"+"')),null===a&&(45===b.charCodeAt(e)?(a="-",e++):(a=null,0===f&&k('"-"'))),a}function N(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=L(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:"Inequality",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function O(){var a;return"<="===b.substr(e,2)?(a="<=",e+=2):(a=null,0===f&&k('"<="')),null===a&&(">="===b.substr(e,2)?(a=">=",e+=2):(a=null,0===f&&k('">="')),null===a&&(60===b.charCodeAt(e)?(a="<",e++):(a=null,0===f&&k('"<"')),null===a&&(62===b.charCodeAt(e)?(a=">",e++):(a=null,0===f&&k('">"'))))),a}function P(){var a,c,d,g,h,i,j,l,m;if(j=e,l=e,a=N(),null!==a){for(c=[],m=e,d=z(),null!==d?("=="===b.substr(e,2)?(g="==",e+=2):(g=null,0===f&&k('"=="')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==d;)c.push(d),m=e,d=z(),null!==d?("=="===b.substr(e,2)?(g="==",e+=2):(g=null,0===f&&k('"=="')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==c?a=[a,c]:(a=null,e=l)}else a=null,e=l;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:"Equality",operator:c[e][1],left:d,right:c[e][3]};return d}(j,a[0],a[1])),null===a&&(e=j),a}function Q(a){a.sort();for(var b=null,c=[],d=0;a.length>d;d++)a[d]!==b&&(c.push(a[d]),b=a[d]);return c}function R(){for(var a=1,c=1,d=!1,f=0;Math.max(e,g)>f;f++){var h=b.charAt(f);"\n"===h?(d||a++,c=1,d=!1):"\r"===h||"\u2028"===h||"\u2029"===h?(a++,c=1,d=!0):(c++,d=!1)}return{line:a,column:c}}var d={start:l,Statement:m,SourceCharacter:n,IdentifierStart:o,WhiteSpace:p,LineTerminator:q,LineTerminatorSequence:r,EOS:s,EOF:t,Comment:u,MultiLineComment:v,MultiLineCommentNoLineTerminator:w,SingleLineComment:x,_:y,__:z,Literal:A,Integer:B,Real:C,SignedInteger:D,Identifier:E,IdentifierName:F,PrimaryExpression:G,UnaryExpression:H,UnaryOperator:I,MultiplicativeExpression:J,MultiplicativeOperator:K,AdditiveExpression:L,AdditiveOperator:M,InequalityExpression:N,InequalityOperator:O,LinearExpression:P};if(void 0!==c){if(void 0===d[c])throw Error("Invalid rule name: "+a(c)+".")}else c="start";var e=0,f=0,g=0,h=[],S=d[c]();if(null===S||e!==b.length){var T=Math.max(e,g),U=b.length>T?b.charAt(T):null,V=R();throw new this.SyntaxError(Q(h),U,T,V.line,V.column)}return S},toSource:function(){return this._source}};return b.SyntaxError=function(b,c,d,e,f){function g(b,c){var d,e;switch(b.length){case 0:d="end of input";break;case 1:d=b[0];break;default:d=b.slice(0,b.length-1).join(", ")+" or "+b[b.length-1]}return e=c?a(c):"end of input","Expected "+d+" but "+e+" found."}this.name="SyntaxError",this.expected=b,this.found=c,this.message=g(b,c),this.offset=d,this.line=e,this.column=f},b.SyntaxError.prototype=Error.prototype,b}(); -}).call( - (typeof module != "undefined") ? - (module.compiled = true && module) : this -); - -},{}],2:[function(require,module,exports){ 'use strict'; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); @@ -50,7 +25,6 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var c = require('cassowary/bin/c'); - 'use strict'; /** @@ -122,7 +96,7 @@ var parser = (function () { this.line = line; this.column = column; - this.name = 'SyntaxError'; + this.name = "SyntaxError"; } peg$subclass(SyntaxError, Error); @@ -134,8 +108,8 @@ var parser = (function () { peg$startRuleFunction = peg$parsevisualFormatString, peg$c0 = peg$FAILED, peg$c1 = null, - peg$c2 = ':', - peg$c3 = { type: 'literal', value: ':', description: '":"' }, + peg$c2 = ":", + peg$c3 = { type: "literal", value: ":", description: "\":\"" }, peg$c4 = [], peg$c5 = function peg$c5(o, superto, view, views, tosuper) { return { @@ -143,93 +117,93 @@ var parser = (function () { cascade: (superto || []).concat([view], [].concat.apply([], views), tosuper || []) }; }, - peg$c6 = 'H', - peg$c7 = { type: 'literal', value: 'H', description: '"H"' }, - peg$c8 = 'V', - peg$c9 = { type: 'literal', value: 'V', description: '"V"' }, + peg$c6 = "H", + peg$c7 = { type: "literal", value: "H", description: "\"H\"" }, + peg$c8 = "V", + peg$c9 = { type: "literal", value: "V", description: "\"V\"" }, peg$c10 = function peg$c10(orient) { return orient == 'H' ? 'horizontal' : 'vertical'; }, - peg$c11 = '|', - peg$c12 = { type: 'literal', value: '|', description: '"|"' }, + peg$c11 = "|", + peg$c12 = { type: "literal", value: "|", description: "\"|\"" }, peg$c13 = function peg$c13() { return { view: null }; }, - peg$c14 = '[', - peg$c15 = { type: 'literal', value: '[', description: '"["' }, - peg$c16 = ']', - peg$c17 = { type: 'literal', value: ']', description: '"]"' }, + peg$c14 = "[", + peg$c15 = { type: "literal", value: "[", description: "\"[\"" }, + peg$c16 = "]", + peg$c17 = { type: "literal", value: "]", description: "\"]\"" }, peg$c18 = function peg$c18(view, predicates) { return extend(view, predicates ? { constraints: predicates } : {}); }, - peg$c19 = '-', - peg$c20 = { type: 'literal', value: '-', description: '"-"' }, + peg$c19 = "-", + peg$c20 = { type: "literal", value: "-", description: "\"-\"" }, peg$c21 = function peg$c21(predicateList) { return predicateList; }, peg$c22 = function peg$c22() { return [{ relation: 'equ', constant: 'default', $parserOffset: offset() }]; }, - peg$c23 = '', + peg$c23 = "", peg$c24 = function peg$c24() { return [{ relation: 'equ', constant: 0, $parserOffset: offset() }]; }, peg$c25 = function peg$c25(n) { return [{ relation: 'equ', constant: n, $parserOffset: offset() }]; }, - peg$c26 = '(', - peg$c27 = { type: 'literal', value: '(', description: '"("' }, - peg$c28 = ',', - peg$c29 = { type: 'literal', value: ',', description: '","' }, - peg$c30 = ')', - peg$c31 = { type: 'literal', value: ')', description: '")"' }, + peg$c26 = "(", + peg$c27 = { type: "literal", value: "(", description: "\"(\"" }, + peg$c28 = ",", + peg$c29 = { type: "literal", value: ",", description: "\",\"" }, + peg$c30 = ")", + peg$c31 = { type: "literal", value: ")", description: "\")\"" }, peg$c32 = function peg$c32(p, ps) { return [p].concat(ps.map(function (p) { return p[1]; })); }, - peg$c33 = '@', - peg$c34 = { type: 'literal', value: '@', description: '"@"' }, + peg$c33 = "@", + peg$c34 = { type: "literal", value: "@", description: "\"@\"" }, peg$c35 = function peg$c35(r, o, p) { return extend({ relation: 'equ' }, r || {}, o, p ? p[1] : {}); }, - peg$c36 = '==', - peg$c37 = { type: 'literal', value: '==', description: '"=="' }, + peg$c36 = "==", + peg$c37 = { type: "literal", value: "==", description: "\"==\"" }, peg$c38 = function peg$c38() { return { relation: 'equ', $parserOffset: offset() }; }, - peg$c39 = '<=', - peg$c40 = { type: 'literal', value: '<=', description: '"<="' }, + peg$c39 = "<=", + peg$c40 = { type: "literal", value: "<=", description: "\"<=\"" }, peg$c41 = function peg$c41() { return { relation: 'leq', $parserOffset: offset() }; }, - peg$c42 = '>=', - peg$c43 = { type: 'literal', value: '>=', description: '">="' }, + peg$c42 = ">=", + peg$c43 = { type: "literal", value: ">=", description: "\">=\"" }, peg$c44 = function peg$c44() { return { relation: 'geq', $parserOffset: offset() }; }, peg$c45 = /^[0-9]/, - peg$c46 = { type: 'class', value: '[0-9]', description: '[0-9]' }, + peg$c46 = { type: "class", value: "[0-9]", description: "[0-9]" }, peg$c47 = function peg$c47(digits) { - return { priority: parseInt(digits.join(''), 10) }; + return { priority: parseInt(digits.join(""), 10) }; }, peg$c48 = function peg$c48(n) { return { constant: n }; }, peg$c49 = /^[a-zA-Z_]/, - peg$c50 = { type: 'class', value: '[a-zA-Z_]', description: '[a-zA-Z_]' }, + peg$c50 = { type: "class", value: "[a-zA-Z_]", description: "[a-zA-Z_]" }, peg$c51 = /^[a-zA-Z0-9_]/, - peg$c52 = { type: 'class', value: '[a-zA-Z0-9_]', description: '[a-zA-Z0-9_]' }, + peg$c52 = { type: "class", value: "[a-zA-Z0-9_]", description: "[a-zA-Z0-9_]" }, peg$c53 = function peg$c53(f, v) { return { view: f + v }; }, - peg$c54 = '.', - peg$c55 = { type: 'literal', value: '.', description: '"."' }, + peg$c54 = ".", + peg$c55 = { type: "literal", value: ".", description: "\".\"" }, peg$c56 = function peg$c56(digits, decimals) { - return parseFloat(digits.concat('.').concat(decimals).join(''), 10); + return parseFloat(digits.concat(".").concat(decimals).join(""), 10); }, peg$c57 = function peg$c57(digits) { - return parseInt(digits.join(''), 10); + return parseInt(digits.join(""), 10); }, peg$currPos = 0, peg$reportedPos = 0, @@ -240,9 +214,9 @@ var parser = (function () { peg$silentFails = 0, peg$result; - if ('startRule' in options) { + if ("startRule" in options) { if (!(options.startRule in peg$startRuleFunctions)) { - throw new Error('Can\'t start parsing from rule "' + options.startRule + '".'); + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); } peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; @@ -265,7 +239,7 @@ var parser = (function () { } function expected(description) { - throw peg$buildException(null, [{ type: 'other', description: description }], peg$reportedPos); + throw peg$buildException(null, [{ type: "other", description: description }], peg$reportedPos); } function error(message) { @@ -278,13 +252,13 @@ var parser = (function () { for (p = startPos; p < endPos; p++) { ch = input.charAt(p); - if (ch === '\n') { + if (ch === "\n") { if (!details.seenCR) { details.line++; } details.column = 1; details.seenCR = false; - } else if (ch === '\r' || ch === '\u2028' || ch === '\u2029') { + } else if (ch === "\r" || ch === '\u2028' || ch === '\u2029') { details.line++; details.column = 1; details.seenCR = true; @@ -369,11 +343,11 @@ var parser = (function () { expectedDescs[i] = expected[i].description; } - expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(', ') + ' or ' + expectedDescs[expected.length - 1] : expectedDescs[0]; + expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(", ") + " or " + expectedDescs[expected.length - 1] : expectedDescs[0]; - foundDesc = found ? '"' + stringEscape(found) + '"' : 'end of input'; + foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input"; - return 'Expected ' + expectedDesc + ' but ' + foundDesc + ' found.'; + return "Expected " + expectedDesc + " but " + foundDesc + " found."; } var posDetails = peg$computePosDetails(pos), @@ -1216,7 +1190,7 @@ var parser = (function () { return peg$result; } else { if (peg$result !== peg$FAILED && peg$currPos < input.length) { - peg$fail({ type: 'end', description: 'end of input' }); + peg$fail({ type: "end", description: "end of input" }); } throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); @@ -1252,7 +1226,7 @@ var parserExt = (function () { this.line = line; this.column = column; - this.name = 'SyntaxError'; + this.name = "SyntaxError"; } peg$subclass(SyntaxError, Error); @@ -1264,8 +1238,8 @@ var parserExt = (function () { peg$startRuleFunction = peg$parsevisualFormatString, peg$c0 = peg$FAILED, peg$c1 = null, - peg$c2 = ':', - peg$c3 = { type: 'literal', value: ':', description: '":"' }, + peg$c2 = ":", + peg$c3 = { type: "literal", value: ":", description: "\":\"" }, peg$c4 = [], peg$c5 = function peg$c5(o, superto, view, views, tosuper, comments) { return { @@ -1273,40 +1247,40 @@ var parserExt = (function () { cascade: (superto || []).concat([view], [].concat.apply([], views), tosuper || []) }; }, - peg$c6 = 'HV', - peg$c7 = { type: 'literal', value: 'HV', description: '"HV"' }, + peg$c6 = "HV", + peg$c7 = { type: "literal", value: "HV", description: "\"HV\"" }, peg$c8 = function peg$c8() { return 'horzvert'; }, - peg$c9 = 'H', - peg$c10 = { type: 'literal', value: 'H', description: '"H"' }, + peg$c9 = "H", + peg$c10 = { type: "literal", value: "H", description: "\"H\"" }, peg$c11 = function peg$c11() { return 'horizontal'; }, - peg$c12 = 'V', - peg$c13 = { type: 'literal', value: 'V', description: '"V"' }, + peg$c12 = "V", + peg$c13 = { type: "literal", value: "V", description: "\"V\"" }, peg$c14 = function peg$c14() { return 'vertical'; }, - peg$c15 = 'Z', - peg$c16 = { type: 'literal', value: 'Z', description: '"Z"' }, + peg$c15 = "Z", + peg$c16 = { type: "literal", value: "Z", description: "\"Z\"" }, peg$c17 = function peg$c17() { return 'zIndex'; }, - peg$c18 = ' ', - peg$c19 = { type: 'literal', value: ' ', description: '" "' }, - peg$c20 = '//', - peg$c21 = { type: 'literal', value: '//', description: '"//"' }, - peg$c22 = { type: 'any', description: 'any character' }, - peg$c23 = '|', - peg$c24 = { type: 'literal', value: '|', description: '"|"' }, + peg$c18 = " ", + peg$c19 = { type: "literal", value: " ", description: "\" \"" }, + peg$c20 = "//", + peg$c21 = { type: "literal", value: "//", description: "\"//\"" }, + peg$c22 = { type: "any", description: "any character" }, + peg$c23 = "|", + peg$c24 = { type: "literal", value: "|", description: "\"|\"" }, peg$c25 = function peg$c25() { return { view: null }; }, - peg$c26 = '[', - peg$c27 = { type: 'literal', value: '[', description: '"["' }, - peg$c28 = ']', - peg$c29 = { type: 'literal', value: ']', description: '"]"' }, + peg$c26 = "[", + peg$c27 = { type: "literal", value: "[", description: "\"[\"" }, + peg$c28 = "]", + peg$c29 = { type: "literal", value: "]", description: "\"]\"" }, peg$c30 = function peg$c30(view, predicates, cascadedViews) { return extend(extend(view, predicates ? { constraints: predicates } : {}), cascadedViews ? { cascade: cascadedViews @@ -1315,153 +1289,153 @@ var parserExt = (function () { peg$c31 = function peg$c31(views, connection) { return [].concat([].concat.apply([], views), [connection]); }, - peg$c32 = '->', - peg$c33 = { type: 'literal', value: '->', description: '"->"' }, + peg$c32 = "->", + peg$c33 = { type: "literal", value: "->", description: "\"->\"" }, peg$c34 = function peg$c34() { - return [{ relation: 'none', $parserOffset: offset() }]; + return [{ relation: 'none' }]; }, - peg$c35 = '-', - peg$c36 = { type: 'literal', value: '-', description: '"-"' }, + peg$c35 = "-", + peg$c36 = { type: "literal", value: "-", description: "\"-\"" }, peg$c37 = function peg$c37(predicateList) { return predicateList; }, peg$c38 = function peg$c38() { - return [{ relation: 'equ', constant: 'default', $parserOffset: offset() }]; + return [{ relation: 'equ', constant: 'default' }]; }, - peg$c39 = '~', - peg$c40 = { type: 'literal', value: '~', description: '"~"' }, + peg$c39 = "~", + peg$c40 = { type: "literal", value: "~", description: "\"~\"" }, peg$c41 = function peg$c41() { - return [{ relation: 'equ', equalSpacing: true, $parserOffset: offset() }]; + return [{ relation: 'equ', equalSpacing: true }]; }, - peg$c42 = '', + peg$c42 = "", peg$c43 = function peg$c43() { - return [{ relation: 'equ', constant: 0, $parserOffset: offset() }]; + return [{ relation: 'equ', constant: 0 }]; }, peg$c44 = function peg$c44(p) { - return [{ relation: 'equ', multiplier: p.multiplier, $parserOffset: offset() }]; + return [{ relation: 'equ', multiplier: p.multiplier }]; }, peg$c45 = function peg$c45(n) { - return [{ relation: 'equ', constant: n, $parserOffset: offset() }]; + return [{ relation: 'equ', constant: n }]; }, - peg$c46 = '(', - peg$c47 = { type: 'literal', value: '(', description: '"("' }, - peg$c48 = ',', - peg$c49 = { type: 'literal', value: ',', description: '","' }, - peg$c50 = ')', - peg$c51 = { type: 'literal', value: ')', description: '")"' }, + peg$c46 = "(", + peg$c47 = { type: "literal", value: "(", description: "\"(\"" }, + peg$c48 = ",", + peg$c49 = { type: "literal", value: ",", description: "\",\"" }, + peg$c50 = ")", + peg$c51 = { type: "literal", value: ")", description: "\")\"" }, peg$c52 = function peg$c52(p, ps) { return [p].concat(ps.map(function (p) { return p[1]; })); }, - peg$c53 = '@', - peg$c54 = { type: 'literal', value: '@', description: '"@"' }, + peg$c53 = "@", + peg$c54 = { type: "literal", value: "@", description: "\"@\"" }, peg$c55 = function peg$c55(r, o, p) { return extend({ relation: 'equ' }, r || {}, o, p ? p[1] : {}); }, peg$c56 = function peg$c56(r, o, p) { return extend({ relation: 'equ', equalSpacing: true }, r || {}, o, p ? p[1] : {}); }, - peg$c57 = '==', - peg$c58 = { type: 'literal', value: '==', description: '"=="' }, + peg$c57 = "==", + peg$c58 = { type: "literal", value: "==", description: "\"==\"" }, peg$c59 = function peg$c59() { - return { relation: 'equ', $parserOffset: offset() }; + return { relation: 'equ' }; }, - peg$c60 = '<=', - peg$c61 = { type: 'literal', value: '<=', description: '"<="' }, + peg$c60 = "<=", + peg$c61 = { type: "literal", value: "<=", description: "\"<=\"" }, peg$c62 = function peg$c62() { - return { relation: 'leq', $parserOffset: offset() }; + return { relation: 'leq' }; }, - peg$c63 = '>=', - peg$c64 = { type: 'literal', value: '>=', description: '">="' }, + peg$c63 = ">=", + peg$c64 = { type: "literal", value: ">=", description: "\">=\"" }, peg$c65 = function peg$c65() { - return { relation: 'geq', $parserOffset: offset() }; + return { relation: 'geq' }; }, peg$c66 = /^[0-9]/, - peg$c67 = { type: 'class', value: '[0-9]', description: '[0-9]' }, + peg$c67 = { type: "class", value: "[0-9]", description: "[0-9]" }, peg$c68 = function peg$c68(digits) { - return { priority: parseInt(digits.join(''), 10) }; + return { priority: parseInt(digits.join(""), 10) }; }, peg$c69 = function peg$c69(n) { return { constant: n }; }, - peg$c70 = '%', - peg$c71 = { type: 'literal', value: '%', description: '"%"' }, + peg$c70 = "%", + peg$c71 = { type: "literal", value: "%", description: "\"%\"" }, peg$c72 = function peg$c72(n) { return { view: null, multiplier: n / 100 }; }, peg$c73 = function peg$c73(vn, a, m, c) { return { view: vn.view, attribute: a ? a : undefined, multiplier: m ? m : 1, constant: c ? c : undefined }; }, - peg$c74 = '.left', - peg$c75 = { type: 'literal', value: '.left', description: '".left"' }, + peg$c74 = ".left", + peg$c75 = { type: "literal", value: ".left", description: "\".left\"" }, peg$c76 = function peg$c76() { return 'left'; }, - peg$c77 = '.right', - peg$c78 = { type: 'literal', value: '.right', description: '".right"' }, + peg$c77 = ".right", + peg$c78 = { type: "literal", value: ".right", description: "\".right\"" }, peg$c79 = function peg$c79() { return 'right'; }, - peg$c80 = '.top', - peg$c81 = { type: 'literal', value: '.top', description: '".top"' }, + peg$c80 = ".top", + peg$c81 = { type: "literal", value: ".top", description: "\".top\"" }, peg$c82 = function peg$c82() { return 'top'; }, - peg$c83 = '.bottom', - peg$c84 = { type: 'literal', value: '.bottom', description: '".bottom"' }, + peg$c83 = ".bottom", + peg$c84 = { type: "literal", value: ".bottom", description: "\".bottom\"" }, peg$c85 = function peg$c85() { return 'bottom'; }, - peg$c86 = '.width', - peg$c87 = { type: 'literal', value: '.width', description: '".width"' }, + peg$c86 = ".width", + peg$c87 = { type: "literal", value: ".width", description: "\".width\"" }, peg$c88 = function peg$c88() { return 'width'; }, - peg$c89 = '.height', - peg$c90 = { type: 'literal', value: '.height', description: '".height"' }, + peg$c89 = ".height", + peg$c90 = { type: "literal", value: ".height", description: "\".height\"" }, peg$c91 = function peg$c91() { return 'height'; }, - peg$c92 = '.centerX', - peg$c93 = { type: 'literal', value: '.centerX', description: '".centerX"' }, + peg$c92 = ".centerX", + peg$c93 = { type: "literal", value: ".centerX", description: "\".centerX\"" }, peg$c94 = function peg$c94() { return 'centerX'; }, - peg$c95 = '.centerY', - peg$c96 = { type: 'literal', value: '.centerY', description: '".centerY"' }, + peg$c95 = ".centerY", + peg$c96 = { type: "literal", value: ".centerY", description: "\".centerY\"" }, peg$c97 = function peg$c97() { return 'centerY'; }, - peg$c98 = '/', - peg$c99 = { type: 'literal', value: '/', description: '"/"' }, + peg$c98 = "/", + peg$c99 = { type: "literal", value: "/", description: "\"/\"" }, peg$c100 = function peg$c100(n) { return 1 / n; }, - peg$c101 = '*', - peg$c102 = { type: 'literal', value: '*', description: '"*"' }, + peg$c101 = "*", + peg$c102 = { type: "literal", value: "*", description: "\"*\"" }, peg$c103 = function peg$c103(n) { return n; }, peg$c104 = function peg$c104(n) { return -n; }, - peg$c105 = '+', - peg$c106 = { type: 'literal', value: '+', description: '"+"' }, + peg$c105 = "+", + peg$c106 = { type: "literal", value: "+", description: "\"+\"" }, peg$c107 = /^[a-zA-Z_]/, - peg$c108 = { type: 'class', value: '[a-zA-Z_]', description: '[a-zA-Z_]' }, + peg$c108 = { type: "class", value: "[a-zA-Z_]", description: "[a-zA-Z_]" }, peg$c109 = /^[a-zA-Z0-9_]/, - peg$c110 = { type: 'class', value: '[a-zA-Z0-9_]', description: '[a-zA-Z0-9_]' }, + peg$c110 = { type: "class", value: "[a-zA-Z0-9_]", description: "[a-zA-Z0-9_]" }, peg$c111 = function peg$c111(f, v) { - return { view: f + v }; + return { view: f + v, $parserOffset: offset() }; }, - peg$c112 = '.', - peg$c113 = { type: 'literal', value: '.', description: '"."' }, + peg$c112 = ".", + peg$c113 = { type: "literal", value: ".", description: "\".\"" }, peg$c114 = function peg$c114(digits, decimals) { - return parseFloat(digits.concat('.').concat(decimals).join(''), 10); + return parseFloat(digits.concat(".").concat(decimals).join(""), 10); }, peg$c115 = function peg$c115(digits) { - return parseInt(digits.join(''), 10); + return parseInt(digits.join(""), 10); }, peg$currPos = 0, peg$reportedPos = 0, @@ -1472,9 +1446,9 @@ var parserExt = (function () { peg$silentFails = 0, peg$result; - if ('startRule' in options) { + if ("startRule" in options) { if (!(options.startRule in peg$startRuleFunctions)) { - throw new Error('Can\'t start parsing from rule "' + options.startRule + '".'); + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); } peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; @@ -1497,7 +1471,7 @@ var parserExt = (function () { } function expected(description) { - throw peg$buildException(null, [{ type: 'other', description: description }], peg$reportedPos); + throw peg$buildException(null, [{ type: "other", description: description }], peg$reportedPos); } function error(message) { @@ -1510,13 +1484,13 @@ var parserExt = (function () { for (p = startPos; p < endPos; p++) { ch = input.charAt(p); - if (ch === '\n') { + if (ch === "\n") { if (!details.seenCR) { details.line++; } details.column = 1; details.seenCR = false; - } else if (ch === '\r' || ch === '\u2028' || ch === '\u2029') { + } else if (ch === "\r" || ch === '\u2028' || ch === '\u2029') { details.line++; details.column = 1; details.seenCR = true; @@ -1601,11 +1575,11 @@ var parserExt = (function () { expectedDescs[i] = expected[i].description; } - expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(', ') + ' or ' + expectedDescs[expected.length - 1] : expectedDescs[0]; + expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(", ") + " or " + expectedDescs[expected.length - 1] : expectedDescs[0]; - foundDesc = found ? '"' + stringEscape(found) + '"' : 'end of input'; + foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input"; - return 'Expected ' + expectedDesc + ' but ' + foundDesc + ' found.'; + return "Expected " + expectedDesc + " but " + foundDesc + " found."; } var posDetails = peg$computePosDetails(pos), @@ -3231,7 +3205,7 @@ var parserExt = (function () { return peg$result; } else { if (peg$result !== peg$FAILED && peg$currPos < input.length) { - peg$fail({ type: 'end', description: 'end of input' }); + peg$fail({ type: "end", description: "end of input" }); } throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); @@ -3418,7 +3392,8 @@ function _processStackView(context, name, subView) { * Recursive helper function that processes the cascaded data. * @private */ -function _processCascade(context, cascade, stackView) { +function _processCascade(context, cascade, parentItem) { + var stackView = parentItem ? parentItem.view : null; var subViews = []; var subView = undefined; if (stackView) { @@ -3427,21 +3402,21 @@ function _processCascade(context, cascade, stackView) { for (var i = 0; i < cascade.length; i++) { context.item = cascade[i]; if (!Array.isArray(context.item) && context.item.hasOwnProperty('view')) { + if (context.item.view !== stackView) { + subViews.push(context.item.view); + subView = context.subViews[context.item.view]; + if (!subView) { + subView = { orientations: 0 }; + context.subViews[context.item.view] = subView; + } + subView.orientations = subView.orientations | context.orientation; + if (subView.stack) { + _processStackView(context, context.item.view, subView); + } + } context.view1 = context.view2; context.view2 = context.item.view; if (context.view1 !== undefined && context.view2 !== undefined && context.relation) { - if (context.item.view !== stackView) { - subViews.push(context.item.view); - subView = context.subViews[context.item.view]; - if (!subView) { - subView = { orientations: 0 }; - context.subViews[context.item.view] = subView; - } - subView.orientations = subView.orientations | context.orientation; - if (subView.stack) { - _processStackView(context, context.item.view, subView); - } - } if (context.relation.equalSpacing) { _processEqualSpacer(context, stackView); } @@ -3500,7 +3475,7 @@ function _processCascade(context, cascade, stackView) { // Process cascaded data (child stack-views) if (context.item.cascade) { - _processCascade(context, context.item.cascade, context.item.view); + _processCascade(context, context.item.cascade, context.item); } } else { context.relation = context.item[0]; @@ -3513,7 +3488,9 @@ function _processCascade(context, cascade, stackView) { subView = { orientations: context.orientation }; context.subViews[stackView] = subView; } else if (subView.stack) { - throw new Error('A stack with name "' + stackView + '"" already exists'); + var err = new Error('A stack named "' + stackView + '" has already been created'); + err.column = parentItem.$parserOffset + 1; + throw err; } subView.stack = { orientation: context.orientation, @@ -3595,8 +3572,6 @@ var VisualFormat = (function () { } return context.constraints; } - }, { - key: 'parse', /** * Parses one or more visual format strings into an array of constraint definitions. @@ -3612,6 +3587,8 @@ var VisualFormat = (function () { * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`). * @return {Array} Array of constraint definitions. */ + }, { + key: 'parse', value: function parse(visualFormat, options) { var lineSeperator = options && options.lineSeperator ? options.lineSeperator : '\n'; if (!Array.isArray(visualFormat) && visualFormat.indexOf(lineSeperator) < 0) { @@ -3659,8 +3636,6 @@ var VisualFormat = (function () { } return constraints; } - }, { - key: 'parseMetaInfo', /** * Parses meta information from the comments in the VFL. @@ -3701,6 +3676,8 @@ var VisualFormat = (function () { * @param {String} [options.prefix] When specified, also processes the categories using that prefix (e.g. "-dev-viewport max-height:10"). * @return {Object} meta-info */ + }, { + key: 'parseMetaInfo', value: function parseMetaInfo(visualFormat, options) { var lineSeperator = options && options.lineSeperator ? options.lineSeperator : '\n'; var prefix = options ? options.prefix : undefined; @@ -3830,62 +3807,139 @@ var SubView = (function () { value: function toString() { JSON.stringify(this.toJSON(), undefined, 2); } - }, { - key: 'name', /** * Name of the sub-view. * @readonly * @type {String} */ - get: function () { - return this._name; + }, { + key: 'getValue', + + /** + * Gets the value of one of the attributes. + * + * @param {String|Attribute} attr Attribute name (e.g. 'right', 'centerY', Attribute.TOP). + * @return {Number} value or `undefined` + */ + value: function getValue(attr) { + return this._attr[attr] ? this._attr[attr].value() : undefined; } + + /** + * @private + */ }, { - key: 'left', + key: '_getAttr', + value: function _getAttr(attr) { + if (this._attr[attr]) { + return this._attr[attr]; + } + this._attr[attr] = true ? new c.Variable() : new kiwi.Variable(); + switch (attr) { + case Attribute.RIGHT: + this._getAttr(Attribute.LEFT); + this._getAttr(Attribute.WIDTH); + if (true) { + this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], this._attr[Attribute.WIDTH]))); + } else { + this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH]))); + } + break; + case Attribute.BOTTOM: + this._getAttr(Attribute.TOP); + this._getAttr(Attribute.HEIGHT); + if (true) { + this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], this._attr[Attribute.HEIGHT]))); + } else { + this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT]))); + } + break; + case Attribute.CENTERX: + this._getAttr(Attribute.LEFT); + this._getAttr(Attribute.WIDTH); + if (true) { + this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], c.divide(this._attr[Attribute.WIDTH], 2)))); + } else { + this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH].divide(2)))); + } + break; + case Attribute.CENTERY: + this._getAttr(Attribute.TOP); + this._getAttr(Attribute.HEIGHT); + if (true) { + this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], c.divide(this._attr[Attribute.HEIGHT], 2)))); + } else { + this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT].divide(2)))); + } + break; + } + if (!true) { + this._solver.updateVariables(); + } + return this._attr[attr]; + } + + /** + * @private + */ + }, { + key: '_getAttrValue', + value: function _getAttrValue(attr) { + if (true) { + return this._getAttr(attr).value; + } else { + return this._getAttr(attr).value(); + } + } + }, { + key: 'name', + get: function get() { + return this._name; + } /** * Left value (`Attribute.LEFT`). * @readonly * @type {Number} */ - get: function () { + }, { + key: 'left', + get: function get() { return this._getAttrValue(Attribute.LEFT); } - }, { - key: 'right', /** * Right value (`Attribute.RIGHT`). * @readonly * @type {Number} */ - get: function () { + }, { + key: 'right', + get: function get() { return this._getAttrValue(Attribute.RIGHT); } - }, { - key: 'width', /** * Width value (`Attribute.WIDTH`). * @type {Number} */ - get: function () { + }, { + key: 'width', + get: function get() { return this._getAttrValue(Attribute.WIDTH); } - }, { - key: 'height', /** * Height value (`Attribute.HEIGHT`). * @readonly * @type {Number} */ - get: function () { + }, { + key: 'height', + get: function get() { return this._getAttrValue(Attribute.HEIGHT); } - }, { - key: 'intrinsicWidth', /** * Intrinsic width of the sub-view. @@ -3901,10 +3955,12 @@ var SubView = (function () { * * @type {Number} */ - get: function () { + }, { + key: 'intrinsicWidth', + get: function get() { return this._intrinsicWidth; }, - set: function (value) { + set: function set(value) { if (value !== undefined && value !== this._intrinsicWidth) { var attr = this._getAttr(Attribute.WIDTH); if (this._intrinsicWidth === undefined) { @@ -3923,8 +3979,6 @@ var SubView = (function () { } } } - }, { - key: 'intrinsicHeight', /** * Intrinsic height of the sub-view. @@ -3933,10 +3987,12 @@ var SubView = (function () { * * @type {Number} */ - get: function () { + }, { + key: 'intrinsicHeight', + get: function get() { return this._intrinsicHeight; }, - set: function (value) { + set: function set(value) { if (value !== undefined && value !== this._intrinsicHeight) { var attr = this._getAttr(Attribute.HEIGHT); if (this._intrinsicHeight === undefined) { @@ -3955,150 +4011,71 @@ var SubView = (function () { } } } - }, { - key: 'top', /** * Top value (`Attribute.TOP`). * @readonly * @type {Number} */ - get: function () { + }, { + key: 'top', + get: function get() { return this._getAttrValue(Attribute.TOP); } - }, { - key: 'bottom', /** * Bottom value (`Attribute.BOTTOM`). * @readonly * @type {Number} */ - get: function () { + }, { + key: 'bottom', + get: function get() { return this._getAttrValue(Attribute.BOTTOM); } - }, { - key: 'centerX', /** * Horizontal center (`Attribute.CENTERX`). * @readonly * @type {Number} */ - get: function () { + }, { + key: 'centerX', + get: function get() { return this._getAttrValue(Attribute.CENTERX); } - }, { - key: 'centerY', /** * Vertical center (`Attribute.CENTERY`). * @readonly * @type {Number} */ - get: function () { + }, { + key: 'centerY', + get: function get() { return this._getAttrValue(Attribute.CENTERY); } - }, { - key: 'zIndex', /** * Z-index (`Attribute.ZINDEX`). * @readonly * @type {Number} */ - get: function () { + }, { + key: 'zIndex', + get: function get() { return this._getAttrValue(Attribute.ZINDEX); } - }, { - key: 'type', /** * Returns the type of the sub-view. * @readonly * @type {String} */ - get: function () { - return this._type; - } - }, { - key: 'getValue', - - /** - * Gets the value of one of the attributes. - * - * @param {String|Attribute} attr Attribute name (e.g. 'right', 'centerY', Attribute.TOP). - * @return {Number} value or `undefined` - */ - value: function getValue(attr) { - return this._attr[attr] ? this._attr[attr].value() : undefined; - } }, { - key: '_getAttr', - - /** - * @private - */ - value: function _getAttr(attr) { - if (this._attr[attr]) { - return this._attr[attr]; - } - this._attr[attr] = true ? new c.Variable() : new kiwi.Variable(); - switch (attr) { - case Attribute.RIGHT: - this._getAttr(Attribute.LEFT); - this._getAttr(Attribute.WIDTH); - if (true) { - this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], this._attr[Attribute.WIDTH]))); - } else { - this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH]))); - } - break; - case Attribute.BOTTOM: - this._getAttr(Attribute.TOP); - this._getAttr(Attribute.HEIGHT); - if (true) { - this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], this._attr[Attribute.HEIGHT]))); - } else { - this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT]))); - } - break; - case Attribute.CENTERX: - this._getAttr(Attribute.LEFT); - this._getAttr(Attribute.WIDTH); - if (true) { - this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], c.divide(this._attr[Attribute.WIDTH], 2)))); - } else { - this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH].divide(2)))); - } - break; - case Attribute.CENTERY: - this._getAttr(Attribute.TOP); - this._getAttr(Attribute.HEIGHT); - if (true) { - this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], c.divide(this._attr[Attribute.HEIGHT], 2)))); - } else { - this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT].divide(2)))); - } - break; - } - if (!true) { - this._solver.updateVariables(); - } - return this._attr[attr]; - } - }, { - key: '_getAttrValue', - - /** - * @private - */ - value: function _getAttrValue(attr) { - if (true) { - return this._getAttr(attr).value; - } else { - return this._getAttr(attr).value(); - } + key: 'type', + get: function get() { + return this._type; } }]); @@ -4316,84 +4293,27 @@ var View = (function () { } } + /** + * Sets the width and height of the view. + * + * @param {Number} width Width of the view. + * @param {Number} height Height of the view. + * @return {View} this + */ + _createClass(View, [{ key: 'setSize', - - /** - * Sets the width and height of the view. - * - * @param {Number} width Width of the view. - * @param {Number} height Height of the view. - * @return {View} this - */ value: function setSize(width, height /*, depth*/) { this._parentSubView.intrinsicWidth = width; this._parentSubView.intrinsicHeight = height; return this; } - }, { - key: 'width', /** * Width that was set using `setSize`. * @readonly * @type {Number} */ - get: function () { - return this._parentSubView.intrinsicWidth; - } - }, { - key: 'height', - - /** - * Height that was set using `setSize`. - * @readonly - * @type {Number} - */ - get: function () { - return this._parentSubView.intrinsicHeight; - } - }, { - key: 'fittingWidth', - - /** - * Width that is calculated from the constraints and the `.intrinsicWidth` of - * the sub-views. - * - * When the width has been explicitely set using `setSize`, the fittingWidth - * will **always** be the same as the explicitely set width. To calculate the size - * based on the content, use: - * ```javascript - * var view = new AutoLayout.View({ - * constraints: VisualFormat.parse('|-[view1]-[view2]-'), - * spacing: 20 - * }); - * view.subViews.view1.intrinsicWidth = 100; - * view.subViews.view2.intrinsicWidth = 100; - * console.log('fittingWidth: ' + view.fittingWidth); // 260 - * ``` - * - * @readonly - * @type {Number} - */ - get: function () { - return this._parentSubView.width; - } - }, { - key: 'fittingHeight', - - /** - * Height that is calculated from the constraints and the `.intrinsicHeight` of - * the sub-views. - * - * See `.fittingWidth`. - * - * @readonly - * @type {Number} - */ - get: function () { - return this._parentSubView.height; - } }, { key: 'setSpacing', @@ -4463,8 +4383,6 @@ var View = (function () { } return this; } - }, { - key: 'addConstraint', /** * Adds a constraint definition. @@ -4486,6 +4404,8 @@ var View = (function () { * @param {Object} constraint Constraint definition. * @return {View} this */ + }, { + key: 'addConstraint', value: function addConstraint(constraint) { _addConstraint.call(this, constraint); if (!true) { @@ -4493,8 +4413,6 @@ var View = (function () { } return this; } - }, { - key: 'addConstraints', /** * Adds one or more constraint definitions. @@ -4516,6 +4434,8 @@ var View = (function () { * @param {Array} constraints One or more constraint definitions. * @return {View} this */ + }, { + key: 'addConstraints', value: function addConstraints(constraints) { for (var j = 0; j < constraints.length; j++) { _addConstraint.call(this, constraints[j]); @@ -4525,15 +4445,72 @@ var View = (function () { } return this; } - }, { - key: 'subViews', /** * Dictionary of `SubView` objects that have been created when adding constraints. * @readonly * @type {Object.SubView} */ - get: function () { + }, { + key: 'width', + get: function get() { + return this._parentSubView.intrinsicWidth; + } + + /** + * Height that was set using `setSize`. + * @readonly + * @type {Number} + */ + }, { + key: 'height', + get: function get() { + return this._parentSubView.intrinsicHeight; + } + + /** + * Width that is calculated from the constraints and the `.intrinsicWidth` of + * the sub-views. + * + * When the width has been explicitely set using `setSize`, the fittingWidth + * will **always** be the same as the explicitely set width. To calculate the size + * based on the content, use: + * ```javascript + * var view = new AutoLayout.View({ + * constraints: VisualFormat.parse('|-[view1]-[view2]-'), + * spacing: 20 + * }); + * view.subViews.view1.intrinsicWidth = 100; + * view.subViews.view2.intrinsicWidth = 100; + * console.log('fittingWidth: ' + view.fittingWidth); // 260 + * ``` + * + * @readonly + * @type {Number} + */ + }, { + key: 'fittingWidth', + get: function get() { + return this._parentSubView.width; + } + + /** + * Height that is calculated from the constraints and the `.intrinsicHeight` of + * the sub-views. + * + * See `.fittingWidth`. + * + * @readonly + * @type {Number} + */ + }, { + key: 'fittingHeight', + get: function get() { + return this._parentSubView.height; + } + }, { + key: 'subViews', + get: function get() { return this._subViews; } @@ -4545,7 +4522,6 @@ var View = (function () { //get hasAmbiguousLayout() { // Todo //} - }]); return View; @@ -4563,5 +4539,28 @@ var AutoLayout = { module.exports = AutoLayout; -},{"cassowary/bin/c":1}]},{},[2])(2) +},{"cassowary/bin/c":2}],2:[function(require,module,exports){ +/** + * Parts Copyright (C) 2011-2012, Alex Russell (slightlyoff@chromium.org) + * Parts Copyright (C) Copyright (C) 1998-2000 Greg J. Badros + * + * Use of this source code is governed by the LGPL, which can be found in the + * COPYING.LGPL file. + * + * This is a compiled version of Cassowary/JS. For source versions or to + * contribute, see the github project: + * + * https://github.com/slightlyoff/cassowary-js-refactor + * + */ + +(function() { +(function(a){"use strict";try{(function(){}).bind(a)}catch(b){Object.defineProperty(Function.prototype,"bind",{value:function(a){var b=this;return function(){return b.apply(a,arguments)}},enumerable:!1,configurable:!0,writable:!0})}var c=a.HTMLElement!==void 0,d=function(a){for(var b=null;a&&a!=Object.prototype;){if(a.tagName){b=a.tagName;break}a=a.prototype}return b||"div"},e=1e-8,f={},g=function(a,b){if(a&&b){if("function"==typeof a[b])return a[b];var c=a.prototype;if(c&&"function"==typeof c[b])return c[b];if(c!==Object.prototype&&c!==Function.prototype)return"function"==typeof a.__super__?g(a.__super__,b):void 0}},h=a.c={debug:!1,trace:!1,verbose:!1,traceAdded:!1,GC:!1,GEQ:1,LEQ:2,inherit:function(b){var e=null,g=null;b["extends"]&&(g=b["extends"],delete b["extends"]),b.initialize&&(e=b.initialize,delete b.initialize);var h=e||function(){};Object.defineProperty(h,"__super__",{value:g?g:Object,enumerable:!1,configurable:!0,writable:!1}),b._t&&(f[b._t]=h);var i=h.prototype=Object.create(g?g.prototype:Object.prototype);if(this.extend(i,b),c&&g&&g.prototype instanceof a.HTMLElement){var j=h,k=d(i),l=function(a){return a.__proto__=i,j.apply(a,arguments),i.created&&a.created(),i.decorate&&a.decorate(),a};this.extend(i,{upgrade:l}),h=function(){return l(a.document.createElement(k))},h.prototype=i,this.extend(h,{ctor:j})}return h},extend:function(a,b){return this.own(b,function(c){var d=Object.getOwnPropertyDescriptor(b,c);try{"function"==typeof d.get||"function"==typeof d.set?Object.defineProperty(a,c,d):"function"==typeof d.value||"_"===c.charAt(0)?(d.writable=!0,d.configurable=!0,d.enumerable=!1,Object.defineProperty(a,c,d)):a[c]=b[c]}catch(e){}}),a},own:function(b,c,d){return Object.getOwnPropertyNames(b).forEach(c,d||a),b},traceprint:function(a){h.verbose&&console.log(a)},fnenterprint:function(a){console.log("* "+a)},fnexitprint:function(a){console.log("- "+a)},assert:function(a,b){if(!a)throw new h.InternalError("Assertion failed: "+b)},plus:function(a,b){return a instanceof h.Expression||(a=new h.Expression(a)),b instanceof h.Expression||(b=new h.Expression(b)),a.plus(b)},minus:function(a,b){return a instanceof h.Expression||(a=new h.Expression(a)),b instanceof h.Expression||(b=new h.Expression(b)),a.minus(b)},times:function(a,b){return("number"==typeof a||a instanceof h.Variable)&&(a=new h.Expression(a)),("number"==typeof b||b instanceof h.Variable)&&(b=new h.Expression(b)),a.times(b)},divide:function(a,b){return("number"==typeof a||a instanceof h.Variable)&&(a=new h.Expression(a)),("number"==typeof b||b instanceof h.Variable)&&(b=new h.Expression(b)),a.divide(b)},approx:function(a,b){if(a===b)return!0;var c,d;return c=a instanceof h.Variable?a.value:a,d=b instanceof h.Variable?b.value:b,0==c?e>Math.abs(d):0==d?e>Math.abs(c):Math.abs(c-d)64||this._deleted>this._compactThreshold&&(this._compact(),this._deleted=0)},"delete":function(a){a=b(a),this._store.hasOwnProperty(a)&&(this._deleted++,delete this._store[a],this.size>0&&this.size--)},each:function(a,b){if(this.size){this._perhapsCompact();var c=this._store,d=this._keyStrMap;Object.keys(this._store).forEach(function(e){a.call(b||null,d[e],c[e])},this)}},escapingEach:function(a,b){if(this.size){this._perhapsCompact();for(var c=this,e=this._store,f=this._keyStrMap,g=d,h=Object.keys(e),i=0;h.length>i;i++)if(function(d){c._store.hasOwnProperty(d)&&(g=a.call(b||null,f[d],e[d]))}(h[i]),g){if(void 0!==g.retval)return g;if(g.brk)break}}},clone:function(){var b=new a.HashTable;return this.size&&(b.size=this.size,c(this._store,b._store),c(this._keyStrMap,b._keyStrMap)),b},equals:function(b){if(b===this)return!0;if(!(b instanceof a.HashTable)||b._size!==this._size)return!1;for(var c=Object.keys(this._store),d=0;c.length>d;d++){var e=c[d];if(this._keyStrMap[e]!==b._keyStrMap[e]||this._store[e]!==b._store[e])return!1}return!0},toString:function(){var b="";return this.each(function(a,c){b+=a+" => "+c+"\n"}),b}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.HashSet=a.inherit({_t:"c.HashSet",initialize:function(){this.storage=[],this.size=0},add:function(a){var b=this.storage;b.indexOf(a),-1==b.indexOf(a)&&b.push(a),this.size=this.storage.length},values:function(){return this.storage},has:function(a){var b=this.storage;return-1!=b.indexOf(a)},"delete":function(a){var b=this.storage.indexOf(a);return-1==b?null:(this.storage.splice(b,1)[0],this.size=this.storage.length,void 0)},clear:function(){this.storage.length=0},each:function(a,b){this.size&&this.storage.forEach(a,b)},escapingEach:function(a,b){this.size&&this.storage.forEach(a,b)},toString:function(){var a=this.size+" {",b=!0;return this.each(function(c){b?b=!1:a+=", ",a+=c}),a+="}\n"},toJSON:function(){var a=[];return this.each(function(b){a.push(b.toJSON())}),{_t:"c.HashSet",data:a}},fromJSON:function(b){var c=new a.HashSet;return b.data&&(c.size=b.data.length,c.storage=b.data),c}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Error=a.inherit({initialize:function(a){a&&(this._description=a)},_name:"c.Error",_description:"An error has occured in Cassowary",set description(a){this._description=a},get description(){return"("+this._name+") "+this._description},get message(){return this.description},toString:function(){return this.description}});var b=function(b,c){return a.inherit({"extends":a.Error,initialize:function(){a.Error.apply(this,arguments)},_name:b||"",_description:c||""})};a.ConstraintNotFound=b("c.ConstraintNotFound","Tried to remove a constraint never added to the tableu"),a.InternalError=b("c.InternalError"),a.NonExpression=b("c.NonExpression","The resulting expression would be non"),a.NotEnoughStays=b("c.NotEnoughStays","There are not enough stays to give specific values to every variable"),a.RequiredFailure=b("c.RequiredFailure","A required constraint cannot be satisfied"),a.TooDifficult=b("c.TooDifficult","The constraints are too difficult to solve")}(this.c||module.parent.exports||{}),function(a){"use strict";var b=1e3;a.SymbolicWeight=a.inherit({_t:"c.SymbolicWeight",initialize:function(){this.value=0;for(var a=1,c=arguments.length-1;c>=0;--c)this.value+=arguments[c]*a,a*=b},toJSON:function(){return{_t:this._t,value:this.value}}})}(this.c||module.parent.exports||{}),function(a){a.Strength=a.inherit({initialize:function(b,c,d,e){this.name=b,this.symbolicWeight=c instanceof a.SymbolicWeight?c:new a.SymbolicWeight(c,d,e)},get required(){return this===a.Strength.required},toString:function(){return this.name+(this.isRequired?"":":"+this.symbolicWeight)}}),a.Strength.required=new a.Strength("",1e3,1e3,1e3),a.Strength.strong=new a.Strength("strong",1,0,0),a.Strength.medium=new a.Strength("medium",0,1,0),a.Strength.weak=new a.Strength("weak",0,0,1)}(this.c||("undefined"!=typeof module?module.parent.exports.c:{})),function(a){"use strict";a.AbstractVariable=a.inherit({isDummy:!1,isExternal:!1,isPivotable:!1,isRestricted:!1,_init:function(b,c){this.hashCode=a._inc(),this.name=(c||"")+this.hashCode,b&&(b.name!==void 0&&(this.name=b.name),b.value!==void 0&&(this.value=b.value),b.prefix!==void 0&&(this._prefix=b.prefix))},_prefix:"",name:"",value:0,toJSON:function(){var a={};return this._t&&(a._t=this._t),this.name&&(a.name=this.name),this.value!==void 0&&(a.value=this.value),this._prefix&&(a._prefix=this._prefix),this._t&&(a._t=this._t),a},fromJSON:function(b,c){var d=new c;return a.extend(d,b),d},toString:function(){return this._prefix+"["+this.name+":"+this.value+"]"}}),a.Variable=a.inherit({_t:"c.Variable","extends":a.AbstractVariable,initialize:function(b){this._init(b,"v");var c=a.Variable._map;c&&(c[this.name]=this)},isExternal:!0}),a.DummyVariable=a.inherit({_t:"c.DummyVariable","extends":a.AbstractVariable,initialize:function(a){this._init(a,"d")},isDummy:!0,isRestricted:!0,value:"dummy"}),a.ObjectiveVariable=a.inherit({_t:"c.ObjectiveVariable","extends":a.AbstractVariable,initialize:function(a){this._init(a,"o")},value:"obj"}),a.SlackVariable=a.inherit({_t:"c.SlackVariable","extends":a.AbstractVariable,initialize:function(a){this._init(a,"s")},isPivotable:!0,isRestricted:!0,value:"slack"})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Point=a.inherit({initialize:function(b,c,d){if(b instanceof a.Variable)this._x=b;else{var e={value:b};d&&(e.name="x"+d),this._x=new a.Variable(e)}if(c instanceof a.Variable)this._y=c;else{var f={value:c};d&&(f.name="y"+d),this._y=new a.Variable(f)}},get x(){return this._x},set x(b){b instanceof a.Variable?this._x=b:this._x.value=b},get y(){return this._y},set y(b){b instanceof a.Variable?this._y=b:this._y.value=b},toString:function(){return"("+this.x+", "+this.y+")"}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Expression=a.inherit({initialize:function(b,c,d){a.GC&&console.log("new c.Expression"),this.constant="number"!=typeof d||isNaN(d)?0:d,this.terms=new a.HashTable,b instanceof a.AbstractVariable?this.setVariable(b,"number"==typeof c?c:1):"number"==typeof b&&(isNaN(b)?console.trace():this.constant=b)},initializeFromHash:function(b,c){return a.verbose&&(console.log("*******************************"),console.log("clone c.initializeFromHash"),console.log("*******************************")),a.GC&&console.log("clone c.Expression"),this.constant=b,this.terms=c.clone(),this},multiplyMe:function(a){this.constant*=a;var b=this.terms;return b.each(function(c,d){b.set(c,d*a)}),this},clone:function(){a.verbose&&(console.log("*******************************"),console.log("clone c.Expression"),console.log("*******************************"));var b=new a.Expression;return b.initializeFromHash(this.constant,this.terms),b},times:function(b){if("number"==typeof b)return this.clone().multiplyMe(b);if(this.isConstant)return b.times(this.constant);if(b.isConstant)return this.times(b.constant);throw new a.NonExpression},plus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,1):b instanceof a.Variable?this.clone().addVariable(b,1):void 0},minus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,-1):b instanceof a.Variable?this.clone().addVariable(b,-1):void 0},divide:function(b){if("number"==typeof b){if(a.approx(b,0))throw new a.NonExpression;return this.times(1/b)}if(b instanceof a.Expression){if(!b.isConstant)throw new a.NonExpression;return this.times(1/b.constant)}},addExpression:function(b,c,d,e){return b instanceof a.AbstractVariable&&(b=new a.Expression(b),a.trace&&console.log("addExpression: Had to cast a var to an expression")),c=c||1,this.constant+=c*b.constant,b.terms.each(function(a,b){this.addVariable(a,b*c,d,e)},this),this},addVariable:function(b,c,d,e){null==c&&(c=1),a.trace&&console.log("c.Expression::addVariable():",b,c);var f=this.terms.get(b);if(f){var g=f+c;0==g||a.approx(g,0)?(e&&e.noteRemovedVariable(b,d),this.terms.delete(b)):this.setVariable(b,g)}else a.approx(c,0)||(this.setVariable(b,c),e&&e.noteAddedVariable(b,d));return this},setVariable:function(a,b){return this.terms.set(a,b),this},anyPivotableVariable:function(){if(this.isConstant)throw new a.InternalError("anyPivotableVariable called on a constant");var b=this.terms.escapingEach(function(a){return a.isPivotable?{retval:a}:void 0});return b&&void 0!==b.retval?b.retval:null},substituteOut:function(b,c,d,e){a.trace&&(a.fnenterprint("CLE:substituteOut: "+b+", "+c+", "+d+", ..."),a.traceprint("this = "+this));var f=this.setVariable.bind(this),g=this.terms,h=g.get(b);g.delete(b),this.constant+=h*c.constant,c.terms.each(function(b,c){var i=g.get(b);if(i){var j=i+h*c;a.approx(j,0)?(e.noteRemovedVariable(b,d),g.delete(b)):f(b,j)}else f(b,h*c),e&&e.noteAddedVariable(b,d)}),a.trace&&a.traceprint("Now this is "+this)},changeSubject:function(a,b){this.setVariable(a,this.newSubject(b))},newSubject:function(b){a.trace&&a.fnenterprint("newSubject:"+b);var c=1/this.terms.get(b);return this.terms.delete(b),this.multiplyMe(-c),c},coefficientFor:function(a){return this.terms.get(a)||0},get isConstant(){return 0==this.terms.size},toString:function(){var b="",c=!1;if(!a.approx(this.constant,0)||this.isConstant){if(b+=this.constant,this.isConstant)return b;c=!0}return this.terms.each(function(a,d){c&&(b+=" + "),b+=d+"*"+a,c=!0}),b},equals:function(b){return b===this?!0:b instanceof a.Expression&&b.constant===this.constant&&b.terms.equals(this.terms)},Plus:function(a,b){return a.plus(b)},Minus:function(a,b){return a.minus(b)},Times:function(a,b){return a.times(b)},Divide:function(a,b){return a.divide(b)}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.AbstractConstraint=a.inherit({initialize:function(b,c){this.hashCode=a._inc(),this.strength=b||a.Strength.required,this.weight=c||1},isEditConstraint:!1,isInequality:!1,isStayConstraint:!1,get required(){return this.strength===a.Strength.required},toString:function(){return this.strength+" {"+this.weight+"} ("+this.expression+")"}});var b=a.AbstractConstraint.prototype.toString,c=function(b,c,d){a.AbstractConstraint.call(this,c||a.Strength.strong,d),this.variable=b,this.expression=new a.Expression(b,-1,b.value)};a.EditConstraint=a.inherit({"extends":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isEditConstraint:!0,toString:function(){return"edit:"+b.call(this)}}),a.StayConstraint=a.inherit({"extends":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isStayConstraint:!0,toString:function(){return"stay:"+b.call(this)}});var d=a.Constraint=a.inherit({"extends":a.AbstractConstraint,initialize:function(b,c,d){a.AbstractConstraint.call(this,c,d),this.expression=b}});a.Inequality=a.inherit({"extends":a.Constraint,_cloneOrNewCle:function(b){return b.clone?b.clone():new a.Expression(b)},initialize:function(b,c,e,f,g){var h=b instanceof a.Expression,i=e instanceof a.Expression,j=b instanceof a.AbstractVariable,k=e instanceof a.AbstractVariable,l="number"==typeof b,m="number"==typeof e;if((h||l)&&k){var n=b,o=c,p=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.GEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addVariable(p,-1)}}else if(j&&(i||m)){var n=e,o=c,p=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.LEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addVariable(p,-1)}}else{if(h&&m){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.GEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(l&&i){var s=e,o=c,t=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.LEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(h&&i){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(t),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(s));else{if(o!=a.LEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");this.expression.addExpression(this._cloneOrNewCle(s),-1)}}else{if(h)return d.call(this,b,c,e);if(c==a.GEQ)d.call(this,new a.Expression(e),f,g),this.expression.multiplyMe(-1),this.expression.addVariable(b);else{if(c!=a.LEQ)throw new a.InternalError("Invalid operator in c.Inequality constructor");d.call(this,new a.Expression(e),f,g),this.expression.addVariable(b,-1)}}}},isInequality:!0,toString:function(){return d.prototype.toString.call(this)+" >= 0) id: "+this.hashCode}}),a.Equation=a.inherit({"extends":a.Constraint,initialize:function(b,c,e,f){if(b instanceof a.Expression&&!c||c instanceof a.Strength)d.call(this,b,c,e);else if(b instanceof a.AbstractVariable&&c instanceof a.Expression){var g=b,h=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.AbstractVariable&&"number"==typeof c){var g=b,k=c,i=e,j=f;d.call(this,new a.Expression(k),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.Expression&&c instanceof a.AbstractVariable){var h=b,g=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else{if(!(b instanceof a.Expression||b instanceof a.AbstractVariable||"number"==typeof b)||!(c instanceof a.Expression||c instanceof a.AbstractVariable||"number"==typeof c))throw"Bad initializer to c.Equation";b=b instanceof a.Expression?b.clone():new a.Expression(b),c=c instanceof a.Expression?c.clone():new a.Expression(c),d.call(this,b,e,f),this.expression.addExpression(c,-1)}a.assert(this.strength instanceof a.Strength,"_strength not set")},toString:function(){return d.prototype.toString.call(this)+" = 0)"}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.EditInfo=a.inherit({initialize:function(a,b,c,d,e){this.constraint=a,this.editPlus=b,this.editMinus=c,this.prevEditConstant=d,this.index=e},toString:function(){return""}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Tableau=a.inherit({initialize:function(){this.columns=new a.HashTable,this.rows=new a.HashTable,this._infeasibleRows=new a.HashSet,this._externalRows=new a.HashSet,this._externalParametricVars=new a.HashSet},noteRemovedVariable:function(b,c){a.trace&&console.log("c.Tableau::noteRemovedVariable: ",b,c);var d=this.columns.get(b);c&&d&&d.delete(c)},noteAddedVariable:function(a,b){b&&this.insertColVar(a,b)},getInternalInfo:function(){var a="Tableau Information:\n";return a+="Rows: "+this.rows.size,a+=" (= "+(this.rows.size-1)+" constraints)",a+="\nColumns: "+this.columns.size,a+="\nInfeasible Rows: "+this._infeasibleRows.size,a+="\nExternal basic variables: "+this._externalRows.size,a+="\nExternal parametric variables: ",a+=this._externalParametricVars.size,a+="\n"},toString:function(){var a="Tableau:\n";return this.rows.each(function(b,c){a+=b,a+=" <==> ",a+=c,a+="\n"}),a+="\nColumns:\n",a+=this.columns,a+="\nInfeasible rows: ",a+=this._infeasibleRows,a+="External basic variables: ",a+=this._externalRows,a+="External parametric variables: ",a+=this._externalParametricVars},insertColVar:function(b,c){var d=this.columns.get(b);d||(d=new a.HashSet,this.columns.set(b,d)),d.add(c)},addRow:function(b,c){a.trace&&a.fnenterprint("addRow: "+b+", "+c),this.rows.set(b,c),c.terms.each(function(a){this.insertColVar(a,b),a.isExternal&&this._externalParametricVars.add(a)},this),b.isExternal&&this._externalRows.add(b),a.trace&&a.traceprint(""+this)},removeColumn:function(b){a.trace&&a.fnenterprint("removeColumn:"+b);var c=this.columns.get(b);c?(this.columns.delete(b),c.each(function(a){var c=this.rows.get(a);c.terms.delete(b)},this)):a.trace&&console.log("Could not find var",b,"in columns"),b.isExternal&&(this._externalRows.delete(b),this._externalParametricVars.delete(b))},removeRow:function(b){a.trace&&a.fnenterprint("removeRow:"+b);var c=this.rows.get(b);return a.assert(null!=c),c.terms.each(function(c){var e=this.columns.get(c);null!=e&&(a.trace&&console.log("removing from varset:",b),e.delete(b))},this),this._infeasibleRows.delete(b),b.isExternal&&this._externalRows.delete(b),this.rows.delete(b),a.trace&&a.fnexitprint("returning "+c),c},substituteOut:function(b,c){a.trace&&a.fnenterprint("substituteOut:"+b+", "+c),a.trace&&a.traceprint(""+this);var d=this.columns.get(b);d.each(function(a){var d=this.rows.get(a);d.substituteOut(b,c,a,this),a.isRestricted&&0>d.constant&&this._infeasibleRows.add(a)},this),b.isExternal&&(this._externalRows.add(b),this._externalParametricVars.delete(b)),this.columns.delete(b)},columnsHasKey:function(a){return!!this.columns.get(a)}})}(this.c||module.parent.exports||{}),function(a){var b=a.Tableau,c=b.prototype,d=1e-8,e=a.Strength.weak;a.SimplexSolver=a.inherit({"extends":a.Tableau,initialize:function(){a.Tableau.call(this),this._stayMinusErrorVars=[],this._stayPlusErrorVars=[],this._errorVars=new a.HashTable,this._markerVars=new a.HashTable,this._objective=new a.ObjectiveVariable({name:"Z"}),this._editVarMap=new a.HashTable,this._editVarList=[],this._slackCounter=0,this._artificialCounter=0,this._dummyCounter=0,this.autoSolve=!0,this._fNeedsSolving=!1,this._optimizeCount=0,this.rows.set(this._objective,new a.Expression),this._stkCedcns=[0],a.trace&&a.traceprint("objective expr == "+this.rows.get(this._objective))},addLowerBound:function(b,c){var d=new a.Inequality(b,a.GEQ,new a.Expression(c));return this.addConstraint(d)},addUpperBound:function(b,c){var d=new a.Inequality(b,a.LEQ,new a.Expression(c));return this.addConstraint(d)},addBounds:function(a,b,c){return this.addLowerBound(a,b),this.addUpperBound(a,c),this},add:function(){for(var a=0;arguments.length>a;a++)this.addConstraint(arguments[a]);return this},addConstraint:function(b){a.trace&&a.fnenterprint("addConstraint: "+b);var c=Array(2),d=Array(1),e=this.newExpression(b,c,d);if(d=d[0],this.tryAddingDirectly(e)||this.addWithArtificialVariable(e),this._fNeedsSolving=!0,b.isEditConstraint){var f=this._editVarMap.size,g=c[0],h=c[1];!g instanceof a.SlackVariable&&console.warn("cvEplus not a slack variable =",g),!h instanceof a.SlackVariable&&console.warn("cvEminus not a slack variable =",h),a.debug&&console.log("new c.EditInfo("+b+", "+g+", "+h+", "+d+", "+f+")");var i=new a.EditInfo(b,g,h,d,f);this._editVarMap.set(b.variable,i),this._editVarList[f]={v:b.variable,info:i}}return this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},addConstraintNoException:function(b){a.trace&&a.fnenterprint("addConstraintNoException: "+b);try{return this.addConstraint(b),!0}catch(c){return!1}},addEditVar:function(b,c){return a.trace&&a.fnenterprint("addEditVar: "+b+" @ "+c),this.addConstraint(new a.EditConstraint(b,c||a.Strength.strong))},beginEdit:function(){return a.assert(this._editVarMap.size>0,"_editVarMap.size > 0"),this._infeasibleRows.clear(),this._resetStayConstants(),this._stkCedcns.push(this._editVarMap.size),this},endEdit:function(){return a.assert(this._editVarMap.size>0,"_editVarMap.size > 0"),this.resolve(),this._stkCedcns.pop(),this.removeEditVarsTo(this._stkCedcns[this._stkCedcns.length-1]),this},removeAllEditVars:function(){return this.removeEditVarsTo(0)},removeEditVarsTo:function(b){try{for(var c=this._editVarList.length,d=b;c>d;d++)this._editVarList[d]&&this.removeConstraint(this._editVarMap.get(this._editVarList[d].v).constraint);return this._editVarList.length=b,a.assert(this._editVarMap.size==b,"_editVarMap.size == n"),this}catch(e){throw new a.InternalError("Constraint not found in removeEditVarsTo")}},addPointStays:function(b){return a.trace&&console.log("addPointStays",b),b.forEach(function(a,b){this.addStay(a.x,e,Math.pow(2,b)),this.addStay(a.y,e,Math.pow(2,b))},this),this},addStay:function(b,c,d){var f=new a.StayConstraint(b,c||e,d||1);return this.addConstraint(f)},removeConstraint:function(a){return this.removeConstraintInternal(a),this},removeConstraintInternal:function(b){a.trace&&a.fnenterprint("removeConstraintInternal: "+b),a.trace&&a.traceprint(""+this),this._fNeedsSolving=!0,this._resetStayConstants();var c=this.rows.get(this._objective),d=this._errorVars.get(b);a.trace&&a.traceprint("eVars == "+d),null!=d&&d.each(function(e){var f=this.rows.get(e);null==f?c.addVariable(e,-b.weight*b.strength.symbolicWeight.value,this._objective,this):c.addExpression(f,-b.weight*b.strength.symbolicWeight.value,this._objective,this),a.trace&&a.traceprint("now eVars == "+d)},this);var e=this._markerVars.get(b);if(this._markerVars.delete(b),null==e)throw new a.InternalError("Constraint not found in removeConstraintInternal");if(a.trace&&a.traceprint("Looking to remove var "+e),null==this.rows.get(e)){var f=this.columns.get(e);a.trace&&a.traceprint("Must pivot -- columns are "+f);var g=null,h=0;f.each(function(b){if(b.isRestricted){var c=this.rows.get(b),d=c.coefficientFor(e);if(a.trace&&a.traceprint("Marker "+e+"'s coefficient in "+c+" is "+d),0>d){var f=-c.constant/d;(null==g||h>f||a.approx(f,h)&&b.hashCoded)&&(h=d,g=a)}},this)),null==g&&(0==f.size?this.removeColumn(e):f.escapingEach(function(a){return a!=this._objective?(g=a,{brk:!0}):void 0},this)),null!=g&&this.pivot(e,g)}if(null!=this.rows.get(e)&&this.removeRow(e),null!=d&&d.each(function(a){a!=e&&this.removeColumn(a)},this),b.isStayConstraint){if(null!=d)for(var j=0;this._stayPlusErrorVars.length>j;j++)d.delete(this._stayPlusErrorVars[j]),d.delete(this._stayMinusErrorVars[j])}else if(b.isEditConstraint){a.assert(null!=d,"eVars != null");var k=this._editVarMap.get(b.variable);this.removeColumn(k.editMinus),this._editVarMap.delete(b.variable)}return null!=d&&this._errorVars.delete(d),this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},reset:function(){throw a.trace&&a.fnenterprint("reset"),new a.InternalError("reset not implemented")},resolveArray:function(b){a.trace&&a.fnenterprint("resolveArray"+b);var c=b.length;this._editVarMap.each(function(a,d){var e=d.index;c>e&&this.suggestValue(a,b[e])},this),this.resolve()},resolvePair:function(a,b){this.suggestValue(this._editVarList[0].v,a),this.suggestValue(this._editVarList[1].v,b),this.resolve()},resolve:function(){a.trace&&a.fnenterprint("resolve()"),this.dualOptimize(),this._setExternalVariables(),this._infeasibleRows.clear(),this._resetStayConstants()},suggestValue:function(b,c){a.trace&&console.log("suggestValue("+b+", "+c+")");var d=this._editVarMap.get(b);if(!d)throw new a.Error("suggestValue for variable "+b+", but var is not an edit variable");var e=c-d.prevEditConstant;return d.prevEditConstant=c,this.deltaEditConstant(e,d.editPlus,d.editMinus),this},solve:function(){return this._fNeedsSolving&&(this.optimize(this._objective),this._setExternalVariables()),this},setEditedValue:function(b,c){if(!this.columnsHasKey(b)&&null==this.rows.get(b))return b.value=c,this;if(!a.approx(c,b.value)){this.addEditVar(b),this.beginEdit();try{this.suggestValue(b,c)}catch(d){throw new a.InternalError("Error in setEditedValue")}this.endEdit()}return this},addVar:function(b){if(!this.columnsHasKey(b)&&null==this.rows.get(b)){try{this.addStay(b)}catch(c){throw new a.InternalError("Error in addVar -- required failure is impossible")}a.trace&&a.traceprint("added initial stay on "+b)}return this},getInternalInfo:function(){var a=c.getInternalInfo.call(this);return a+="\nSolver info:\n",a+="Stay Error Variables: ",a+=this._stayPlusErrorVars.length+this._stayMinusErrorVars.length,a+=" ("+this._stayPlusErrorVars.length+" +, ",a+=this._stayMinusErrorVars.length+" -)\n",a+="Edit Variables: "+this._editVarMap.size,a+="\n"},getDebugInfo:function(){return""+this+this.getInternalInfo()+"\n"},toString:function(){var a=c.getInternalInfo.call(this);return a+="\n_stayPlusErrorVars: ",a+="["+this._stayPlusErrorVars+"]",a+="\n_stayMinusErrorVars: ",a+="["+this._stayMinusErrorVars+"]",a+="\n",a+="_editVarMap:\n"+this._editVarMap,a+="\n"},getConstraintMap:function(){return this._markerVars},addWithArtificialVariable:function(b){a.trace&&a.fnenterprint("addWithArtificialVariable: "+b);var c=new a.SlackVariable({value:++this._artificialCounter,prefix:"a"}),d=new a.ObjectiveVariable({name:"az"}),e=b.clone();a.trace&&a.traceprint("before addRows:\n"+this),this.addRow(d,e),this.addRow(c,b),a.trace&&a.traceprint("after addRows:\n"+this),this.optimize(d);var f=this.rows.get(d);if(a.trace&&a.traceprint("azTableauRow.constant == "+f.constant),!a.approx(f.constant,0))throw this.removeRow(d),this.removeColumn(c),new a.RequiredFailure;var g=this.rows.get(c);if(null!=g){if(g.isConstant)return this.removeRow(c),this.removeRow(d),void 0;var h=g.anyPivotableVariable();this.pivot(h,c)}a.assert(null==this.rows.get(c),"rowExpression(av) == null"),this.removeColumn(c),this.removeRow(d)},tryAddingDirectly:function(b){a.trace&&a.fnenterprint("tryAddingDirectly: "+b);var c=this.chooseSubject(b);return null==c?(a.trace&&a.fnexitprint("returning false"),!1):(b.newSubject(c),this.columnsHasKey(c)&&this.substituteOut(c,b),this.addRow(c,b),a.trace&&a.fnexitprint("returning true"),!0)},chooseSubject:function(b){a.trace&&a.fnenterprint("chooseSubject: "+b);var c=null,d=!1,e=!1,f=b.terms,g=f.escapingEach(function(a,b){if(d){if(!a.isRestricted&&!this.columnsHasKey(a))return{retval:a}}else if(a.isRestricted){if(!e&&!a.isDummy&&0>b){var f=this.columns.get(a);(null==f||1==f.size&&this.columnsHasKey(this._objective))&&(c=a,e=!0)}}else c=a,d=!0},this);if(g&&void 0!==g.retval)return g.retval;if(null!=c)return c;var h=0,g=f.escapingEach(function(a,b){return a.isDummy?(this.columnsHasKey(a)||(c=a,h=b),void 0):{retval:null}},this);if(g&&void 0!==g.retval)return g.retval;if(!a.approx(b.constant,0))throw new a.RequiredFailure;return h>0&&b.multiplyMe(-1),c},deltaEditConstant:function(b,c,d){a.trace&&a.fnenterprint("deltaEditConstant :"+b+", "+c+", "+d);var e=this.rows.get(c);if(null!=e)return e.constant+=b,0>e.constant&&this._infeasibleRows.add(c),void 0;var f=this.rows.get(d);if(null!=f)return f.constant+=-b,0>f.constant&&this._infeasibleRows.add(d),void 0;var g=this.columns.get(d);g||console.log("columnVars is null -- tableau is:\n"+this),g.each(function(a){var c=this.rows.get(a),e=c.coefficientFor(d);c.constant+=e*b,a.isRestricted&&0>c.constant&&this._infeasibleRows.add(a)},this)},dualOptimize:function(){a.trace&&a.fnenterprint("dualOptimize:");for(var b=this.rows.get(this._objective);this._infeasibleRows.size;){var c=this._infeasibleRows.values()[0];this._infeasibleRows.delete(c);var d=null,e=this.rows.get(c);if(e&&0>e.constant){var g,f=Number.MAX_VALUE,h=e.terms;if(h.each(function(c,e){if(e>0&&c.isPivotable){var h=b.coefficientFor(c);g=h/e,(f>g||a.approx(g,f)&&c.hashCodef.constant&&f.multiplyMe(-1),a.trace&&a.fnexitprint("returning "+f),f},optimize:function(b){a.trace&&a.fnenterprint("optimize: "+b),a.trace&&a.traceprint(""+this),this._optimizeCount++;var c=this.rows.get(b);a.assert(null!=c,"zRow != null");for(var g,h,e=null,f=null;;){if(g=0,h=c.terms,h.escapingEach(function(a,b){return a.isPivotable&&g>b?(g=b,e=a,{brk:1}):void 0},this),g>=-d)return;a.trace&&console.log("entryVar:",e,"objectiveCoeff:",g);var i=Number.MAX_VALUE,j=this.columns.get(e),k=0;if(j.each(function(b){if(a.trace&&a.traceprint("Checking "+b),b.isPivotable){var c=this.rows.get(b),d=c.coefficientFor(e);a.trace&&a.traceprint("pivotable, coeff = "+d),0>d&&(k=-c.constant/d,(i>k||a.approx(k,i)&&b.hashCodeb;b++){var c=this.rows.get(this._stayPlusErrorVars[b]);null==c&&(c=this.rows.get(this._stayMinusErrorVars[b])),null!=c&&(c.constant=0)}},_setExternalVariables:function(){a.trace&&a.fnenterprint("_setExternalVariables:"),a.trace&&a.traceprint(""+this),this._externalParametricVars.each(function(b){null!=this.rows.get(b)?a.trace&&console.log("Error: variable"+b+" in _externalParametricVars is basic"):b.value=0},this),this._externalRows.each(function(a){var b=this.rows.get(a);a.value!=b.constant&&(a.value=b.constant)},this),this._fNeedsSolving=!1,this.onsolved()},onsolved:function(){},insertErrorVar:function(b,c){a.trace&&a.fnenterprint("insertErrorVar:"+b+", "+c);var d=this._errorVars.get(c);d||(d=new a.HashSet,this._errorVars.set(b,d)),d.add(c)}})}(this.c||module.parent.exports||{}),function(a){"use strict";a.Timer=a.inherit({initialize:function(){this.isRunning=!1,this._elapsedMs=0},start:function(){return this.isRunning=!0,this._startReading=new Date,this},stop:function(){return this.isRunning=!1,this._elapsedMs+=new Date-this._startReading,this},reset:function(){return this.isRunning=!1,this._elapsedMs=0,this},elapsedTime:function(){return this.isRunning?(this._elapsedMs+(new Date-this._startReading))/1e3:this._elapsedMs/1e3}})}(this.c||module.parent.exports||{}),__cassowary_parser=function(){function a(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g,escape)+'"'}var b={parse:function(b,c){function k(a){g>e||(e>g&&(g=e,h=[]),h.push(a))}function l(){var a,b,c,d,f;if(d=e,f=e,a=z(),null!==a){if(c=m(),null!==c)for(b=[];null!==c;)b.push(c),c=m();else b=null;null!==b?(c=z(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)}else a=null,e=f;return null!==a&&(a=function(a,b){return b}(d,a[1])),null===a&&(e=d),a}function m(){var a,b,c,d;return c=e,d=e,a=P(),null!==a?(b=s(),null!==b?a=[a,b]:(a=null,e=d)):(a=null,e=d),null!==a&&(a=function(a,b){return b}(c,a[0])),null===a&&(e=c),a}function n(){var a;return b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k("any character")),a}function o(){var a;return/^[a-zA-Z]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k("[a-zA-Z]")),null===a&&(36===b.charCodeAt(e)?(a="$",e++):(a=null,0===f&&k('"$"')),null===a&&(95===b.charCodeAt(e)?(a="_",e++):(a=null,0===f&&k('"_"')))),a}function p(){var a;return f++,/^[\t\x0B\f \xA0\uFEFF]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k("[\\t\\x0B\\f \\xA0\\uFEFF]")),f--,0===f&&null===a&&k("whitespace"),a}function q(){var a;return/^[\n\r\u2028\u2029]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k("[\\n\\r\\u2028\\u2029]")),a}function r(){var a;return f++,10===b.charCodeAt(e)?(a="\n",e++):(a=null,0===f&&k('"\\n"')),null===a&&("\r\n"===b.substr(e,2)?(a="\r\n",e+=2):(a=null,0===f&&k('"\\r\\n"')),null===a&&(13===b.charCodeAt(e)?(a="\r",e++):(a=null,0===f&&k('"\\r"')),null===a&&(8232===b.charCodeAt(e)?(a="\u2028",e++):(a=null,0===f&&k('"\\u2028"')),null===a&&(8233===b.charCodeAt(e)?(a="\u2029",e++):(a=null,0===f&&k('"\\u2029"')))))),f--,0===f&&null===a&&k("end of line"),a}function s(){var a,c,d;return d=e,a=z(),null!==a?(59===b.charCodeAt(e)?(c=";",e++):(c=null,0===f&&k('";"')),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=y(),null!==a?(c=r(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=z(),null!==a?(c=t(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d))),a}function t(){var a,c;return c=e,f++,b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k("any character")),f--,null===a?a="":(a=null,e=c),a}function u(){var a;return f++,a=v(),null===a&&(a=x()),f--,0===f&&null===a&&k("comment"),a}function v(){var a,c,d,g,h,i,j;if(h=e,"/*"===b.substr(e,2)?(a="/*",e+=2):(a=null,0===f&&k('"/*"')),null!==a){for(c=[],i=e,j=e,f++,"*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,"*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?("*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function w(){var a,c,d,g,h,i,j;if(h=e,"/*"===b.substr(e,2)?(a="/*",e+=2):(a=null,0===f&&k('"/*"')),null!==a){for(c=[],i=e,j=e,f++,"*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),null===d&&(d=q()),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,"*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),null===d&&(d=q()),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?("*/"===b.substr(e,2)?(d="*/",e+=2):(d=null,0===f&&k('"*/"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function x(){var a,c,d,g,h,i,j;if(h=e,"//"===b.substr(e,2)?(a="//",e+=2):(a=null,0===f&&k('"//"')),null!==a){for(c=[],i=e,j=e,f++,d=q(),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,d=q(),f--,null===d?d="":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?a=[a,c]:(a=null,e=h)}else a=null,e=h;return a}function y(){var a,b;for(a=[],b=p(),null===b&&(b=w(),null===b&&(b=x()));null!==b;)a.push(b),b=p(),null===b&&(b=w(),null===b&&(b=x()));return a}function z(){var a,b;for(a=[],b=p(),null===b&&(b=r(),null===b&&(b=u()));null!==b;)a.push(b),b=p(),null===b&&(b=r(),null===b&&(b=u()));return a}function A(){var a,b;return b=e,a=C(),null===a&&(a=B()),null!==a&&(a=function(a,b){return{type:"NumericLiteral",value:b}}(b,a)),null===a&&(e=b),a}function B(){var a,c,d;if(d=e,/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k("[0-9]")),null!==c)for(a=[];null!==c;)a.push(c),/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k("[0-9]"));else a=null;return null!==a&&(a=function(a,b){return parseInt(b.join(""))}(d,a)),null===a&&(e=d),a}function C(){var a,c,d,g,h;return g=e,h=e,a=B(),null!==a?(46===b.charCodeAt(e)?(c=".",e++):(c=null,0===f&&k('"."')),null!==c?(d=B(),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)):(a=null,e=h),null!==a&&(a=function(a,b){return parseFloat(b.join(""))}(g,a)),null===a&&(e=g),a}function D(){var a,c,d,g;if(g=e,/^[\-+]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k("[\\-+]")),a=null!==a?a:"",null!==a){if(/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k("[0-9]")),null!==d)for(c=[];null!==d;)c.push(d),/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k("[0-9]"));else c=null;null!==c?a=[a,c]:(a=null,e=g)}else a=null,e=g;return a}function E(){var a,b;return f++,b=e,a=F(),null!==a&&(a=function(a,b){return b}(b,a)),null===a&&(e=b),f--,0===f&&null===a&&k("identifier"),a}function F(){var a,b,c,d,g;if(f++,d=e,g=e,a=o(),null!==a){for(b=[],c=o();null!==c;)b.push(c),c=o();null!==b?a=[a,b]:(a=null,e=g)}else a=null,e=g;return null!==a&&(a=function(a,b,c){return b+c.join("")}(d,a[0],a[1])),null===a&&(e=d),f--,0===f&&null===a&&k("identifier"),a}function G(){var a,c,d,g,h,i,j;return i=e,a=E(),null!==a&&(a=function(a,b){return{type:"Variable",name:b}}(i,a)),null===a&&(e=i),null===a&&(a=A(),null===a&&(i=e,j=e,40===b.charCodeAt(e)?(a="(",e++):(a=null,0===f&&k('"("')),null!==a?(c=z(),null!==c?(d=P(),null!==d?(g=z(),null!==g?(41===b.charCodeAt(e)?(h=")",e++):(h=null,0===f&&k('")"')),null!==h?a=[a,c,d,g,h]:(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j),null!==a&&(a=function(a,b){return b}(i,a[2])),null===a&&(e=i))),a}function H(){var a,b,c,d,f;return a=G(),null===a&&(d=e,f=e,a=I(),null!==a?(b=z(),null!==b?(c=H(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)):(a=null,e=f),null!==a&&(a=function(a,b,c){return{type:"UnaryExpression",operator:b,expression:c}}(d,a[0],a[2])),null===a&&(e=d)),a}function I(){var a;return 43===b.charCodeAt(e)?(a="+",e++):(a=null,0===f&&k('"+"')),null===a&&(45===b.charCodeAt(e)?(a="-",e++):(a=null,0===f&&k('"-"')),null===a&&(33===b.charCodeAt(e)?(a="!",e++):(a=null,0===f&&k('"!"')))),a}function J(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=H(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:"MultiplicativeExpression",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function K(){var a;return 42===b.charCodeAt(e)?(a="*",e++):(a=null,0===f&&k('"*"')),null===a&&(47===b.charCodeAt(e)?(a="/",e++):(a=null,0===f&&k('"/"'))),a}function L(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=J(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:"AdditiveExpression",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function M(){var a;return 43===b.charCodeAt(e)?(a="+",e++):(a=null,0===f&&k('"+"')),null===a&&(45===b.charCodeAt(e)?(a="-",e++):(a=null,0===f&&k('"-"'))),a}function N(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=L(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:"Inequality",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function O(){var a;return"<="===b.substr(e,2)?(a="<=",e+=2):(a=null,0===f&&k('"<="')),null===a&&(">="===b.substr(e,2)?(a=">=",e+=2):(a=null,0===f&&k('">="')),null===a&&(60===b.charCodeAt(e)?(a="<",e++):(a=null,0===f&&k('"<"')),null===a&&(62===b.charCodeAt(e)?(a=">",e++):(a=null,0===f&&k('">"'))))),a}function P(){var a,c,d,g,h,i,j,l,m;if(j=e,l=e,a=N(),null!==a){for(c=[],m=e,d=z(),null!==d?("=="===b.substr(e,2)?(g="==",e+=2):(g=null,0===f&&k('"=="')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==d;)c.push(d),m=e,d=z(),null!==d?("=="===b.substr(e,2)?(g="==",e+=2):(g=null,0===f&&k('"=="')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==c?a=[a,c]:(a=null,e=l)}else a=null,e=l;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:"Equality",operator:c[e][1],left:d,right:c[e][3]};return d}(j,a[0],a[1])),null===a&&(e=j),a}function Q(a){a.sort();for(var b=null,c=[],d=0;a.length>d;d++)a[d]!==b&&(c.push(a[d]),b=a[d]);return c}function R(){for(var a=1,c=1,d=!1,f=0;Math.max(e,g)>f;f++){var h=b.charAt(f);"\n"===h?(d||a++,c=1,d=!1):"\r"===h||"\u2028"===h||"\u2029"===h?(a++,c=1,d=!0):(c++,d=!1)}return{line:a,column:c}}var d={start:l,Statement:m,SourceCharacter:n,IdentifierStart:o,WhiteSpace:p,LineTerminator:q,LineTerminatorSequence:r,EOS:s,EOF:t,Comment:u,MultiLineComment:v,MultiLineCommentNoLineTerminator:w,SingleLineComment:x,_:y,__:z,Literal:A,Integer:B,Real:C,SignedInteger:D,Identifier:E,IdentifierName:F,PrimaryExpression:G,UnaryExpression:H,UnaryOperator:I,MultiplicativeExpression:J,MultiplicativeOperator:K,AdditiveExpression:L,AdditiveOperator:M,InequalityExpression:N,InequalityOperator:O,LinearExpression:P};if(void 0!==c){if(void 0===d[c])throw Error("Invalid rule name: "+a(c)+".")}else c="start";var e=0,f=0,g=0,h=[],S=d[c]();if(null===S||e!==b.length){var T=Math.max(e,g),U=b.length>T?b.charAt(T):null,V=R();throw new this.SyntaxError(Q(h),U,T,V.line,V.column)}return S},toSource:function(){return this._source}};return b.SyntaxError=function(b,c,d,e,f){function g(b,c){var d,e;switch(b.length){case 0:d="end of input";break;case 1:d=b[0];break;default:d=b.slice(0,b.length-1).join(", ")+" or "+b[b.length-1]}return e=c?a(c):"end of input","Expected "+d+" but "+e+" found."}this.name="SyntaxError",this.expected=b,this.found=c,this.message=g(b,c),this.offset=d,this.line=e,this.column=f},b.SyntaxError.prototype=Error.prototype,b}(); +}).call( + (typeof module != "undefined") ? + (module.compiled = true && module) : this +); + +},{}]},{},[1])(1) }); \ No newline at end of file diff --git a/dist/autolayout.kiwi.js b/dist/autolayout.kiwi.js index 074b79c..5c61127 100644 --- a/dist/autolayout.kiwi.js +++ b/dist/autolayout.kiwi.js @@ -8,2153 +8,1230 @@ * @copyright Gloey Apps, 2015 * * @library autolayout.js -* @version 0.4.0 -* @generated 27-07-2015 +* @version 0.4.3 */ /*----------------------------------------------------------------------------- | Kiwi (TypeScript version) | -| Copyright (c) 2015, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ - -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AutoLayout = f()}})(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 -/// -var tsu; -(function (tsu) { - /** - * Perform a lower bound search on a sorted array. - * - * @param array The array of sorted items to search. - * @param value The value to located in the array. - * @param compare The value comparison function. - * @returns The index of the first element in the array which - * compares greater than or equal to the given value. - */ - function lowerBound(array, value, compare) { - var begin = 0; - var n = array.length; - var half; - var middle; - while (n > 0) { - half = n >> 1; - middle = begin + half; - if (compare(array[middle], value) < 0) { - begin = middle + 1; - n -= half + 1; - } else { - n = half; - } - } - return begin; + function parse(input) { + var options = arguments.length > 1 ? arguments[1] : {}, + peg$FAILED = {}, + peg$startRuleFunctions = { visualFormatString: peg$parsevisualFormatString }, + peg$startRuleFunction = peg$parsevisualFormatString, + peg$c0 = peg$FAILED, + peg$c1 = null, + peg$c2 = ":", + peg$c3 = { type: "literal", value: ":", description: "\":\"" }, + peg$c4 = [], + peg$c5 = function peg$c5(o, superto, view, views, tosuper) { + return { + orientation: o ? o[0] : 'horizontal', + cascade: (superto || []).concat([view], [].concat.apply([], views), tosuper || []) + }; + }, + peg$c6 = "H", + peg$c7 = { type: "literal", value: "H", description: "\"H\"" }, + peg$c8 = "V", + peg$c9 = { type: "literal", value: "V", description: "\"V\"" }, + peg$c10 = function peg$c10(orient) { + return orient == 'H' ? 'horizontal' : 'vertical'; + }, + peg$c11 = "|", + peg$c12 = { type: "literal", value: "|", description: "\"|\"" }, + peg$c13 = function peg$c13() { + return { view: null }; + }, + peg$c14 = "[", + peg$c15 = { type: "literal", value: "[", description: "\"[\"" }, + peg$c16 = "]", + peg$c17 = { type: "literal", value: "]", description: "\"]\"" }, + peg$c18 = function peg$c18(view, predicates) { + return extend(view, predicates ? { constraints: predicates } : {}); + }, + peg$c19 = "-", + peg$c20 = { type: "literal", value: "-", description: "\"-\"" }, + peg$c21 = function peg$c21(predicateList) { + return predicateList; + }, + peg$c22 = function peg$c22() { + return [{ relation: 'equ', constant: 'default', $parserOffset: offset() }]; + }, + peg$c23 = "", + peg$c24 = function peg$c24() { + return [{ relation: 'equ', constant: 0, $parserOffset: offset() }]; + }, + peg$c25 = function peg$c25(n) { + return [{ relation: 'equ', constant: n, $parserOffset: offset() }]; + }, + peg$c26 = "(", + peg$c27 = { type: "literal", value: "(", description: "\"(\"" }, + peg$c28 = ",", + peg$c29 = { type: "literal", value: ",", description: "\",\"" }, + peg$c30 = ")", + peg$c31 = { type: "literal", value: ")", description: "\")\"" }, + peg$c32 = function peg$c32(p, ps) { + return [p].concat(ps.map(function (p) { + return p[1]; + })); + }, + peg$c33 = "@", + peg$c34 = { type: "literal", value: "@", description: "\"@\"" }, + peg$c35 = function peg$c35(r, o, p) { + return extend({ relation: 'equ' }, r || {}, o, p ? p[1] : {}); + }, + peg$c36 = "==", + peg$c37 = { type: "literal", value: "==", description: "\"==\"" }, + peg$c38 = function peg$c38() { + return { relation: 'equ', $parserOffset: offset() }; + }, + peg$c39 = "<=", + peg$c40 = { type: "literal", value: "<=", description: "\"<=\"" }, + peg$c41 = function peg$c41() { + return { relation: 'leq', $parserOffset: offset() }; + }, + peg$c42 = ">=", + peg$c43 = { type: "literal", value: ">=", description: "\">=\"" }, + peg$c44 = function peg$c44() { + return { relation: 'geq', $parserOffset: offset() }; + }, + peg$c45 = /^[0-9]/, + peg$c46 = { type: "class", value: "[0-9]", description: "[0-9]" }, + peg$c47 = function peg$c47(digits) { + return { priority: parseInt(digits.join(""), 10) }; + }, + peg$c48 = function peg$c48(n) { + return { constant: n }; + }, + peg$c49 = /^[a-zA-Z_]/, + peg$c50 = { type: "class", value: "[a-zA-Z_]", description: "[a-zA-Z_]" }, + peg$c51 = /^[a-zA-Z0-9_]/, + peg$c52 = { type: "class", value: "[a-zA-Z0-9_]", description: "[a-zA-Z0-9_]" }, + peg$c53 = function peg$c53(f, v) { + return { view: f + v }; + }, + peg$c54 = ".", + peg$c55 = { type: "literal", value: ".", description: "\".\"" }, + peg$c56 = function peg$c56(digits, decimals) { + return parseFloat(digits.concat(".").concat(decimals).join(""), 10); + }, + peg$c57 = function peg$c57(digits) { + return parseInt(digits.join(""), 10); + }, + peg$currPos = 0, + peg$reportedPos = 0, + peg$cachedPos = 0, + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }, + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; } - tsu.lowerBound = lowerBound; - /** - * Perform a binary search on a sorted array. - * - * @param array The array of sorted items to search. - * @param value The value to located in the array. - * @param compare The value comparison function. - * @returns The index of the found item, or -1. - */ - function binarySearch(array, value, compare) { - var index = lowerBound(array, value, compare); - if (index === array.length) { - return -1; - } - var item = array[index]; - if (compare(item, value) !== 0) { - return -1; - } - return index; + function text() { + return input.substring(peg$reportedPos, peg$currPos); } - tsu.binarySearch = binarySearch; - /** - * Perform a binary find on a sorted array. - * - * @param array The array of sorted items to search. - * @param value The value to located in the array. - * @param compare The value comparison function. - * @returns The found item in the array, or undefined. - */ - function binaryFind(array, value, compare) { - var index = lowerBound(array, value, compare); - if (index === array.length) { - return undefined; - } - var item = array[index]; - if (compare(item, value) !== 0) { - return undefined; - } - return item; + function offset() { + return peg$reportedPos; } - tsu.binaryFind = binaryFind; -})(tsu || (tsu = {})); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -/// -var tsu; -(function (tsu) { - /** - * A base class for implementing array-based data structures. - * - * @class - */ - var ArrayBase = (function () { - function ArrayBase() { - /* - * The internal data array. - * - * @protected - */ - this._array = []; - } - /** - * Returns the number of items in the array. - */ - ArrayBase.prototype.size = function () { - return this._array.length; - }; + function line() { + return peg$computePosDetails(peg$reportedPos).line; + } - /** - * Returns true if the array is empty. - */ - ArrayBase.prototype.empty = function () { - return this._array.length === 0; - }; + function column() { + return peg$computePosDetails(peg$reportedPos).column; + } - /** - * Returns the item at the given array index. - * - * @param index The integer index of the desired item. - */ - ArrayBase.prototype.itemAt = function (index) { - return this._array[index]; - }; + function expected(description) { + throw peg$buildException(null, [{ type: "other", description: description }], peg$reportedPos); + } - /** - * Removes and returns the item at the given index. - * - * @param index The integer index of the desired item. - */ - ArrayBase.prototype.takeAt = function (index) { - return this._array.splice(index, 1)[0]; - }; + function error(message) { + throw peg$buildException(message, null, peg$reportedPos); + } - /** - * Clear the internal contents of array. - */ - ArrayBase.prototype.clear = function () { - this._array = []; - }; + function peg$computePosDetails(pos) { + function advance(details, startPos, endPos) { + var p, ch; - /** - * Swap this array's contents with another array. - * - * @param other The array base to use for the swap. - */ - ArrayBase.prototype.swap = function (other) { - var array = this._array; - this._array = other._array; - other._array = array; - }; + for (p = startPos; p < endPos; p++) { + ch = input.charAt(p); + if (ch === "\n") { + if (!details.seenCR) { + details.line++; + } + details.column = 1; + details.seenCR = false; + } else if (ch === "\r" || ch === '\u2028' || ch === '\u2029') { + details.line++; + details.column = 1; + details.seenCR = true; + } else { + details.column++; + details.seenCR = false; + } + } + } - /** - * Returns an iterator over the array of items. - */ - ArrayBase.prototype.__iter__ = function () { - return tsu.iter(this._array); - }; + if (peg$cachedPos !== pos) { + if (peg$cachedPos > pos) { + peg$cachedPos = 0; + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }; + } + advance(peg$cachedPosDetails, peg$cachedPos, pos); + peg$cachedPos = pos; + } - /** - * Returns a reverse iterator over the array of items. - */ - ArrayBase.prototype.__reversed__ = function () { - return tsu.reversed(this._array); - }; - return ArrayBase; - })(); - tsu.ArrayBase = ArrayBase; -})(tsu || (tsu = {})); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -/// -/// -/// -/// -var tsu; -(function (tsu) { - /** - * A mapping container build on a sorted array. - * - * @class - */ - var AssociativeArray = (function (_super) { - __extends(AssociativeArray, _super); - /** - * Construct a new AssociativeArray. - * - * @param compare The key comparison function. - */ - function AssociativeArray(compare) { - _super.call(this); - this._compare = compare; - this._wrapped = wrapCompare(compare); + return peg$cachedPosDetails; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { + return; + } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildException(message, expected, pos) { + function cleanupExpected(expected) { + var i = 1; + + expected.sort(function (a, b) { + if (a.description < b.description) { + return -1; + } else if (a.description > b.description) { + return 1; + } else { + return 0; + } + }); + + while (i < expected.length) { + if (expected[i - 1] === expected[i]) { + expected.splice(i, 1); + } else { + i++; + } } - /** - * Returns the key comparison function used by this array. - */ - AssociativeArray.prototype.comparitor = function () { - return this._compare; - }; + } - /** - * Return the array index of the given key, or -1. - * - * @param key The key to locate in the array. - */ - AssociativeArray.prototype.indexOf = function (key) { - return tsu.binarySearch(this._array, key, this._wrapped); - }; + function buildMessage(expected, found) { + function stringEscape(s) { + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } - /** - * Returns true if the key is in the array, false otherwise. - * - * @param key The key to locate in the array. - */ - AssociativeArray.prototype.contains = function (key) { - return tsu.binarySearch(this._array, key, this._wrapped) >= 0; - }; + return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\x08/g, '\\b').replace(/\t/g, '\\t').replace(/\n/g, '\\n').replace(/\f/g, '\\f').replace(/\r/g, '\\r').replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (ch) { + return '\\x0' + hex(ch); + }).replace(/[\x10-\x1F\x80-\xFF]/g, function (ch) { + return '\\x' + hex(ch); + }).replace(/[\u0180-\u0FFF]/g, function (ch) { + return '\\u0' + hex(ch); + }).replace(/[\u1080-\uFFFF]/g, function (ch) { + return '\\u' + hex(ch); + }); + } - /** - * Returns the pair associated with the given key, or undefined. - * - * @param key The key to locate in the array. - */ - AssociativeArray.prototype.find = function (key) { - return tsu.binaryFind(this._array, key, this._wrapped); - }; + var expectedDescs = new Array(expected.length), + expectedDesc, + foundDesc, + i; - /** - * Returns the pair associated with the key if it exists. - * - * If the key does not exist, a new pair will be created and - * inserted using the value created by the given factory. - * - * @param key The key to locate in the array. - * @param factory The function which creates the default value. - */ - AssociativeArray.prototype.setDefault = function (key, factory) { - var array = this._array; - var index = tsu.lowerBound(array, key, this._wrapped); - if (index === array.length) { - var pair = new tsu.Pair(key, factory()); - array.push(pair); - return pair; - } - var currPair = array[index]; - if (this._compare(currPair.first, key) !== 0) { - var pair = new tsu.Pair(key, factory()); - array.splice(index, 0, pair); - return pair; - } - return currPair; - }; + for (i = 0; i < expected.length; i++) { + expectedDescs[i] = expected[i].description; + } - /** - * Insert the pair into the array and return the pair. - * - * This will overwrite any existing entry in the array. - * - * @param key The key portion of the pair. - * @param value The value portion of the pair. - */ - AssociativeArray.prototype.insert = function (key, value) { - var array = this._array; - var index = tsu.lowerBound(array, key, this._wrapped); - if (index === array.length) { - var pair = new tsu.Pair(key, value); - array.push(pair); - return pair; - } - var currPair = array[index]; - if (this._compare(currPair.first, key) !== 0) { - var pair = new tsu.Pair(key, value); - array.splice(index, 0, pair); - return pair; - } - currPair.second = value; - return currPair; - }; + expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(", ") + " or " + expectedDescs[expected.length - 1] : expectedDescs[0]; - AssociativeArray.prototype.update = function (object) { - var _this = this; - if (object instanceof AssociativeArray) { - var obj = object; - this._array = merge(this._array, obj._array, this._compare); - } else { - tsu.forEach(object, function (pair) { - _this.insert(pair.first, pair.second); - }); - } - }; + foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input"; - /** - * Removes and returns the pair for the given key, or undefined. - * - * @param key The key to remove from the map. - */ - AssociativeArray.prototype.erase = function (key) { - var array = this._array; - var index = tsu.binarySearch(array, key, this._wrapped); - if (index < 0) { - return undefined; - } - return array.splice(index, 1)[0]; - }; + return "Expected " + expectedDesc + " but " + foundDesc + " found."; + } - /** - * Create a copy of this associative array. - */ - AssociativeArray.prototype.copy = function () { - var theCopy = new AssociativeArray(this._compare); - var copyArray = theCopy._array; - var thisArray = this._array; - for (var i = 0, n = thisArray.length; i < n; ++i) { - copyArray.push(thisArray[i].copy()); - } - return theCopy; - }; - return AssociativeArray; - })(tsu.ArrayBase); - tsu.AssociativeArray = AssociativeArray; + var posDetails = peg$computePosDetails(pos), + found = pos < input.length ? input.charAt(pos) : null; - /** - * An internal which wraps a comparison key function. - */ - function wrapCompare(cmp) { - return function (pair, value) { - return cmp(pair.first, value); - }; + if (expected !== null) { + cleanupExpected(expected); + } + + return new SyntaxError(message !== null ? message : buildMessage(expected, found), expected, found, pos, posDetails.line, posDetails.column); } - /** - * An internal function which merges two ordered pair arrays. - */ - function merge(first, second, compare) { - var i = 0, j = 0; - var len1 = first.length; - var len2 = second.length; - var merged = []; - while (i < len1 && j < len2) { - var a = first[i]; - var b = second[j]; - var v = compare(a.first, b.first); - if (v < 0) { - merged.push(a.copy()); - ++i; - } else if (v > 0) { - merged.push(b.copy()); - ++j; - } else { - merged.push(b.copy()); - ++i; - ++j; - } - } - while (i < len1) { - merged.push(first[i].copy()); - ++i; + function peg$parsevisualFormatString() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parseorientation(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s3 = peg$c2; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c3); + } } - while (j < len2) { - merged.push(second[j].copy()); - ++j; + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$c0; } - return merged; - } -})(tsu || (tsu = {})); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -/// -/// -/// -/// -/// -/// - -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -// -// -/** - * Kiwi is an efficient implementation of the Cassowary constraint solving - * algorithm, based on the seminal Cassowary paper. - * It is *not* a refactoring or port of the original C++ solver, but - * has been designed from the ground up to be lightweight and fast. - * - * **Example** - * ```javascript - * var kiwi = require('kiwi'); - * - * // Create a solver - * var solver = new kiwi.Solver(); - * - * // Create and add some editable variables - * var left = new kiwi.Variable(); - * var width = new kiwi.Variable(); - * solver.addEditVariable(left, kiwi.Strength.strong); - * solver.addEditVariable(width, kiwi.Strength.strong); - * - * // Create a variable calculated through a constraint - * var centerX = new kiwi.Variable(); - * var expr = new kiwi.Expression([-1, centerX], left, [0.5, width]); - * solver.addConstraint(new kiwi.Constraint(expr, kiwi.Operator.Eq, kiwi.Strength.required)); - * - * // Suggest some values to the solver - * solver.suggestValue(left, 0); - * solver.suggestValue(width, 500); - * - * // Lets solve the problem! - * solver.updateVariables(); - * assert(centerX.value(), 250); - * ``` - * - * ##API Documentation - * @module kiwi - */ -var kiwi; -(function (kiwi) { - /** - * An enum defining the linear constraint operators. - * - * |Value|Operator|Description| - * |----|-----|-----| - * |`Le`|<=|Less than equal| - * |`Ge`|>=|Greater than equal| - * |`Eq`|==|Equal| - * - * @enum {Number} - */ - (function (Operator) { - Operator[Operator["Le"] = 0] = "Le"; - Operator[Operator["Ge"] = 1] = "Ge"; - Operator[Operator["Eq"] = 2] = "Eq"; // == - })(kiwi.Operator || (kiwi.Operator = {})); - var Operator = kiwi.Operator; - /** - * A linear constraint equation. - * - * A constraint equation is composed of an expression, an operator, - * and a strength. The RHS of the equation is implicitly zero. - * - * @class - * @param {Expression} expression The constraint expression (LHS). - * @param {Operator} operator The equation operator. - * @param {Expression} [rhs] Right hand side of the expression. - * @param {Number} [strength=Strength.required] The strength of the constraint. - */ - var Constraint = (function () { - function Constraint(expression, operator, rhs, strength) { - if (strength === void 0) { strength = kiwi.Strength.required; } - this._id = CnId++; - this._operator = operator; - this._strength = kiwi.Strength.clip(strength); - if ((rhs === undefined) && (expression instanceof kiwi.Expression)) { - this._expression = expression; + } else { + peg$currPos = s1; + s1 = peg$c0; + } + if (s1 === peg$FAILED) { + s1 = peg$c1; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parsesuperview(); + if (s3 !== peg$FAILED) { + s4 = peg$parseconnection(); + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c0; + } + } else { + peg$currPos = s2; + s2 = peg$c0; + } + if (s2 === peg$FAILED) { + s2 = peg$c1; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseview(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = peg$parseconnection(); + if (s6 !== peg$FAILED) { + s7 = peg$parseview(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; } - else { - this._expression = expression.minus(rhs); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$parseconnection(); + if (s6 !== peg$FAILED) { + s7 = peg$parseview(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + s6 = peg$parseconnection(); + if (s6 !== peg$FAILED) { + s7 = peg$parsesuperview(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + if (s5 === peg$FAILED) { + s5 = peg$c1; + } + if (s5 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c5(s1, s2, s3, s4, s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; } - /** - * A static constraint comparison function. - * @private - */ - Constraint.Compare = function (a, b) { - return a.id() - b.id(); - }; - /** - * Returns the unique id number of the constraint. - * @private - */ - Constraint.prototype.id = function () { - return this._id; - }; - /** - * Returns the expression of the constraint. - * - * @return {Expression} expression - */ - Constraint.prototype.expression = function () { - return this._expression; - }; - /** - * Returns the relational operator of the constraint. - * - * @return {Operator} linear constraint operator - */ - Constraint.prototype.op = function () { - return this._operator; - }; - /** - * Returns the strength of the constraint. - * - * @return {Number} strength - */ - Constraint.prototype.strength = function () { - return this._strength; - }; - return Constraint; - })(); - kiwi.Constraint = Constraint; - /** - * The internal constraint id counter. - * @private - */ - var CnId = 0; -})(kiwi || (kiwi = {})); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -/// -var kiwi; -(function (kiwi) { - function createMap(compare) { - return new tsu.AssociativeArray(compare); + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; } - kiwi.createMap = createMap; -})(kiwi || (kiwi = {})); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -var kiwi; -(function (kiwi) { - /** - * The primary user constraint variable. - * - * @class - * @param {String} [name=""] The name to associated with the variable. - */ - var Variable = (function () { - function Variable(name) { - if (name === void 0) { name = ""; } - this._value = 0.0; - this._context = null; - this._id = VarId++; - this._name = name; + + function peg$parseorientation() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 72) { + s1 = peg$c6; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c7); } - /** - * A static variable comparison function. - * @private - */ - Variable.Compare = function (a, b) { - return a.id() - b.id(); - }; - /** - * Returns the unique id number of the variable. - * @private - */ - Variable.prototype.id = function () { - return this._id; - }; - /** - * Returns the name of the variable. - * - * @return {String} name of the variable - */ - Variable.prototype.name = function () { - return this._name; - }; - /** - * Set the name of the variable. - * - * @param {String} name Name of the variable - */ - Variable.prototype.setName = function (name) { - this._name = name; - }; - /** - * Returns the user context object of the variable. - * @private - */ - Variable.prototype.context = function () { - return this._context; - }; - /** - * Set the user context object of the variable. - * @private - */ - Variable.prototype.setContext = function (context) { - this._context = context; - }; - /** - * Returns the value of the variable. - * - * @return {Number} Calculated value - */ - Variable.prototype.value = function () { - return this._value; - }; - /** - * Set the value of the variable. - * @private - */ - Variable.prototype.setValue = function (value) { - this._value = value; - }; - /** - * Creates a new Expression by adding a number, variable or expression - * to the variable. - * - * @param {Number|Variable|Expression} value Value to add. - * @return {Expression} expression - */ - Variable.prototype.plus = function (value) { - return new kiwi.Expression(this, value); - }; - /** - * Creates a new Expression by substracting a number, variable or expression - * from the variable. - * - * @param {Number|Variable|Expression} value Value to substract. - * @return {Expression} expression - */ - Variable.prototype.minus = function (value) { - return new kiwi.Expression(this, typeof value === 'number' ? -value : [-1, value]); - }; - /** - * Creates a new Expression by multiplying with a fixed number. - * - * @param {Number} coefficient Coefficient to multiply with. - * @return {Expression} expression - */ - Variable.prototype.multiply = function (coefficient) { - return new kiwi.Expression([coefficient, this]); - }; - /** - * Creates a new Expression by dividing with a fixed number. - * - * @param {Number} coefficient Coefficient to divide by. - * @return {Expression} expression - */ - Variable.prototype.divide = function (coefficient) { - return new kiwi.Expression([1 / coefficient, this]); - }; - /** - * Returns the JSON representation of the variable. - * @private - */ - Variable.prototype.toJSON = function () { - return { - name: this._name, - value: this._value - }; - }; - return Variable; - })(); - kiwi.Variable = Variable; - /** - * The internal variable id counter. - * @private - */ - var VarId = 0; -})(kiwi || (kiwi = {})); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -/// -/// -/// -var kiwi; -(function (kiwi) { - /** - * An expression of variable terms and a constant. - * - * The constructor accepts an arbitrary number of parameters, - * each of which must be one of the following types: - * - number - * - Variable - * - Expression - * - 2-tuple of [number, Variable|Expression] - * - * The parameters are summed. The tuples are multiplied. - * - * @class - * @param {...(number|Variable|Expression|Array)} args - */ - var Expression = (function () { - function Expression() { - var parsed = parseArgs(arguments); - this._terms = parsed.terms; - this._constant = parsed.constant; + } + if (s1 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 86) { + s1 = peg$c8; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c9); + } } - /** - * Returns the mapping of terms in the expression. - * - * This *must* be treated as const. - * @private - */ - Expression.prototype.terms = function () { - return this._terms; - }; - /** - * Returns the constant of the expression. - * @private - */ - Expression.prototype.constant = function () { - return this._constant; - }; - /** - * Returns the computed value of the expression. - * - * @private - * @return {Number} computed value of the expression - */ - Expression.prototype.value = function () { - var result = this._constant; - for (var i = 0, n = this._terms.size(); i < n; i++) { - var pair = this._terms.itemAt(i); - result += pair.first.value() * pair.second; - } - return result; - }; - /** - * Creates a new Expression by adding a number, variable or expression - * to the expression. - * - * @param {Number|Variable|Expression} value Value to add. - * @return {Expression} expression - */ - Expression.prototype.plus = function (value) { - return new Expression(this, value); - }; - /** - * Creates a new Expression by substracting a number, variable or expression - * from the expression. - * - * @param {Number|Variable|Expression} value Value to substract. - * @return {Expression} expression - */ - Expression.prototype.minus = function (value) { - return new Expression(this, typeof value === 'number' ? -value : [-1, value]); - }; - /** - * Creates a new Expression by multiplying with a fixed number. - * - * @param {Number} coefficient Coefficient to multiply with. - * @return {Expression} expression - */ - Expression.prototype.multiply = function (coefficient) { - return new Expression([coefficient, this]); - }; - /** - * Creates a new Expression by dividing with a fixed number. - * - * @param {Number} coefficient Coefficient to divide by. - * @return {Expression} expression - */ - Expression.prototype.divide = function (coefficient) { - return new Expression([1 / coefficient, this]); - }; - return Expression; - })(); - kiwi.Expression = Expression; - /** - * An internal argument parsing function. - * @private - */ - function parseArgs(args) { - var constant = 0.0; - var factory = function () { return 0.0; }; - var terms = kiwi.createMap(kiwi.Variable.Compare); - for (var i = 0, n = args.length; i < n; ++i) { - var item = args[i]; - if (typeof item === "number") { - constant += item; - } - else if (item instanceof kiwi.Variable) { - terms.setDefault(item, factory).second += 1.0; - } - else if (item instanceof Expression) { - constant += item.constant(); - var terms2 = item.terms(); - for (var j = 0, k = terms2.size(); j < k; j++) { - var termPair = terms2.itemAt(j); - terms.setDefault(termPair.first, factory).second += termPair.second; - } - } - else if (item instanceof Array) { - if (item.length !== 2) { - throw new Error("array must have length 2"); - } - var value = item[0]; - var value2 = item[1]; - if (typeof value !== "number") { - throw new Error("array item 0 must be a number"); - } - if (value2 instanceof kiwi.Variable) { - terms.setDefault(value2, factory).second += value; - } - else if (value2 instanceof Expression) { - constant += (value2.constant() * value); - var terms2 = value2.terms(); - for (var j = 0, k = terms2.size(); j < k; j++) { - var termPair = terms2.itemAt(j); - terms.setDefault(termPair.first, factory).second += (termPair.second * value); - } - } - else { - throw new Error("array item 1 must be a variable or expression"); - } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c10(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsesuperview() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 124) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c12); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c13(); + } + s0 = s1; + + return s0; + } + + function peg$parseview() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c14; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c15); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseviewName(); + if (s2 !== peg$FAILED) { + s3 = peg$parsepredicateListWithParens(); + if (s3 === peg$FAILED) { + s3 = peg$c1; + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s4 = peg$c16; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c17); + } } - else { - throw new Error("invalid Expression argument: " + item); + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c18(s2, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; } - return { terms: terms, constant: constant }; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; } -})(kiwi || (kiwi = {})); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -var kiwi; -(function (kiwi) { - /** - * @class Strength - */ - var Strength; - (function (Strength) { - /** - * Create a new symbolic strength. - * - * @param {Number} a strong - * @param {Number} b medium - * @param {Number} c weak - * @param {Number} [w] weight - * @return {Number} strength - */ - function create(a, b, c, w) { - if (w === void 0) { w = 1.0; } - var result = 0.0; - result += Math.max(0.0, Math.min(1000.0, a * w)) * 1000000.0; - result += Math.max(0.0, Math.min(1000.0, b * w)) * 1000.0; - result += Math.max(0.0, Math.min(1000.0, c * w)); - return result; - } - Strength.create = create; - /** - * The 'required' symbolic strength. - */ - Strength.required = create(1000.0, 1000.0, 1000.0); - /** - * The 'strong' symbolic strength. - */ - Strength.strong = create(1.0, 0.0, 0.0); - /** - * The 'medium' symbolic strength. - */ - Strength.medium = create(0.0, 1.0, 0.0); - /** - * The 'weak' symbolic strength. - */ - Strength.weak = create(0.0, 0.0, 1.0); - /** - * Clip a symbolic strength to the allowed min and max. - * @private - */ - function clip(value) { - return Math.max(0.0, Math.min(Strength.required, value)); + + function peg$parseconnection() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c19; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c20); } - Strength.clip = clip; - })(Strength = kiwi.Strength || (kiwi.Strength = {})); -})(kiwi || (kiwi = {})); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -/// -/// -/// -/// -/// -/// -var kiwi; -(function (kiwi) { - /** - * The constraint solver class. - * - * @class - */ - var Solver = (function () { - /** - * Construct a new Solver. - */ - function Solver() { - this._cnMap = createCnMap(); - this._rowMap = createRowMap(); - this._varMap = createVarMap(); - this._editMap = createEditMap(); - this._infeasibleRows = []; - this._objective = new Row(); - this._artificial = null; - this._idTick = 0; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepredicateList(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c20); + } + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c21(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; } - /** - * Creates and add a constraint to the solver. - * - * @param {Expression|Variable} lhs Left hand side of the expression - * @param {Operator} operator Operator - * @param {Expression|Variable|Number} rhs Right hand side of the expression - * @param {Number} [strength=Strength.required] Strength - */ - Solver.prototype.createConstraint = function (lhs, operator, rhs, strength) { - if (strength === void 0) { strength = kiwi.Strength.required; } - var cn = new kiwi.Constraint(lhs, operator, rhs, strength); - this.addConstraint(cn); - return cn; - }; - /** - * Add a constraint to the solver. - * - * @param {Constraint} constraint Constraint to add to the solver - */ - Solver.prototype.addConstraint = function (constraint) { - var cnPair = this._cnMap.find(constraint); - if (cnPair !== undefined) { - throw new Error("duplicate constraint"); + } else { + peg$currPos = s0; + s0 = peg$c0; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c19; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c20); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c22(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$c23; + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c24(); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parsepredicateList() { + var s0; + + s0 = peg$parsesimplePredicate(); + if (s0 === peg$FAILED) { + s0 = peg$parsepredicateListWithParens(); + } + + return s0; + } + + function peg$parsesimplePredicate() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c25(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsepredicateListWithParens() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 40) { + s1 = peg$c26; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c27); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepredicate(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c28; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c29); } - // Creating a row causes symbols to be reserved for the variables - // in the constraint. If this method exits with an exception, - // then its possible those variables will linger in the var map. - // Since its likely that those variables will be used in other - // constraints and since exceptional conditions are uncommon, - // i'm not too worried about aggressive cleanup of the var map. - var data = this._createRow(constraint); - var row = data.row; - var tag = data.tag; - var subject = this._chooseSubject(row, tag); - // If chooseSubject couldnt find a valid entering symbol, one - // last option is available if the entire row is composed of - // dummy variables. If the constant of the row is zero, then - // this represents redundant constraints and the new dummy - // marker can enter the basis. If the constant is non-zero, - // then it represents an unsatisfiable constraint. - if (subject.type() === 0 /* Invalid */ && row.allDummies()) { - if (!nearZero(row.constant())) { - throw new Error("unsatisfiable constraint"); - } - else { - subject = tag.marker; - } + } + if (s5 !== peg$FAILED) { + s6 = peg$parsepredicate(); + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$c0; } - // If an entering symbol still isn't found, then the row must - // be added using an artificial variable. If that fails, then - // the row represents an unsatisfiable constraint. - if (subject.type() === 0 /* Invalid */) { - if (!this._addWithArtificialVariable(row)) { - throw new Error("unsatisfiable constraint"); - } + } else { + peg$currPos = s4; + s4 = peg$c0; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c28; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c29); + } } - else { - row.solveFor(subject); - this._substitute(subject, row); - this._rowMap.insert(subject, row); + if (s5 !== peg$FAILED) { + s6 = peg$parsepredicate(); + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$c0; + } + } else { + peg$currPos = s4; + s4 = peg$c0; } - this._cnMap.insert(constraint, tag); - // Optimizing after each constraint is added performs less - // aggregate work due to a smaller average system size. It - // also ensures the solver remains in a consistent state. - this._optimize(this._objective); - }; - /** - * Remove a constraint from the solver. - * - * @param {Constraint} constraint Constraint to remove from the solver - */ - Solver.prototype.removeConstraint = function (constraint) { - var cnPair = this._cnMap.erase(constraint); - if (cnPair === undefined) { - throw new Error("unknown constraint"); + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s4 = peg$c30; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c31); + } } - // Remove the error effects from the objective function - // *before* pivoting, or substitutions into the objective - // will lead to incorrect solver results. - this._removeConstraintEffects(constraint, cnPair.second); - // If the marker is basic, simply drop the row. Otherwise, - // pivot the marker into the basis and then drop the row. - var marker = cnPair.second.marker; - var rowPair = this._rowMap.erase(marker); - if (rowPair === undefined) { - var leaving = this._getMarkerLeavingSymbol(marker); - if (leaving.type() === 0 /* Invalid */) { - throw new Error("failed to find leaving row"); - } - rowPair = this._rowMap.erase(leaving); - rowPair.second.solveForEx(leaving, marker); - this._substitute(marker, rowPair.second); - } - // Optimizing after each constraint is removed ensures that the - // solver remains consistent. It makes the solver api easier to - // use at a small tradeoff for speed. - this._optimize(this._objective); - }; - /** - * Test whether the solver contains the constraint. - * - * @param {Constraint} constraint Constraint to test for - * @return {Bool} true or false - */ - Solver.prototype.hasConstraint = function (constraint) { - return this._cnMap.contains(constraint); - }; - /** - * Add an edit variable to the solver. - * - * @param {Variable} variable Edit variable to add to the solver - * @param {Number} strength Strength, should be less than `Strength.required` - */ - Solver.prototype.addEditVariable = function (variable, strength) { - var editPair = this._editMap.find(variable); - if (editPair !== undefined) { - throw new Error("duplicate edit variable"); + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c32(s2, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; } - strength = kiwi.Strength.clip(strength); - if (strength === kiwi.Strength.required) { - throw new Error("bad required strength"); + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsepredicate() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parserelation(); + if (s1 === peg$FAILED) { + s1 = peg$c1; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseobjectOfPredicate(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s4 = peg$c33; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c34); } - var expr = new kiwi.Expression(variable); - var cn = new kiwi.Constraint(expr, 2 /* Eq */, undefined, strength); - this.addConstraint(cn); - var tag = this._cnMap.find(cn).second; - var info = { tag: tag, constraint: cn, constant: 0.0 }; - this._editMap.insert(variable, info); - }; - /** - * Remove an edit variable from the solver. - * - * @param {Variable} variable Edit variable to remove from the solver - */ - Solver.prototype.removeEditVariable = function (variable) { - var editPair = this._editMap.erase(variable); - if (editPair === undefined) { - throw new Error("unknown edit variable"); + } + if (s4 !== peg$FAILED) { + s5 = peg$parsepriority(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$c0; } - this.removeConstraint(editPair.second.constraint); - }; - /** - * Test whether the solver contains the edit variable. - * - * @param {Variable} variable Edit variable to test for - * @return {Bool} true or false - */ - Solver.prototype.hasEditVariable = function (variable) { - return this._editMap.contains(variable); - }; - /** - * Suggest the value of an edit variable. - * - * @param {Variable} variable Edit variable to suggest a value for - * @param {Number} value Suggested value - */ - Solver.prototype.suggestValue = function (variable, value) { - var editPair = this._editMap.find(variable); - if (editPair === undefined) { - throw new Error("unknown edit variable"); + } else { + peg$currPos = s3; + s3 = peg$c0; + } + if (s3 === peg$FAILED) { + s3 = peg$c1; + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c35(s1, s2, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parserelation() { + var s0, s1; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c36) { + s1 = peg$c36; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c37); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c38(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c39) { + s1 = peg$c39; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c40); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c41(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c42) { + s1 = peg$c42; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c43); } - var rows = this._rowMap; - var info = editPair.second; - var delta = value - info.constant; - info.constant = value; - // Check first if the positive error variable is basic. - var marker = info.tag.marker; - var rowPair = rows.find(marker); - if (rowPair !== undefined) { - if (rowPair.second.add(-delta) < 0.0) { - this._infeasibleRows.push(marker); - } - this._dualOptimize(); - return; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c44(); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parseobjectOfPredicate() { + var s0; + + s0 = peg$parseconstant(); + if (s0 === peg$FAILED) { + s0 = peg$parseviewName(); + } + + return s0; + } + + function peg$parsepriority() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c45.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c46); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c45.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c46); } - // Check next if the negative error variable is basic. - var other = info.tag.other; - var rowPair = rows.find(other); - if (rowPair !== undefined) { - if (rowPair.second.add(delta) < 0.0) { - this._infeasibleRows.push(other); - } - this._dualOptimize(); - return; + } + } + } else { + s1 = peg$c0; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c47(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseconstant() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c48(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseviewName() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$c49.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c50); + } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c49.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c50); } - for (var i = 0, n = rows.size(); i < n; ++i) { - var rowPair = rows.itemAt(i); - var row = rowPair.second; - var coeff = row.coefficientFor(marker); - if (coeff !== 0.0 && row.add(delta * coeff) < 0.0 && rowPair.first.type() !== 1 /* External */) { - this._infeasibleRows.push(rowPair.first); - } + } + } + } else { + s2 = peg$c0; + } + if (s2 !== peg$FAILED) { + s2 = input.substring(s1, peg$currPos); + } + s1 = s2; + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c51.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c52); + } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c51.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c52); } - this._dualOptimize(); - }; - /** - * Update the values of the variables. - */ - Solver.prototype.updateVariables = function () { - var vars = this._varMap; - var rows = this._rowMap; - for (var i = 0, n = vars.size(); i < n; ++i) { - var pair = vars.itemAt(i); - var rowPair = rows.find(pair.second); - if (rowPair !== undefined) { - pair.first.setValue(rowPair.second.constant()); - } - else { - pair.first.setValue(0.0); - } + } + } + if (s3 !== peg$FAILED) { + s3 = input.substring(s2, peg$currPos); + } + s2 = s3; + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c53(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsenumber() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = []; + if (peg$c45.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c46); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c45.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c46); } - }; - /** - * Get the symbol for the given variable. - * - * If a symbol does not exist for the variable, one will be created. - * @private - */ - Solver.prototype._getVarSymbol = function (variable) { - var _this = this; - var factory = function () { return _this._makeSymbol(1 /* External */); }; - return this._varMap.setDefault(variable, factory).second; - }; - /** - * Create a new Row object for the given constraint. - * - * The terms in the constraint will be converted to cells in the row. - * Any term in the constraint with a coefficient of zero is ignored. - * This method uses the `_getVarSymbol` method to get the symbol for - * the variables added to the row. If the symbol for a given cell - * variable is basic, the cell variable will be substituted with the - * basic row. - * - * The necessary slack and error variables will be added to the row. - * If the constant for the row is negative, the sign for the row - * will be inverted so the constant becomes positive. - * - * Returns the created Row and the tag for tracking the constraint. - * @private - */ - Solver.prototype._createRow = function (constraint) { - var expr = constraint.expression(); - var row = new Row(expr.constant()); - // Substitute the current basic variables into the row. - var terms = expr.terms(); - for (var i = 0, n = terms.size(); i < n; ++i) { - var termPair = terms.itemAt(i); - if (!nearZero(termPair.second)) { - var symbol = this._getVarSymbol(termPair.first); - var basicPair = this._rowMap.find(symbol); - if (basicPair !== undefined) { - row.insertRow(basicPair.second, termPair.second); - } - else { - row.insertSymbol(symbol, termPair.second); - } + } + } + } else { + s1 = peg$c0; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c54; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c55); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c45.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c46); + } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c45.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c46); } + } } - // Add the necessary slack, error, and dummy variables. - var objective = this._objective; - var strength = constraint.strength(); - var tag = { marker: INVALID_SYMBOL, other: INVALID_SYMBOL }; - switch (constraint.op()) { - case 0 /* Le */: - case 1 /* Ge */: - { - var coeff = constraint.op() === 0 /* Le */ ? 1.0 : -1.0; - var slack = this._makeSymbol(2 /* Slack */); - tag.marker = slack; - row.insertSymbol(slack, coeff); - if (strength < kiwi.Strength.required) { - var error = this._makeSymbol(3 /* Error */); - tag.other = error; - row.insertSymbol(error, -coeff); - objective.insertSymbol(error, strength); - } - break; - } - case 2 /* Eq */: - { - if (strength < kiwi.Strength.required) { - var errplus = this._makeSymbol(3 /* Error */); - var errminus = this._makeSymbol(3 /* Error */); - tag.marker = errplus; - tag.other = errminus; - row.insertSymbol(errplus, -1.0); // v = eplus - eminus - row.insertSymbol(errminus, 1.0); // v - eplus + eminus = 0 - objective.insertSymbol(errplus, strength); - objective.insertSymbol(errminus, strength); - } - else { - var dummy = this._makeSymbol(4 /* Dummy */); - tag.marker = dummy; - row.insertSymbol(dummy); - } - break; - } - } - // Ensure the row has a positive constant. - if (row.constant() < 0.0) { - row.reverseSign(); - } - return { row: row, tag: tag }; - }; - /** - * Choose the subject for solving for the row. - * - * This method will choose the best subject for using as the solve - * target for the row. An invalid symbol will be returned if there - * is no valid target. - * - * The symbols are chosen according to the following precedence: - * - * 1) The first symbol representing an external variable. - * 2) A negative slack or error tag variable. - * - * If a subject cannot be found, an invalid symbol will be returned. - * - * @private - */ - Solver.prototype._chooseSubject = function (row, tag) { - var cells = row.cells(); - for (var i = 0, n = cells.size(); i < n; ++i) { - var pair = cells.itemAt(i); - if (pair.first.type() === 1 /* External */) { - return pair.first; - } - } - var type = tag.marker.type(); - if (type === 2 /* Slack */ || type === 3 /* Error */) { - if (row.coefficientFor(tag.marker) < 0.0) { - return tag.marker; - } - } - type = tag.other.type(); - if (type === 2 /* Slack */ || type === 3 /* Error */) { - if (row.coefficientFor(tag.other) < 0.0) { - return tag.other; - } - } - return INVALID_SYMBOL; - }; - /** - * Add the row to the tableau using an artificial variable. - * - * This will return false if the constraint cannot be satisfied. - * - * @private - */ - Solver.prototype._addWithArtificialVariable = function (row) { - // Create and add the artificial variable to the tableau. - var art = this._makeSymbol(2 /* Slack */); - this._rowMap.insert(art, row.copy()); - this._artificial = row.copy(); - // Optimize the artificial objective. This is successful - // only if the artificial objective is optimized to zero. - this._optimize(this._artificial); - var success = nearZero(this._artificial.constant()); - this._artificial = null; - // If the artificial variable is basic, pivot the row so that - // it becomes non-basic. If the row is constant, exit early. - var pair = this._rowMap.erase(art); - if (pair !== undefined) { - var basicRow = pair.second; - if (basicRow.isConstant()) { - return success; - } - var entering = this._anyPivotableSymbol(basicRow); - if (entering.type() === 0 /* Invalid */) { - return false; // unsatisfiable (will this ever happen?) - } - basicRow.solveForEx(art, entering); - this._substitute(entering, basicRow); - this._rowMap.insert(entering, basicRow); - } - // Remove the artificial variable from the tableau. - var rows = this._rowMap; - for (var i = 0, n = rows.size(); i < n; ++i) { - rows.itemAt(i).second.removeSymbol(art); - } - this._objective.removeSymbol(art); - return success; - }; - /** - * Substitute the parametric symbol with the given row. - * - * This method will substitute all instances of the parametric symbol - * in the tableau and the objective function with the given row. - * - * @private - */ - Solver.prototype._substitute = function (symbol, row) { - var rows = this._rowMap; - for (var i = 0, n = rows.size(); i < n; ++i) { - var pair = rows.itemAt(i); - pair.second.substitute(symbol, row); - if (pair.second.constant() < 0.0 && pair.first.type() !== 1 /* External */) { - this._infeasibleRows.push(pair.first); - } - } - this._objective.substitute(symbol, row); - if (this._artificial) { - this._artificial.substitute(symbol, row); - } - }; - /** - * Optimize the system for the given objective function. - * - * This method performs iterations of Phase 2 of the simplex method - * until the objective function reaches a minimum. - * - * @private - */ - Solver.prototype._optimize = function (objective) { - while (true) { - var entering = this._getEnteringSymbol(objective); - if (entering.type() === 0 /* Invalid */) { - return; - } - var leaving = this._getLeavingSymbol(entering); - if (leaving.type() === 0 /* Invalid */) { - throw new Error("the objective is unbounded"); - } - // pivot the entering symbol into the basis - var row = this._rowMap.erase(leaving).second; - row.solveForEx(leaving, entering); - this._substitute(entering, row); - this._rowMap.insert(entering, row); - } - }; - /** - * Optimize the system using the dual of the simplex method. - * - * The current state of the system should be such that the objective - * function is optimal, but not feasible. This method will perform - * an iteration of the dual simplex method to make the solution both - * optimal and feasible. - * - * @private - */ - Solver.prototype._dualOptimize = function () { - var rows = this._rowMap; - var infeasible = this._infeasibleRows; - while (infeasible.length !== 0) { - var leaving = infeasible.pop(); - var pair = rows.find(leaving); - if (pair !== undefined && pair.second.constant() < 0.0) { - var entering = this._getDualEnteringSymbol(pair.second); - if (entering.type() === 0 /* Invalid */) { - throw new Error("dual optimize failed"); - } - // pivot the entering symbol into the basis - var row = pair.second; - rows.erase(leaving); - row.solveForEx(leaving, entering); - this._substitute(entering, row); - rows.insert(entering, row); - } - } - }; - /** - * Compute the entering variable for a pivot operation. - * - * This method will return first symbol in the objective function which - * is non-dummy and has a coefficient less than zero. If no symbol meets - * the criteria, it means the objective function is at a minimum, and an - * invalid symbol is returned. - * - * @private - */ - Solver.prototype._getEnteringSymbol = function (objective) { - var cells = objective.cells(); - for (var i = 0, n = cells.size(); i < n; ++i) { - var pair = cells.itemAt(i); - var symbol = pair.first; - if (pair.second < 0.0 && symbol.type() !== 4 /* Dummy */) { - return symbol; - } + } else { + s3 = peg$c0; + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c56(s1, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + if (peg$c45.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c46); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c45.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c46); + } } - return INVALID_SYMBOL; - }; - /** - * Compute the entering symbol for the dual optimize operation. - * - * This method will return the symbol in the row which has a positive - * coefficient and yields the minimum ratio for its respective symbol - * in the objective function. The provided row *must* be infeasible. - * If no symbol is found which meats the criteria, an invalid symbol - * is returned. - * - * @private - */ - Solver.prototype._getDualEnteringSymbol = function (row) { - var ratio = Number.MAX_VALUE; - var entering = INVALID_SYMBOL; - var cells = row.cells(); - for (var i = 0, n = cells.size(); i < n; ++i) { - var pair = cells.itemAt(i); - var symbol = pair.first; - var c = pair.second; - if (c > 0.0 && symbol.type() !== 4 /* Dummy */) { - var coeff = this._objective.coefficientFor(symbol); - var r = coeff / c; - if (r < ratio) { - ratio = r; - entering = symbol; - } - } - } - return entering; - }; - /** - * Compute the symbol for pivot exit row. - * - * This method will return the symbol for the exit row in the row - * map. If no appropriate exit symbol is found, an invalid symbol - * will be returned. This indicates that the objective function is - * unbounded. - * - * @private - */ - Solver.prototype._getLeavingSymbol = function (entering) { - var ratio = Number.MAX_VALUE; - var found = INVALID_SYMBOL; - var rows = this._rowMap; - for (var i = 0, n = rows.size(); i < n; ++i) { - var pair = rows.itemAt(i); - var symbol = pair.first; - if (symbol.type() !== 1 /* External */) { - var row = pair.second; - var temp = row.coefficientFor(entering); - if (temp < 0.0) { - var temp_ratio = -row.constant() / temp; - if (temp_ratio < ratio) { - ratio = temp_ratio; - found = symbol; - } - } - } - } - return found; - }; - /** - * Compute the leaving symbol for a marker variable. - * - * This method will return a symbol corresponding to a basic row - * which holds the given marker variable. The row will be chosen - * according to the following precedence: - * - * 1) The row with a restricted basic varible and a negative coefficient - * for the marker with the smallest ratio of -constant / coefficient. - * - * 2) The row with a restricted basic variable and the smallest ratio - * of constant / coefficient. - * - * 3) The last unrestricted row which contains the marker. - * - * If the marker does not exist in any row, an invalid symbol will be - * returned. This indicates an internal solver error since the marker - * *should* exist somewhere in the tableau. - * - * @private - */ - Solver.prototype._getMarkerLeavingSymbol = function (marker) { - var dmax = Number.MAX_VALUE; - var r1 = dmax; - var r2 = dmax; - var invalid = INVALID_SYMBOL; - var first = invalid; - var second = invalid; - var third = invalid; - var rows = this._rowMap; - for (var i = 0, n = rows.size(); i < n; ++i) { - var pair = rows.itemAt(i); - var row = pair.second; - var c = row.coefficientFor(marker); - if (c === 0.0) { - continue; - } - var symbol = pair.first; - if (symbol.type() === 1 /* External */) { - third = symbol; - } - else if (c < 0.0) { - var r = -row.constant() / c; - if (r < r1) { - r1 = r; - first = symbol; - } - } - else { - var r = row.constant() / c; - if (r < r2) { - r2 = r; - second = symbol; - } - } - } - if (first !== invalid) { - return first; - } - if (second !== invalid) { - return second; - } - return third; - }; - /** - * Remove the effects of a constraint on the objective function. - * - * @private - */ - Solver.prototype._removeConstraintEffects = function (cn, tag) { - if (tag.marker.type() === 3 /* Error */) { - this._removeMarkerEffects(tag.marker, cn.strength()); - } - if (tag.other.type() === 3 /* Error */) { - this._removeMarkerEffects(tag.other, cn.strength()); - } - }; - /** - * Remove the effects of an error marker on the objective function. - * - * @private - */ - Solver.prototype._removeMarkerEffects = function (marker, strength) { - var pair = this._rowMap.find(marker); - if (pair !== undefined) { - this._objective.insertRow(pair.second, -strength); - } - else { - this._objective.insertSymbol(marker, -strength); - } - }; - /** - * Get the first Slack or Error symbol in the row. - * - * If no such symbol is present, an invalid symbol will be returned. - * - * @private - */ - Solver.prototype._anyPivotableSymbol = function (row) { - var cells = row.cells(); - for (var i = 0, n = cells.size(); i < n; ++i) { - var pair = cells.itemAt(i); - var type = pair.first.type(); - if (type === 2 /* Slack */ || type === 3 /* Error */) { - return pair.first; - } - } - return INVALID_SYMBOL; - }; - /** - * Returns a new Symbol of the given type. - * - * @private - */ - Solver.prototype._makeSymbol = function (type) { - return new Symbol(type, this._idTick++); - }; - return Solver; - })(); - kiwi.Solver = Solver; - /** - * Test whether a value is approximately zero. - * @private - */ - function nearZero(value) { - var eps = 1.0e-8; - return value < 0.0 ? -value < eps : value < eps; - } - /** - * An internal function for creating a constraint map. - * @private - */ - function createCnMap() { - return kiwi.createMap(kiwi.Constraint.Compare); + } + } else { + s1 = peg$c0; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c57(s1); + } + s0 = s1; + } + + return s0; } - /** - * An internal function for creating a row map. - * @private - */ - function createRowMap() { - return kiwi.createMap(Symbol.Compare); + + function extend(dst) { + for (var i = 1; i < arguments.length; i++) { + for (var k in arguments[i]) { + dst[k] = arguments[i][k]; + } + } + return dst; } - /** - * An internal function for creating a variable map. - * @private - */ - function createVarMap() { - return kiwi.createMap(kiwi.Variable.Compare); + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail({ type: "end", description: "end of input" }); + } + + throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); } - /** - * An internal function for creating an edit map. - * @private - */ - function createEditMap() { - return kiwi.createMap(kiwi.Variable.Compare); + } + + return { + SyntaxError: SyntaxError, + parse: parse + }; +})(); + +var parserExt = (function () { + /* + * Generated by PEG.js 0.8.0. + * + * http://pegjs.majda.cz/ + */ + + function peg$subclass(child, parent) { + function ctor() { + this.constructor = child; } - /** - * An enum defining the available symbol types. - * @private - */ - var SymbolType; - (function (SymbolType) { - SymbolType[SymbolType["Invalid"] = 0] = "Invalid"; - SymbolType[SymbolType["External"] = 1] = "External"; - SymbolType[SymbolType["Slack"] = 2] = "Slack"; - SymbolType[SymbolType["Error"] = 3] = "Error"; - SymbolType[SymbolType["Dummy"] = 4] = "Dummy"; - })(SymbolType || (SymbolType = {})); - /** - * An internal class representing a symbol in the solver. - * @private - */ - var Symbol = (function () { - /** - * Construct a new Symbol - * - * @param [type] The type of the symbol. - * @param [id] The unique id number of the symbol. - */ - function Symbol(type, id) { - this._id = id; - this._type = type; - } - /** - * The static Symbol comparison function. - */ - Symbol.Compare = function (a, b) { - return a.id() - b.id(); - }; - /** - * Returns the unique id number of the symbol. - */ - Symbol.prototype.id = function () { - return this._id; - }; - /** - * Returns the type of the symbol. - */ - Symbol.prototype.type = function () { - return this._type; - }; - return Symbol; - })(); - /** - * A static invalid symbol - * @private - */ - var INVALID_SYMBOL = new Symbol(0 /* Invalid */, -1); - /** - * An internal row class used by the solver. - * @private - */ - var Row = (function () { - /** - * Construct a new Row. - */ - function Row(constant) { - if (constant === void 0) { constant = 0.0; } - this._cellMap = kiwi.createMap(Symbol.Compare); - this._constant = constant; - } - /** - * Returns the mapping of symbols to coefficients. - */ - Row.prototype.cells = function () { - return this._cellMap; - }; - /** - * Returns the constant for the row. - */ - Row.prototype.constant = function () { - return this._constant; - }; - /** - * Returns true if the row is a constant value. - */ - Row.prototype.isConstant = function () { - return this._cellMap.empty(); - }; - /** - * Returns true if the Row has all dummy symbols. - */ - Row.prototype.allDummies = function () { - var cells = this._cellMap; - for (var i = 0, n = cells.size(); i < n; ++i) { - var pair = cells.itemAt(i); - if (pair.first.type() !== 4 /* Dummy */) { - return false; - } - } - return true; - }; - /** - * Create a copy of the row. - */ - Row.prototype.copy = function () { - var theCopy = new Row(this._constant); - theCopy._cellMap = this._cellMap.copy(); - return theCopy; - }; - /** - * Add a constant value to the row constant. - * - * Returns the new value of the constant. - */ - Row.prototype.add = function (value) { - return this._constant += value; - }; - /** - * Insert the symbol into the row with the given coefficient. - * - * If the symbol already exists in the row, the coefficient - * will be added to the existing coefficient. If the resulting - * coefficient is zero, the symbol will be removed from the row. - */ - Row.prototype.insertSymbol = function (symbol, coefficient) { - if (coefficient === void 0) { coefficient = 1.0; } - var pair = this._cellMap.setDefault(symbol, function () { return 0.0; }); - if (nearZero(pair.second += coefficient)) { - this._cellMap.erase(symbol); - } - }; - /** - * Insert a row into this row with a given coefficient. - * - * The constant and the cells of the other row will be - * multiplied by the coefficient and added to this row. Any - * cell with a resulting coefficient of zero will be removed - * from the row. - */ - Row.prototype.insertRow = function (other, coefficient) { - if (coefficient === void 0) { coefficient = 1.0; } - this._constant += other._constant * coefficient; - var cells = other._cellMap; - for (var i = 0, n = cells.size(); i < n; ++i) { - var pair = cells.itemAt(i); - this.insertSymbol(pair.first, pair.second * coefficient); - } - }; - /** - * Remove a symbol from the row. - */ - Row.prototype.removeSymbol = function (symbol) { - this._cellMap.erase(symbol); - }; - /** - * Reverse the sign of the constant and cells in the row. - */ - Row.prototype.reverseSign = function () { - this._constant = -this._constant; - var cells = this._cellMap; - for (var i = 0, n = cells.size(); i < n; ++i) { - var pair = cells.itemAt(i); - pair.second = -pair.second; - } - }; - /** - * Solve the row for the given symbol. - * - * This method assumes the row is of the form - * a * x + b * y + c = 0 and (assuming solve for x) will modify - * the row to represent the right hand side of - * x = -b/a * y - c / a. The target symbol will be removed from - * the row, and the constant and other cells will be multiplied - * by the negative inverse of the target coefficient. - * - * The given symbol *must* exist in the row. - */ - Row.prototype.solveFor = function (symbol) { - var cells = this._cellMap; - var pair = cells.erase(symbol); - var coeff = -1.0 / pair.second; - this._constant *= coeff; - for (var i = 0, n = cells.size(); i < n; ++i) { - cells.itemAt(i).second *= coeff; - } - }; - /** - * Solve the row for the given symbols. - * - * This method assumes the row is of the form - * x = b * y + c and will solve the row such that - * y = x / b - c / b. The rhs symbol will be removed from the - * row, the lhs added, and the result divided by the negative - * inverse of the rhs coefficient. - * - * The lhs symbol *must not* exist in the row, and the rhs - * symbol must* exist in the row. - */ - Row.prototype.solveForEx = function (lhs, rhs) { - this.insertSymbol(lhs, -1.0); - this.solveFor(rhs); - }; - /** - * Returns the coefficient for the given symbol. - */ - Row.prototype.coefficientFor = function (symbol) { - var pair = this._cellMap.find(symbol); - return pair !== undefined ? pair.second : 0.0; - }; - /** - * Substitute a symbol with the data from another row. - * - * Given a row of the form a * x + b and a substitution of the - * form x = 3 * y + c the row will be updated to reflect the - * expression 3 * a * y + a * c + b. - * - * If the symbol does not exist in the row, this is a no-op. - */ - Row.prototype.substitute = function (symbol, row) { - var pair = this._cellMap.erase(symbol); - if (pair !== undefined) { - this.insertRow(row, pair.second); - } - }; - return Row; - })(); -})(kiwi || (kiwi = {})); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014, Nucleic Development Team. -| -| Distributed under the terms of the Modified BSD License. -| -| The full license is in the file COPYING.txt, distributed with this software. -|----------------------------------------------------------------------------*/ -/// -/// -/// -/// -/// -/// - -return kiwi; - -})); - -},{}],2:[function(require,module,exports){ -'use strict'; + ctor.prototype = parent.prototype; + child.prototype = new ctor(); + } -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + function SyntaxError(message, expected, found, offset, line, column) { + this.message = message; + this.expected = expected; + this.found = found; + this.offset = offset; + this.line = line; + this.column = column; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + this.name = "SyntaxError"; + } -var kiwi = require('kiwi/ts/bin/kiwi'); - -'use strict'; - -/** - * Layout attributes. - * @enum {String} - */ -var Attribute = { - CONST: 'const', - NOTANATTRIBUTE: 'const', - VARIABLE: 'var', - LEFT: 'left', - RIGHT: 'right', - TOP: 'top', - BOTTOM: 'bottom', - WIDTH: 'width', - HEIGHT: 'height', - CENTERX: 'centerX', - CENTERY: 'centerY', - /*LEADING: 'leading', - TRAILING: 'trailing'*/ - /** Used by the extended VFL syntax. */ - ZINDEX: 'zIndex' -}; - -/** - * Relation types. - * @enum {String} - */ -var Relation = { - /** Less than or equal */ - LEQ: 'leq', - /** Equal */ - EQU: 'equ', - /** Greater than or equal */ - GEQ: 'geq' -}; - -/** - * Layout priorities. - * @enum {String} - */ -var Priority = { - REQUIRED: 1000, - DEFAULTHIGH: 750, - DEFAULTLOW: 250 - //FITTINGSIZELEVEL: 50, -}; - -var parser = (function () { - /* - * Generated by PEG.js 0.8.0. - * - * http://pegjs.majda.cz/ - */ - - function peg$subclass(child, parent) { - function ctor() { - this.constructor = child; - } - ctor.prototype = parent.prototype; - child.prototype = new ctor(); - } - - function SyntaxError(message, expected, found, offset, line, column) { - this.message = message; - this.expected = expected; - this.found = found; - this.offset = offset; - this.line = line; - this.column = column; - - this.name = 'SyntaxError'; - } - - peg$subclass(SyntaxError, Error); + peg$subclass(SyntaxError, Error); function parse(input) { var options = arguments.length > 1 ? arguments[1] : {}, @@ -2163,102 +1240,204 @@ var parser = (function () { peg$startRuleFunction = peg$parsevisualFormatString, peg$c0 = peg$FAILED, peg$c1 = null, - peg$c2 = ':', - peg$c3 = { type: 'literal', value: ':', description: '":"' }, + peg$c2 = ":", + peg$c3 = { type: "literal", value: ":", description: "\":\"" }, peg$c4 = [], - peg$c5 = function peg$c5(o, superto, view, views, tosuper) { + peg$c5 = function peg$c5(o, superto, view, views, tosuper, comments) { return { orientation: o ? o[0] : 'horizontal', cascade: (superto || []).concat([view], [].concat.apply([], views), tosuper || []) }; }, - peg$c6 = 'H', - peg$c7 = { type: 'literal', value: 'H', description: '"H"' }, - peg$c8 = 'V', - peg$c9 = { type: 'literal', value: 'V', description: '"V"' }, - peg$c10 = function peg$c10(orient) { - return orient == 'H' ? 'horizontal' : 'vertical'; + peg$c6 = "HV", + peg$c7 = { type: "literal", value: "HV", description: "\"HV\"" }, + peg$c8 = function peg$c8() { + return 'horzvert'; }, - peg$c11 = '|', - peg$c12 = { type: 'literal', value: '|', description: '"|"' }, - peg$c13 = function peg$c13() { + peg$c9 = "H", + peg$c10 = { type: "literal", value: "H", description: "\"H\"" }, + peg$c11 = function peg$c11() { + return 'horizontal'; + }, + peg$c12 = "V", + peg$c13 = { type: "literal", value: "V", description: "\"V\"" }, + peg$c14 = function peg$c14() { + return 'vertical'; + }, + peg$c15 = "Z", + peg$c16 = { type: "literal", value: "Z", description: "\"Z\"" }, + peg$c17 = function peg$c17() { + return 'zIndex'; + }, + peg$c18 = " ", + peg$c19 = { type: "literal", value: " ", description: "\" \"" }, + peg$c20 = "//", + peg$c21 = { type: "literal", value: "//", description: "\"//\"" }, + peg$c22 = { type: "any", description: "any character" }, + peg$c23 = "|", + peg$c24 = { type: "literal", value: "|", description: "\"|\"" }, + peg$c25 = function peg$c25() { return { view: null }; }, - peg$c14 = '[', - peg$c15 = { type: 'literal', value: '[', description: '"["' }, - peg$c16 = ']', - peg$c17 = { type: 'literal', value: ']', description: '"]"' }, - peg$c18 = function peg$c18(view, predicates) { - return extend(view, predicates ? { constraints: predicates } : {}); + peg$c26 = "[", + peg$c27 = { type: "literal", value: "[", description: "\"[\"" }, + peg$c28 = "]", + peg$c29 = { type: "literal", value: "]", description: "\"]\"" }, + peg$c30 = function peg$c30(view, predicates, cascadedViews) { + return extend(extend(view, predicates ? { constraints: predicates } : {}), cascadedViews ? { + cascade: cascadedViews + } : {}); }, - peg$c19 = '-', - peg$c20 = { type: 'literal', value: '-', description: '"-"' }, - peg$c21 = function peg$c21(predicateList) { + peg$c31 = function peg$c31(views, connection) { + return [].concat([].concat.apply([], views), [connection]); + }, + peg$c32 = "->", + peg$c33 = { type: "literal", value: "->", description: "\"->\"" }, + peg$c34 = function peg$c34() { + return [{ relation: 'none' }]; + }, + peg$c35 = "-", + peg$c36 = { type: "literal", value: "-", description: "\"-\"" }, + peg$c37 = function peg$c37(predicateList) { return predicateList; }, - peg$c22 = function peg$c22() { - return [{ relation: 'equ', constant: 'default', $parserOffset: offset() }]; + peg$c38 = function peg$c38() { + return [{ relation: 'equ', constant: 'default' }]; }, - peg$c23 = '', - peg$c24 = function peg$c24() { - return [{ relation: 'equ', constant: 0, $parserOffset: offset() }]; + peg$c39 = "~", + peg$c40 = { type: "literal", value: "~", description: "\"~\"" }, + peg$c41 = function peg$c41() { + return [{ relation: 'equ', equalSpacing: true }]; }, - peg$c25 = function peg$c25(n) { - return [{ relation: 'equ', constant: n, $parserOffset: offset() }]; + peg$c42 = "", + peg$c43 = function peg$c43() { + return [{ relation: 'equ', constant: 0 }]; }, - peg$c26 = '(', - peg$c27 = { type: 'literal', value: '(', description: '"("' }, - peg$c28 = ',', - peg$c29 = { type: 'literal', value: ',', description: '","' }, - peg$c30 = ')', - peg$c31 = { type: 'literal', value: ')', description: '")"' }, - peg$c32 = function peg$c32(p, ps) { + peg$c44 = function peg$c44(p) { + return [{ relation: 'equ', multiplier: p.multiplier }]; + }, + peg$c45 = function peg$c45(n) { + return [{ relation: 'equ', constant: n }]; + }, + peg$c46 = "(", + peg$c47 = { type: "literal", value: "(", description: "\"(\"" }, + peg$c48 = ",", + peg$c49 = { type: "literal", value: ",", description: "\",\"" }, + peg$c50 = ")", + peg$c51 = { type: "literal", value: ")", description: "\")\"" }, + peg$c52 = function peg$c52(p, ps) { return [p].concat(ps.map(function (p) { return p[1]; })); }, - peg$c33 = '@', - peg$c34 = { type: 'literal', value: '@', description: '"@"' }, - peg$c35 = function peg$c35(r, o, p) { + peg$c53 = "@", + peg$c54 = { type: "literal", value: "@", description: "\"@\"" }, + peg$c55 = function peg$c55(r, o, p) { return extend({ relation: 'equ' }, r || {}, o, p ? p[1] : {}); }, - peg$c36 = '==', - peg$c37 = { type: 'literal', value: '==', description: '"=="' }, - peg$c38 = function peg$c38() { - return { relation: 'equ', $parserOffset: offset() }; + peg$c56 = function peg$c56(r, o, p) { + return extend({ relation: 'equ', equalSpacing: true }, r || {}, o, p ? p[1] : {}); }, - peg$c39 = '<=', - peg$c40 = { type: 'literal', value: '<=', description: '"<="' }, - peg$c41 = function peg$c41() { - return { relation: 'leq', $parserOffset: offset() }; + peg$c57 = "==", + peg$c58 = { type: "literal", value: "==", description: "\"==\"" }, + peg$c59 = function peg$c59() { + return { relation: 'equ' }; }, - peg$c42 = '>=', - peg$c43 = { type: 'literal', value: '>=', description: '">="' }, - peg$c44 = function peg$c44() { - return { relation: 'geq', $parserOffset: offset() }; + peg$c60 = "<=", + peg$c61 = { type: "literal", value: "<=", description: "\"<=\"" }, + peg$c62 = function peg$c62() { + return { relation: 'leq' }; }, - peg$c45 = /^[0-9]/, - peg$c46 = { type: 'class', value: '[0-9]', description: '[0-9]' }, - peg$c47 = function peg$c47(digits) { - return { priority: parseInt(digits.join(''), 10) }; + peg$c63 = ">=", + peg$c64 = { type: "literal", value: ">=", description: "\">=\"" }, + peg$c65 = function peg$c65() { + return { relation: 'geq' }; }, - peg$c48 = function peg$c48(n) { + peg$c66 = /^[0-9]/, + peg$c67 = { type: "class", value: "[0-9]", description: "[0-9]" }, + peg$c68 = function peg$c68(digits) { + return { priority: parseInt(digits.join(""), 10) }; + }, + peg$c69 = function peg$c69(n) { return { constant: n }; }, - peg$c49 = /^[a-zA-Z_]/, - peg$c50 = { type: 'class', value: '[a-zA-Z_]', description: '[a-zA-Z_]' }, - peg$c51 = /^[a-zA-Z0-9_]/, - peg$c52 = { type: 'class', value: '[a-zA-Z0-9_]', description: '[a-zA-Z0-9_]' }, - peg$c53 = function peg$c53(f, v) { - return { view: f + v }; + peg$c70 = "%", + peg$c71 = { type: "literal", value: "%", description: "\"%\"" }, + peg$c72 = function peg$c72(n) { + return { view: null, multiplier: n / 100 }; }, - peg$c54 = '.', - peg$c55 = { type: 'literal', value: '.', description: '"."' }, - peg$c56 = function peg$c56(digits, decimals) { - return parseFloat(digits.concat('.').concat(decimals).join(''), 10); + peg$c73 = function peg$c73(vn, a, m, c) { + return { view: vn.view, attribute: a ? a : undefined, multiplier: m ? m : 1, constant: c ? c : undefined }; }, - peg$c57 = function peg$c57(digits) { - return parseInt(digits.join(''), 10); + peg$c74 = ".left", + peg$c75 = { type: "literal", value: ".left", description: "\".left\"" }, + peg$c76 = function peg$c76() { + return 'left'; + }, + peg$c77 = ".right", + peg$c78 = { type: "literal", value: ".right", description: "\".right\"" }, + peg$c79 = function peg$c79() { + return 'right'; + }, + peg$c80 = ".top", + peg$c81 = { type: "literal", value: ".top", description: "\".top\"" }, + peg$c82 = function peg$c82() { + return 'top'; + }, + peg$c83 = ".bottom", + peg$c84 = { type: "literal", value: ".bottom", description: "\".bottom\"" }, + peg$c85 = function peg$c85() { + return 'bottom'; + }, + peg$c86 = ".width", + peg$c87 = { type: "literal", value: ".width", description: "\".width\"" }, + peg$c88 = function peg$c88() { + return 'width'; + }, + peg$c89 = ".height", + peg$c90 = { type: "literal", value: ".height", description: "\".height\"" }, + peg$c91 = function peg$c91() { + return 'height'; + }, + peg$c92 = ".centerX", + peg$c93 = { type: "literal", value: ".centerX", description: "\".centerX\"" }, + peg$c94 = function peg$c94() { + return 'centerX'; + }, + peg$c95 = ".centerY", + peg$c96 = { type: "literal", value: ".centerY", description: "\".centerY\"" }, + peg$c97 = function peg$c97() { + return 'centerY'; + }, + peg$c98 = "/", + peg$c99 = { type: "literal", value: "/", description: "\"/\"" }, + peg$c100 = function peg$c100(n) { + return 1 / n; + }, + peg$c101 = "*", + peg$c102 = { type: "literal", value: "*", description: "\"*\"" }, + peg$c103 = function peg$c103(n) { + return n; + }, + peg$c104 = function peg$c104(n) { + return -n; + }, + peg$c105 = "+", + peg$c106 = { type: "literal", value: "+", description: "\"+\"" }, + peg$c107 = /^[a-zA-Z_]/, + peg$c108 = { type: "class", value: "[a-zA-Z_]", description: "[a-zA-Z_]" }, + peg$c109 = /^[a-zA-Z0-9_]/, + peg$c110 = { type: "class", value: "[a-zA-Z0-9_]", description: "[a-zA-Z0-9_]" }, + peg$c111 = function peg$c111(f, v) { + return { view: f + v, $parserOffset: offset() }; + }, + peg$c112 = ".", + peg$c113 = { type: "literal", value: ".", description: "\".\"" }, + peg$c114 = function peg$c114(digits, decimals) { + return parseFloat(digits.concat(".").concat(decimals).join(""), 10); + }, + peg$c115 = function peg$c115(digits) { + return parseInt(digits.join(""), 10); }, peg$currPos = 0, peg$reportedPos = 0, @@ -2269,9 +1448,9 @@ var parser = (function () { peg$silentFails = 0, peg$result; - if ('startRule' in options) { + if ("startRule" in options) { if (!(options.startRule in peg$startRuleFunctions)) { - throw new Error('Can\'t start parsing from rule "' + options.startRule + '".'); + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); } peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; @@ -2294,7 +1473,7 @@ var parser = (function () { } function expected(description) { - throw peg$buildException(null, [{ type: 'other', description: description }], peg$reportedPos); + throw peg$buildException(null, [{ type: "other", description: description }], peg$reportedPos); } function error(message) { @@ -2307,13 +1486,13 @@ var parser = (function () { for (p = startPos; p < endPos; p++) { ch = input.charAt(p); - if (ch === '\n') { + if (ch === "\n") { if (!details.seenCR) { details.line++; } details.column = 1; details.seenCR = false; - } else if (ch === '\r' || ch === '\u2028' || ch === '\u2029') { + } else if (ch === "\r" || ch === '\u2028' || ch === '\u2029') { details.line++; details.column = 1; details.seenCR = true; @@ -2398,11 +1577,11 @@ var parser = (function () { expectedDescs[i] = expected[i].description; } - expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(', ') + ' or ' + expectedDescs[expected.length - 1] : expectedDescs[0]; + expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(", ") + " or " + expectedDescs[expected.length - 1] : expectedDescs[0]; - foundDesc = found ? '"' + stringEscape(found) + '"' : 'end of input'; + foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input"; - return 'Expected ' + expectedDesc + ' but ' + foundDesc + ' found.'; + return "Expected " + expectedDesc + " but " + foundDesc + " found."; } var posDetails = peg$computePosDetails(pos), @@ -2521,9 +1700,18 @@ var parser = (function () { s5 = peg$c1; } if (s5 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c5(s1, s2, s3, s4, s5); - s0 = s1; + s6 = peg$parsecomments(); + if (s6 === peg$FAILED) { + s6 = peg$c1; + } + if (s6 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c5(s1, s2, s3, s4, s5, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } } else { peg$currPos = s0; s0 = peg$c0; @@ -2552,139 +1740,136 @@ var parser = (function () { var s0, s1; s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 72) { + if (input.substr(peg$currPos, 2) === peg$c6) { s1 = peg$c6; - peg$currPos++; + peg$currPos += 2; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c7); } } - if (s1 === peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 86) { - s1 = peg$c8; + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c8(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 72) { + s1 = peg$c9; peg$currPos++; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c9); + peg$fail(peg$c10); } } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c10(s1); - } - s0 = s1; - - return s0; - } - - function peg$parsesuperview() { - var s0, s1; - - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 124) { - s1 = peg$c11; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c12); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c11(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 86) { + s1 = peg$c12; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c13); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c14(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 90) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c16); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c17(); + } + s0 = s1; + } } } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c13(); - } - s0 = s1; return s0; } - function peg$parseview() { + function peg$parsecomments() { var s0, s1, s2, s3, s4; s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 91) { - s1 = peg$c14; + s1 = []; + if (input.charCodeAt(peg$currPos) === 32) { + s2 = peg$c18; peg$currPos++; } else { - s1 = peg$FAILED; + s2 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c15); + peg$fail(peg$c19); } } - if (s1 !== peg$FAILED) { - s2 = peg$parseviewName(); - if (s2 !== peg$FAILED) { - s3 = peg$parsepredicateListWithParens(); - if (s3 === peg$FAILED) { - s3 = peg$c1; + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 32) { + s2 = peg$c18; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c19); } - if (s3 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 93) { - s4 = peg$c16; - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c17); - } - } - if (s4 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c18(s2, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - - return s0; - } - - function peg$parseconnection() { - var s0, s1, s2, s3; - - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 45) { - s1 = peg$c19; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c20); } } if (s1 !== peg$FAILED) { - s2 = peg$parsepredicateList(); + if (input.substr(peg$currPos, 2) === peg$c20) { + s2 = peg$c20; + peg$currPos += 2; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c21); + } + } if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 45) { - s3 = peg$c19; + s3 = []; + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); peg$currPos++; } else { - s3 = peg$FAILED; + s4 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c20); + peg$fail(peg$c22); + } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c22); + } } } if (s3 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c21(s2); + s1 = [s1, s2, s3]; s0 = s1; } else { peg$currPos = s0; @@ -2698,66 +1883,37 @@ var parser = (function () { peg$currPos = s0; s0 = peg$c0; } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 45) { - s1 = peg$c19; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c20); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c22(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$c23; - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c24(); - } - s0 = s1; - } - } - - return s0; - } - - function peg$parsepredicateList() { - var s0; - - s0 = peg$parsesimplePredicate(); - if (s0 === peg$FAILED) { - s0 = peg$parsepredicateListWithParens(); - } return s0; } - function peg$parsesimplePredicate() { + function peg$parsesuperview() { var s0, s1; s0 = peg$currPos; - s1 = peg$parsenumber(); + if (input.charCodeAt(peg$currPos) === 124) { + s1 = peg$c23; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c24); + } + } if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c25(s1); + s1 = peg$c25(); } s0 = s1; return s0; } - function peg$parsepredicateListWithParens() { - var s0, s1, s2, s3, s4, s5, s6; + function peg$parseview() { + var s0, s1, s2, s3, s4, s5; s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 40) { + if (input.charCodeAt(peg$currPos) === 91) { s1 = peg$c26; peg$currPos++; } else { @@ -2767,72 +1923,35 @@ var parser = (function () { } } if (s1 !== peg$FAILED) { - s2 = peg$parsepredicate(); + s2 = peg$parseviewName(); if (s2 !== peg$FAILED) { - s3 = []; - s4 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 44) { - s5 = peg$c28; - peg$currPos++; - } else { - s5 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c29); - } - } - if (s5 !== peg$FAILED) { - s6 = peg$parsepredicate(); - if (s6 !== peg$FAILED) { - s5 = [s5, s6]; - s4 = s5; - } else { - peg$currPos = s4; - s4 = peg$c0; - } - } else { - peg$currPos = s4; - s4 = peg$c0; + s3 = peg$parsepredicateListWithParens(); + if (s3 === peg$FAILED) { + s3 = peg$c1; } - while (s4 !== peg$FAILED) { - s3.push(s4); - s4 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 44) { - s5 = peg$c28; - peg$currPos++; - } else { - s5 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c29); - } + if (s3 !== peg$FAILED) { + s4 = peg$parsecascadedViews(); + if (s4 === peg$FAILED) { + s4 = peg$c1; } - if (s5 !== peg$FAILED) { - s6 = peg$parsepredicate(); - if (s6 !== peg$FAILED) { - s5 = [s5, s6]; - s4 = s5; + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s5 = peg$c28; + peg$currPos++; } else { - peg$currPos = s4; - s4 = peg$c0; + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c29); + } } - } else { - peg$currPos = s4; - s4 = peg$c0; - } - } - if (s3 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 41) { - s4 = peg$c30; - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c31); + if (s5 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c30(s2, s3, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; } - } - if (s4 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c32(s2, s3); - s0 = s1; } else { peg$currPos = s0; s0 = peg$c0; @@ -2853,49 +1972,66 @@ var parser = (function () { return s0; } - function peg$parsepredicate() { + function peg$parsecascadedViews() { var s0, s1, s2, s3, s4, s5; s0 = peg$currPos; - s1 = peg$parserelation(); - if (s1 === peg$FAILED) { - s1 = peg$c1; + if (input.charCodeAt(peg$currPos) === 58) { + s1 = peg$c2; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c3); + } } if (s1 !== peg$FAILED) { - s2 = peg$parseobjectOfPredicate(); - if (s2 !== peg$FAILED) { - s3 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 64) { - s4 = peg$c33; - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c34); - } - } - if (s4 !== peg$FAILED) { - s5 = peg$parsepriority(); - if (s5 !== peg$FAILED) { - s4 = [s4, s5]; - s3 = s4; - } else { - peg$currPos = s3; - s3 = peg$c0; - } + s2 = []; + s3 = peg$currPos; + s4 = peg$parseconnection(); + if (s4 !== peg$FAILED) { + s5 = peg$parseview(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; } else { peg$currPos = s3; s3 = peg$c0; } - if (s3 === peg$FAILED) { - s3 = peg$c1; - } - if (s3 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c35(s1, s2, s3); - s0 = s1; - } else { - peg$currPos = s0; + } else { + peg$currPos = s3; + s3 = peg$c0; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parseconnection(); + if (s4 !== peg$FAILED) { + s5 = peg$parseview(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } + } else { + s2 = peg$c0; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseconnection(); + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c31(s2, s3); + s0 = s1; + } else { + peg$currPos = s0; s0 = peg$c0; } } else { @@ -2910,193 +2046,273 @@ var parser = (function () { return s0; } - function peg$parserelation() { - var s0, s1; + function peg$parseconnection() { + var s0, s1, s2, s3; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c36) { - s1 = peg$c36; + if (input.substr(peg$currPos, 2) === peg$c32) { + s1 = peg$c32; peg$currPos += 2; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c37); + peg$fail(peg$c33); } } if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c38(); + s1 = peg$c34(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c39) { - s1 = peg$c39; - peg$currPos += 2; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c35; + peg$currPos++; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c40); + peg$fail(peg$c36); } } if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c41(); + s2 = peg$parsepredicateList(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s3 = peg$c35; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c36); + } + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c37(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; } - s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c42) { - s1 = peg$c42; - peg$currPos += 2; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c35; + peg$currPos++; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c43); + peg$fail(peg$c36); } } if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c44(); + s1 = peg$c38(); } s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 126) { + s1 = peg$c39; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c40); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseequalSpacingPredicateList(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 126) { + s3 = peg$c39; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c40); + } + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c37(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 126) { + s1 = peg$c39; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c40); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c41(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$c42; + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c43(); + } + s0 = s1; + } + } + } } } return s0; } - function peg$parseobjectOfPredicate() { + function peg$parsepredicateList() { var s0; - s0 = peg$parseconstant(); + s0 = peg$parsesimplePredicate(); if (s0 === peg$FAILED) { - s0 = peg$parseviewName(); - } - - return s0; - } - - function peg$parsepriority() { - var s0, s1, s2; - - s0 = peg$currPos; - s1 = []; - if (peg$c45.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c46); - } - } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$c45.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c46); - } - } - } - } else { - s1 = peg$c0; - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c47(s1); + s0 = peg$parsepredicateListWithParens(); } - s0 = s1; return s0; } - function peg$parseconstant() { + function peg$parsesimplePredicate() { var s0, s1; s0 = peg$currPos; - s1 = peg$parsenumber(); + s1 = peg$parsepercentage(); if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c48(s1); + s1 = peg$c44(s1); } s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c45(s1); + } + s0 = s1; + } return s0; } - function peg$parseviewName() { - var s0, s1, s2, s3, s4; + function peg$parsepredicateListWithParens() { + var s0, s1, s2, s3, s4, s5, s6; s0 = peg$currPos; - s1 = peg$currPos; - s2 = []; - if (peg$c49.test(input.charAt(peg$currPos))) { - s3 = input.charAt(peg$currPos); + if (input.charCodeAt(peg$currPos) === 40) { + s1 = peg$c46; peg$currPos++; } else { - s3 = peg$FAILED; + s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c50); - } - } - if (s3 !== peg$FAILED) { - while (s3 !== peg$FAILED) { - s2.push(s3); - if (peg$c49.test(input.charAt(peg$currPos))) { - s3 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c50); - } - } + peg$fail(peg$c47); } - } else { - s2 = peg$c0; - } - if (s2 !== peg$FAILED) { - s2 = input.substring(s1, peg$currPos); } - s1 = s2; if (s1 !== peg$FAILED) { - s2 = peg$currPos; - s3 = []; - if (peg$c51.test(input.charAt(peg$currPos))) { - s4 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c52); - } - } - while (s4 !== peg$FAILED) { - s3.push(s4); - if (peg$c51.test(input.charAt(peg$currPos))) { - s4 = input.charAt(peg$currPos); + s2 = peg$parsepredicate(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c48; peg$currPos++; } else { - s4 = peg$FAILED; + s5 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c52); + peg$fail(peg$c49); } } - } - if (s3 !== peg$FAILED) { - s3 = input.substring(s2, peg$currPos); - } - s2 = s3; - if (s2 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c53(s1, s2); - s0 = s1; + if (s5 !== peg$FAILED) { + s6 = peg$parsepredicate(); + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$c0; + } + } else { + peg$currPos = s4; + s4 = peg$c0; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c48; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c49); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parsepredicate(); + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$c0; + } + } else { + peg$currPos = s4; + s4 = peg$c0; + } + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s4 = peg$c50; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c51); + } + } + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c52(s2, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } } else { peg$currPos = s0; s0 = peg$c0; @@ -3109,76 +2325,46 @@ var parser = (function () { return s0; } - function peg$parsenumber() { - var s0, s1, s2, s3, s4; + function peg$parsepredicate() { + var s0, s1, s2, s3, s4, s5; s0 = peg$currPos; - s1 = []; - if (peg$c45.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c46); - } - } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$c45.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c46); - } - } - } - } else { - s1 = peg$c0; + s1 = peg$parserelation(); + if (s1 === peg$FAILED) { + s1 = peg$c1; } if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 46) { - s2 = peg$c54; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c55); - } - } + s2 = peg$parseobjectOfPredicate(); if (s2 !== peg$FAILED) { - s3 = []; - if (peg$c45.test(input.charAt(peg$currPos))) { - s4 = input.charAt(peg$currPos); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s4 = peg$c53; peg$currPos++; } else { s4 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c46); + peg$fail(peg$c54); } } if (s4 !== peg$FAILED) { - while (s4 !== peg$FAILED) { - s3.push(s4); - if (peg$c45.test(input.charAt(peg$currPos))) { - s4 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c46); - } - } + s5 = peg$parsepriority(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$c0; } } else { + peg$currPos = s3; s3 = peg$c0; } + if (s3 === peg$FAILED) { + s3 = peg$c1; + } if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c56(s1, s3); + s1 = peg$c55(s1, s2, s3); s0 = s1; } else { peg$currPos = s0; @@ -3192,697 +2378,606 @@ var parser = (function () { peg$currPos = s0; s0 = peg$c0; } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = []; - if (peg$c45.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c46); - } + + return s0; + } + + function peg$parseequalSpacingPredicateList() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 40) { + s1 = peg$c46; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c47); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseequalSpacingPredicate(); if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$c45.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); + s3 = []; + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c48; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c49); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseequalSpacingPredicate(); + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$c0; + } + } else { + peg$currPos = s4; + s4 = peg$c0; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c48; peg$currPos++; } else { - s2 = peg$FAILED; + s5 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c46); + peg$fail(peg$c49); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseequalSpacingPredicate(); + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$c0; + } + } else { + peg$currPos = s4; + s4 = peg$c0; + } + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s4 = peg$c50; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c51); } } + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c52(s2, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; } } else { - s1 = peg$c0; - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c57(s1); + peg$currPos = s0; + s0 = peg$c0; } - s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; } return s0; } - function extend(dst) { - for (var i = 1; i < arguments.length; i++) { - for (var k in arguments[i]) { - dst[k] = arguments[i][k]; - } - } - return dst; - } - - peg$result = peg$startRuleFunction(); + function peg$parseequalSpacingPredicate() { + var s0, s1, s2, s3, s4, s5; - if (peg$result !== peg$FAILED && peg$currPos === input.length) { - return peg$result; - } else { - if (peg$result !== peg$FAILED && peg$currPos < input.length) { - peg$fail({ type: 'end', description: 'end of input' }); + s0 = peg$currPos; + s1 = peg$parserelation(); + if (s1 === peg$FAILED) { + s1 = peg$c1; } - - throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); + if (s1 !== peg$FAILED) { + s2 = peg$parseobjectOfPredicate(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s4 = peg$c53; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c54); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsepriority(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + if (s3 === peg$FAILED) { + s3 = peg$c1; + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c56(s1, s2, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; } - } - return { - SyntaxError: SyntaxError, - parse: parse - }; -})(); + function peg$parserelation() { + var s0, s1; -var parserExt = (function () { - /* - * Generated by PEG.js 0.8.0. - * - * http://pegjs.majda.cz/ - */ + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c57) { + s1 = peg$c57; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c58); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c59(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c60) { + s1 = peg$c60; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c61); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c62(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c63) { + s1 = peg$c63; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c64); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c65(); + } + s0 = s1; + } + } - function peg$subclass(child, parent) { - function ctor() { - this.constructor = child; + return s0; } - ctor.prototype = parent.prototype; - child.prototype = new ctor(); - } - function SyntaxError(message, expected, found, offset, line, column) { - this.message = message; - this.expected = expected; - this.found = found; - this.offset = offset; - this.line = line; - this.column = column; + function peg$parseobjectOfPredicate() { + var s0; - this.name = 'SyntaxError'; - } + s0 = peg$parsepercentage(); + if (s0 === peg$FAILED) { + s0 = peg$parseconstant(); + if (s0 === peg$FAILED) { + s0 = peg$parseviewPredicate(); + } + } - peg$subclass(SyntaxError, Error); + return s0; + } - function parse(input) { - var options = arguments.length > 1 ? arguments[1] : {}, - peg$FAILED = {}, - peg$startRuleFunctions = { visualFormatString: peg$parsevisualFormatString }, - peg$startRuleFunction = peg$parsevisualFormatString, - peg$c0 = peg$FAILED, - peg$c1 = null, - peg$c2 = ':', - peg$c3 = { type: 'literal', value: ':', description: '":"' }, - peg$c4 = [], - peg$c5 = function peg$c5(o, superto, view, views, tosuper, comments) { - return { - orientation: o ? o[0] : 'horizontal', - cascade: (superto || []).concat([view], [].concat.apply([], views), tosuper || []) - }; - }, - peg$c6 = 'H', - peg$c7 = { type: 'literal', value: 'H', description: '"H"' }, - peg$c8 = 'V', - peg$c9 = { type: 'literal', value: 'V', description: '"V"' }, - peg$c10 = 'Z', - peg$c11 = { type: 'literal', value: 'Z', description: '"Z"' }, - peg$c12 = function peg$c12(orient) { - return orient == 'H' ? 'horizontal' : orient == 'V' ? 'vertical' : 'zIndex'; - }, - peg$c13 = ' ', - peg$c14 = { type: 'literal', value: ' ', description: '" "' }, - peg$c15 = '//', - peg$c16 = { type: 'literal', value: '//', description: '"//"' }, - peg$c17 = { type: 'any', description: 'any character' }, - peg$c18 = '|', - peg$c19 = { type: 'literal', value: '|', description: '"|"' }, - peg$c20 = function peg$c20() { - return { view: null }; - }, - peg$c21 = '[', - peg$c22 = { type: 'literal', value: '[', description: '"["' }, - peg$c23 = ']', - peg$c24 = { type: 'literal', value: ']', description: '"]"' }, - peg$c25 = function peg$c25(view, predicates, cascadedViews) { - return extend(extend(view, predicates ? { constraints: predicates } : {}), cascadedViews ? { - cascade: cascadedViews - } : {}); - }, - peg$c26 = function peg$c26(views, connection) { - return [].concat([].concat.apply([], views), [connection]); - }, - peg$c27 = '->', - peg$c28 = { type: 'literal', value: '->', description: '"->"' }, - peg$c29 = function peg$c29() { - return [{ relation: 'none', $parserOffset: offset() }]; - }, - peg$c30 = '-', - peg$c31 = { type: 'literal', value: '-', description: '"-"' }, - peg$c32 = function peg$c32(predicateList) { - return predicateList; - }, - peg$c33 = function peg$c33() { - return [{ relation: 'equ', constant: 'default', $parserOffset: offset() }]; - }, - peg$c34 = '~', - peg$c35 = { type: 'literal', value: '~', description: '"~"' }, - peg$c36 = function peg$c36() { - return [{ relation: 'equ', equalSpacing: true, $parserOffset: offset() }]; - }, - peg$c37 = '', - peg$c38 = function peg$c38() { - return [{ relation: 'equ', constant: 0, $parserOffset: offset() }]; - }, - peg$c39 = function peg$c39(p) { - return [{ relation: 'equ', multiplier: p.multiplier, $parserOffset: offset() }]; - }, - peg$c40 = function peg$c40(n) { - return [{ relation: 'equ', constant: n, $parserOffset: offset() }]; - }, - peg$c41 = '(', - peg$c42 = { type: 'literal', value: '(', description: '"("' }, - peg$c43 = ',', - peg$c44 = { type: 'literal', value: ',', description: '","' }, - peg$c45 = ')', - peg$c46 = { type: 'literal', value: ')', description: '")"' }, - peg$c47 = function peg$c47(p, ps) { - return [p].concat(ps.map(function (p) { - return p[1]; - })); - }, - peg$c48 = '@', - peg$c49 = { type: 'literal', value: '@', description: '"@"' }, - peg$c50 = function peg$c50(r, o, p) { - return extend({ relation: 'equ' }, r || {}, o, p ? p[1] : {}); - }, - peg$c51 = function peg$c51(r, o, p) { - return extend({ relation: 'equ', equalSpacing: true }, r || {}, o, p ? p[1] : {}); - }, - peg$c52 = '==', - peg$c53 = { type: 'literal', value: '==', description: '"=="' }, - peg$c54 = function peg$c54() { - return { relation: 'equ', $parserOffset: offset() }; - }, - peg$c55 = '<=', - peg$c56 = { type: 'literal', value: '<=', description: '"<="' }, - peg$c57 = function peg$c57() { - return { relation: 'leq', $parserOffset: offset() }; - }, - peg$c58 = '>=', - peg$c59 = { type: 'literal', value: '>=', description: '">="' }, - peg$c60 = function peg$c60() { - return { relation: 'geq', $parserOffset: offset() }; - }, - peg$c61 = /^[0-9]/, - peg$c62 = { type: 'class', value: '[0-9]', description: '[0-9]' }, - peg$c63 = function peg$c63(digits) { - return { priority: parseInt(digits.join(''), 10) }; - }, - peg$c64 = function peg$c64(n) { - return { constant: n }; - }, - peg$c65 = '%', - peg$c66 = { type: 'literal', value: '%', description: '"%"' }, - peg$c67 = function peg$c67(n) { - return { view: null, multiplier: n / 100 }; - }, - peg$c68 = function peg$c68(vn, a, m, c) { - return { view: vn.view, attribute: a ? a : undefined, multiplier: m ? m : 1, constant: c ? c : undefined }; - }, - peg$c69 = '.left', - peg$c70 = { type: 'literal', value: '.left', description: '".left"' }, - peg$c71 = function peg$c71() { - return 'left'; - }, - peg$c72 = '.right', - peg$c73 = { type: 'literal', value: '.right', description: '".right"' }, - peg$c74 = function peg$c74() { - return 'right'; - }, - peg$c75 = '.top', - peg$c76 = { type: 'literal', value: '.top', description: '".top"' }, - peg$c77 = function peg$c77() { - return 'top'; - }, - peg$c78 = '.bottom', - peg$c79 = { type: 'literal', value: '.bottom', description: '".bottom"' }, - peg$c80 = function peg$c80() { - return 'bottom'; - }, - peg$c81 = '.width', - peg$c82 = { type: 'literal', value: '.width', description: '".width"' }, - peg$c83 = function peg$c83() { - return 'width'; - }, - peg$c84 = '.height', - peg$c85 = { type: 'literal', value: '.height', description: '".height"' }, - peg$c86 = function peg$c86() { - return 'height'; - }, - peg$c87 = '.centerX', - peg$c88 = { type: 'literal', value: '.centerX', description: '".centerX"' }, - peg$c89 = function peg$c89() { - return 'centerX'; - }, - peg$c90 = '.centerY', - peg$c91 = { type: 'literal', value: '.centerY', description: '".centerY"' }, - peg$c92 = function peg$c92() { - return 'centerY'; - }, - peg$c93 = '/', - peg$c94 = { type: 'literal', value: '/', description: '"/"' }, - peg$c95 = function peg$c95(n) { - return 1 / n; - }, - peg$c96 = '*', - peg$c97 = { type: 'literal', value: '*', description: '"*"' }, - peg$c98 = function peg$c98(n) { - return n; - }, - peg$c99 = function peg$c99(n) { - return -n; - }, - peg$c100 = '+', - peg$c101 = { type: 'literal', value: '+', description: '"+"' }, - peg$c102 = /^[a-zA-Z_]/, - peg$c103 = { type: 'class', value: '[a-zA-Z_]', description: '[a-zA-Z_]' }, - peg$c104 = /^[a-zA-Z0-9_]/, - peg$c105 = { type: 'class', value: '[a-zA-Z0-9_]', description: '[a-zA-Z0-9_]' }, - peg$c106 = function peg$c106(f, v) { - return { view: f + v }; - }, - peg$c107 = '.', - peg$c108 = { type: 'literal', value: '.', description: '"."' }, - peg$c109 = function peg$c109(digits, decimals) { - return parseFloat(digits.concat('.').concat(decimals).join(''), 10); - }, - peg$c110 = function peg$c110(digits) { - return parseInt(digits.join(''), 10); - }, - peg$currPos = 0, - peg$reportedPos = 0, - peg$cachedPos = 0, - peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }, - peg$maxFailPos = 0, - peg$maxFailExpected = [], - peg$silentFails = 0, - peg$result; + function peg$parsepriority() { + var s0, s1, s2; - if ('startRule' in options) { - if (!(options.startRule in peg$startRuleFunctions)) { - throw new Error('Can\'t start parsing from rule "' + options.startRule + '".'); + s0 = peg$currPos; + s1 = []; + if (peg$c66.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c67); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c66.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c67); + } + } + } + } else { + s1 = peg$c0; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c68(s1); } + s0 = s1; - peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + return s0; } - function text() { - return input.substring(peg$reportedPos, peg$currPos); + function peg$parseconstant() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c69(s1); + } + s0 = s1; + + return s0; } - function offset() { - return peg$reportedPos; - } - - function line() { - return peg$computePosDetails(peg$reportedPos).line; - } - - function column() { - return peg$computePosDetails(peg$reportedPos).column; - } - - function expected(description) { - throw peg$buildException(null, [{ type: 'other', description: description }], peg$reportedPos); - } - - function error(message) { - throw peg$buildException(message, null, peg$reportedPos); - } - - function peg$computePosDetails(pos) { - function advance(details, startPos, endPos) { - var p, ch; + function peg$parsepercentage() { + var s0, s1, s2; - for (p = startPos; p < endPos; p++) { - ch = input.charAt(p); - if (ch === '\n') { - if (!details.seenCR) { - details.line++; - } - details.column = 1; - details.seenCR = false; - } else if (ch === '\r' || ch === '\u2028' || ch === '\u2029') { - details.line++; - details.column = 1; - details.seenCR = true; - } else { - details.column++; - details.seenCR = false; + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 37) { + s2 = peg$c70; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c71); } } - } - - if (peg$cachedPos !== pos) { - if (peg$cachedPos > pos) { - peg$cachedPos = 0; - peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }; + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c72(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; } - advance(peg$cachedPosDetails, peg$cachedPos, pos); - peg$cachedPos = pos; - } - - return peg$cachedPosDetails; - } - - function peg$fail(expected) { - if (peg$currPos < peg$maxFailPos) { - return; - } - - if (peg$currPos > peg$maxFailPos) { - peg$maxFailPos = peg$currPos; - peg$maxFailExpected = []; + } else { + peg$currPos = s0; + s0 = peg$c0; } - peg$maxFailExpected.push(expected); + return s0; } - function peg$buildException(message, expected, pos) { - function cleanupExpected(expected) { - var i = 1; + function peg$parseviewPredicate() { + var s0, s1, s2, s3, s4; - expected.sort(function (a, b) { - if (a.description < b.description) { - return -1; - } else if (a.description > b.description) { - return 1; - } else { - return 0; + s0 = peg$currPos; + s1 = peg$parseviewName(); + if (s1 !== peg$FAILED) { + s2 = peg$parseattribute(); + if (s2 === peg$FAILED) { + s2 = peg$c1; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemultiplier(); + if (s3 === peg$FAILED) { + s3 = peg$c1; } - }); - - while (i < expected.length) { - if (expected[i - 1] === expected[i]) { - expected.splice(i, 1); + if (s3 !== peg$FAILED) { + s4 = peg$parseconstantExpr(); + if (s4 === peg$FAILED) { + s4 = peg$c1; + } + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c73(s1, s2, s3, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } } else { - i++; + peg$currPos = s0; + s0 = peg$c0; } + } else { + peg$currPos = s0; + s0 = peg$c0; } + } else { + peg$currPos = s0; + s0 = peg$c0; } - function buildMessage(expected, found) { - function stringEscape(s) { - function hex(ch) { - return ch.charCodeAt(0).toString(16).toUpperCase(); - } - - return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\x08/g, '\\b').replace(/\t/g, '\\t').replace(/\n/g, '\\n').replace(/\f/g, '\\f').replace(/\r/g, '\\r').replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (ch) { - return '\\x0' + hex(ch); - }).replace(/[\x10-\x1F\x80-\xFF]/g, function (ch) { - return '\\x' + hex(ch); - }).replace(/[\u0180-\u0FFF]/g, function (ch) { - return '\\u0' + hex(ch); - }).replace(/[\u1080-\uFFFF]/g, function (ch) { - return '\\u' + hex(ch); - }); - } + return s0; + } - var expectedDescs = new Array(expected.length), - expectedDesc, - foundDesc, - i; + function peg$parseattribute() { + var s0, s1; - for (i = 0; i < expected.length; i++) { - expectedDescs[i] = expected[i].description; + s0 = peg$currPos; + if (input.substr(peg$currPos, 5) === peg$c74) { + s1 = peg$c74; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c75); } - - expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(', ') + ' or ' + expectedDescs[expected.length - 1] : expectedDescs[0]; - - foundDesc = found ? '"' + stringEscape(found) + '"' : 'end of input'; - - return 'Expected ' + expectedDesc + ' but ' + foundDesc + ' found.'; } - - var posDetails = peg$computePosDetails(pos), - found = pos < input.length ? input.charAt(pos) : null; - - if (expected !== null) { - cleanupExpected(expected); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c76(); } - - return new SyntaxError(message !== null ? message : buildMessage(expected, found), expected, found, pos, posDetails.line, posDetails.column); - } - - function peg$parsevisualFormatString() { - var s0, s1, s2, s3, s4, s5, s6, s7; - - s0 = peg$currPos; - s1 = peg$currPos; - s2 = peg$parseorientation(); - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 58) { - s3 = peg$c2; - peg$currPos++; + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c77) { + s1 = peg$c77; + peg$currPos += 6; } else { - s3 = peg$FAILED; + s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c3); + peg$fail(peg$c78); } } - if (s3 !== peg$FAILED) { - s2 = [s2, s3]; - s1 = s2; - } else { - peg$currPos = s1; - s1 = peg$c0; + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c79(); } - } else { - peg$currPos = s1; - s1 = peg$c0; - } - if (s1 === peg$FAILED) { - s1 = peg$c1; - } - if (s1 !== peg$FAILED) { - s2 = peg$currPos; - s3 = peg$parsesuperview(); - if (s3 !== peg$FAILED) { - s4 = peg$parseconnection(); - if (s4 !== peg$FAILED) { - s3 = [s3, s4]; - s2 = s3; + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c80) { + s1 = peg$c80; + peg$currPos += 4; } else { - peg$currPos = s2; - s2 = peg$c0; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c81); + } } - } else { - peg$currPos = s2; - s2 = peg$c0; - } - if (s2 === peg$FAILED) { - s2 = peg$c1; - } - if (s2 !== peg$FAILED) { - s3 = peg$parseview(); - if (s3 !== peg$FAILED) { - s4 = []; - s5 = peg$currPos; - s6 = peg$parseconnection(); - if (s6 !== peg$FAILED) { - s7 = peg$parseview(); - if (s7 !== peg$FAILED) { - s6 = [s6, s7]; - s5 = s6; - } else { - peg$currPos = s5; - s5 = peg$c0; - } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c82(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 7) === peg$c83) { + s1 = peg$c83; + peg$currPos += 7; } else { - peg$currPos = s5; - s5 = peg$c0; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c84); + } } - while (s5 !== peg$FAILED) { - s4.push(s5); - s5 = peg$currPos; - s6 = peg$parseconnection(); - if (s6 !== peg$FAILED) { - s7 = peg$parseview(); - if (s7 !== peg$FAILED) { - s6 = [s6, s7]; - s5 = s6; - } else { - peg$currPos = s5; - s5 = peg$c0; - } - } else { - peg$currPos = s5; - s5 = peg$c0; - } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c85(); } - if (s4 !== peg$FAILED) { - s5 = peg$currPos; - s6 = peg$parseconnection(); - if (s6 !== peg$FAILED) { - s7 = peg$parsesuperview(); - if (s7 !== peg$FAILED) { - s6 = [s6, s7]; - s5 = s6; - } else { - peg$currPos = s5; - s5 = peg$c0; - } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c86) { + s1 = peg$c86; + peg$currPos += 6; } else { - peg$currPos = s5; - s5 = peg$c0; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c87); + } } - if (s5 === peg$FAILED) { - s5 = peg$c1; + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c88(); } - if (s5 !== peg$FAILED) { - s6 = peg$parsecomments(); - if (s6 === peg$FAILED) { - s6 = peg$c1; + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 7) === peg$c89) { + s1 = peg$c89; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c90); + } } - if (s6 !== peg$FAILED) { + if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c5(s1, s2, s3, s4, s5, s6); + s1 = peg$c91(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 8) === peg$c92) { + s1 = peg$c92; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c93); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c94(); + } s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 8) === peg$c95) { + s1 = peg$c95; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c96); + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c97(); + } + s0 = s1; + } } - } else { - peg$currPos = s0; - s0 = peg$c0; } - } else { - peg$currPos = s0; - s0 = peg$c0; } - } else { - peg$currPos = s0; - s0 = peg$c0; } - } else { - peg$currPos = s0; - s0 = peg$c0; } - } else { - peg$currPos = s0; - s0 = peg$c0; } return s0; } - function peg$parseorientation() { - var s0, s1; + function peg$parsemultiplier() { + var s0, s1, s2; s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 72) { - s1 = peg$c6; + if (input.charCodeAt(peg$currPos) === 47) { + s1 = peg$c98; peg$currPos++; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c7); + peg$fail(peg$c99); } } - if (s1 === peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 86) { - s1 = peg$c8; + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c100(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 42) { + s1 = peg$c101; peg$currPos++; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c9); + peg$fail(peg$c102); } } - if (s1 === peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 90) { - s1 = peg$c10; - peg$currPos++; + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c103(s2); + s0 = s1; } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c11); - } + peg$currPos = s0; + s0 = peg$c0; } + } else { + peg$currPos = s0; + s0 = peg$c0; } } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c12(s1); - } - s0 = s1; return s0; } - function peg$parsecomments() { - var s0, s1, s2, s3, s4; + function peg$parseconstantExpr() { + var s0, s1, s2; s0 = peg$currPos; - s1 = []; - if (input.charCodeAt(peg$currPos) === 32) { - s2 = peg$c13; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c35; peg$currPos++; } else { - s2 = peg$FAILED; + s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c14); + peg$fail(peg$c36); } } - while (s2 !== peg$FAILED) { - s1.push(s2); - if (input.charCodeAt(peg$currPos) === 32) { - s2 = peg$c13; - peg$currPos++; + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c104(s2); + s0 = s1; } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c14); - } + peg$currPos = s0; + s0 = peg$c0; } + } else { + peg$currPos = s0; + s0 = peg$c0; } - if (s1 !== peg$FAILED) { - if (input.substr(peg$currPos, 2) === peg$c15) { - s2 = peg$c15; - peg$currPos += 2; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + s1 = peg$c105; + peg$currPos++; } else { - s2 = peg$FAILED; + s1 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c16); + peg$fail(peg$c106); } } - if (s2 !== peg$FAILED) { - s3 = []; - if (input.length > peg$currPos) { - s4 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c17); - } - } - while (s4 !== peg$FAILED) { - s3.push(s4); - if (input.length > peg$currPos) { - s4 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c17); - } - } - } - if (s3 !== peg$FAILED) { - s1 = [s1, s2, s3]; + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c103(s2); s0 = s1; } else { peg$currPos = s0; @@ -3892,87 +2987,78 @@ var parserExt = (function () { peg$currPos = s0; s0 = peg$c0; } - } else { - peg$currPos = s0; - s0 = peg$c0; } return s0; } - function peg$parsesuperview() { - var s0, s1; + function peg$parseviewName() { + var s0, s1, s2, s3, s4; s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 124) { - s1 = peg$c18; + s1 = peg$currPos; + s2 = []; + if (peg$c107.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); peg$currPos++; } else { - s1 = peg$FAILED; + s3 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c19); + peg$fail(peg$c108); } } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c20(); - } - s0 = s1; - - return s0; - } - - function peg$parseview() { - var s0, s1, s2, s3, s4, s5; - - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 91) { - s1 = peg$c21; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c22); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c107.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c108); + } + } } + } else { + s2 = peg$c0; } - if (s1 !== peg$FAILED) { - s2 = peg$parseviewName(); - if (s2 !== peg$FAILED) { - s3 = peg$parsepredicateListWithParens(); - if (s3 === peg$FAILED) { - s3 = peg$c1; + if (s2 !== peg$FAILED) { + s2 = input.substring(s1, peg$currPos); + } + s1 = s2; + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c109.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c110); } - if (s3 !== peg$FAILED) { - s4 = peg$parsecascadedViews(); - if (s4 === peg$FAILED) { - s4 = peg$c1; - } - if (s4 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 93) { - s5 = peg$c23; - peg$currPos++; - } else { - s5 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c24); - } - } - if (s5 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c25(s2, s3, s4); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c109.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; } else { - peg$currPos = s0; - s0 = peg$c0; + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c110); + } } + } + if (s3 !== peg$FAILED) { + s3 = input.substring(s2, peg$currPos); + } + s2 = s3; + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c111(s1, s2); + s0 = s1; } else { peg$currPos = s0; s0 = peg$c0; @@ -3985,63 +3071,76 @@ var parserExt = (function () { return s0; } - function peg$parsecascadedViews() { - var s0, s1, s2, s3, s4, s5; + function peg$parsenumber() { + var s0, s1, s2, s3, s4; s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 58) { - s1 = peg$c2; + s1 = []; + if (peg$c66.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); peg$currPos++; } else { - s1 = peg$FAILED; + s2 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c3); + peg$fail(peg$c67); } } - if (s1 !== peg$FAILED) { - s2 = []; - s3 = peg$currPos; - s4 = peg$parseconnection(); - if (s4 !== peg$FAILED) { - s5 = peg$parseview(); - if (s5 !== peg$FAILED) { - s4 = [s4, s5]; - s3 = s4; + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c66.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; } else { - peg$currPos = s3; - s3 = peg$c0; + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c67); + } } + } + } else { + s1 = peg$c0; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c112; + peg$currPos++; } else { - peg$currPos = s3; - s3 = peg$c0; + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c113); + } } - if (s3 !== peg$FAILED) { - while (s3 !== peg$FAILED) { - s2.push(s3); - s3 = peg$currPos; - s4 = peg$parseconnection(); - if (s4 !== peg$FAILED) { - s5 = peg$parseview(); - if (s5 !== peg$FAILED) { - s4 = [s4, s5]; - s3 = s4; + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c66.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c67); + } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c66.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; } else { - peg$currPos = s3; - s3 = peg$c0; + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$c67); + } } - } else { - peg$currPos = s3; - s3 = peg$c0; } + } else { + s3 = peg$c0; } - } else { - s2 = peg$c0; - } - if (s2 !== peg$FAILED) { - s3 = peg$parseconnection(); if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c26(s2, s3); + s1 = peg$c114(s1, s3); s0 = s1; } else { peg$currPos = s0; @@ -4055,2480 +3154,3442 @@ var parserExt = (function () { peg$currPos = s0; s0 = peg$c0; } - - return s0; - } - - function peg$parseconnection() { - var s0, s1, s2, s3; - - s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c27) { - s1 = peg$c27; - peg$currPos += 2; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c28); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c29(); - } - s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 45) { - s1 = peg$c30; + s1 = []; + if (peg$c66.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); peg$currPos++; } else { - s1 = peg$FAILED; + s2 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c31); + peg$fail(peg$c67); } } - if (s1 !== peg$FAILED) { - s2 = peg$parsepredicateList(); - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 45) { - s3 = peg$c30; + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c66.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); peg$currPos++; } else { - s3 = peg$FAILED; + s2 = peg$FAILED; if (peg$silentFails === 0) { - peg$fail(peg$c31); + peg$fail(peg$c67); } } - if (s3 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c32(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; } } else { - peg$currPos = s0; - s0 = peg$c0; + s1 = peg$c0; } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 45) { - s1 = peg$c30; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c31); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c33(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 126) { - s1 = peg$c34; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c35); - } - } - if (s1 !== peg$FAILED) { - s2 = peg$parseequalSpacingPredicateList(); - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 126) { - s3 = peg$c34; - peg$currPos++; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c35); - } - } - if (s3 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c32(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 126) { - s1 = peg$c34; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c35); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c36(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$c37; - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c38(); - } - s0 = s1; - } - } - } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c115(s1); } + s0 = s1; } return s0; } - function peg$parsepredicateList() { - var s0; - - s0 = peg$parsesimplePredicate(); - if (s0 === peg$FAILED) { - s0 = peg$parsepredicateListWithParens(); + function extend(dst) { + for (var i = 1; i < arguments.length; i++) { + for (var k in arguments[i]) { + dst[k] = arguments[i][k]; + } } - - return s0; + return dst; } - function peg$parsesimplePredicate() { - var s0, s1; + peg$result = peg$startRuleFunction(); - s0 = peg$currPos; - s1 = peg$parsepercentage(); - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c39(s1); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parsenumber(); - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c40(s1); - } - s0 = s1; + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail({ type: "end", description: "end of input" }); } - return s0; + throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); } + } - function peg$parsepredicateListWithParens() { - var s0, s1, s2, s3, s4, s5, s6; - - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 40) { - s1 = peg$c41; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c42); - } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsepredicate(); - if (s2 !== peg$FAILED) { - s3 = []; - s4 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 44) { - s5 = peg$c43; - peg$currPos++; - } else { - s5 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c44); - } - } - if (s5 !== peg$FAILED) { - s6 = peg$parsepredicate(); - if (s6 !== peg$FAILED) { - s5 = [s5, s6]; - s4 = s5; - } else { - peg$currPos = s4; - s4 = peg$c0; - } - } else { - peg$currPos = s4; - s4 = peg$c0; - } - while (s4 !== peg$FAILED) { - s3.push(s4); - s4 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 44) { - s5 = peg$c43; - peg$currPos++; - } else { - s5 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c44); - } - } - if (s5 !== peg$FAILED) { - s6 = peg$parsepredicate(); - if (s6 !== peg$FAILED) { - s5 = [s5, s6]; - s4 = s5; - } else { - peg$currPos = s4; - s4 = peg$c0; - } - } else { - peg$currPos = s4; - s4 = peg$c0; - } - } - if (s3 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 41) { - s4 = peg$c45; - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c46); - } - } - if (s4 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c47(s2, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } + return { + SyntaxError: SyntaxError, + parse: parse + }; +})(); - return s0; - } +var Orientation = { + HORIZONTAL: 1, + VERTICAL: 2, + ZINDEX: 4 +}; - function peg$parsepredicate() { - var s0, s1, s2, s3, s4, s5; +/** + * Helper function that inserts equal spacers (~). + * @private + */ +function _processEqualSpacer(context, stackView) { - s0 = peg$currPos; - s1 = peg$parserelation(); - if (s1 === peg$FAILED) { - s1 = peg$c1; - } - if (s1 !== peg$FAILED) { - s2 = peg$parseobjectOfPredicate(); - if (s2 !== peg$FAILED) { - s3 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 64) { - s4 = peg$c48; - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c49); - } - } - if (s4 !== peg$FAILED) { - s5 = peg$parsepriority(); - if (s5 !== peg$FAILED) { - s4 = [s4, s5]; - s3 = s4; - } else { - peg$currPos = s3; - s3 = peg$c0; - } - } else { - peg$currPos = s3; - s3 = peg$c0; - } - if (s3 === peg$FAILED) { - s3 = peg$c1; - } - if (s3 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c50(s1, s2, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } + // Determine unique name for the spacer + context.equalSpacerIndex = context.equalSpacerIndex || 1; + var name = '_~' + context.lineIndex + ':' + context.equalSpacerIndex + '~'; + if (context.equalSpacerIndex > 1) { - return s0; - } + // Ensure that all spacers have the same width/height + context.constraints.push({ + view1: '_~' + context.lineIndex + ':1~', + attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, + relation: context.relation.relation || Relation.EQU, + view2: name, + attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, + priority: context.relation.priority + }); + } + context.equalSpacerIndex++; - function peg$parseequalSpacingPredicateList() { - var s0, s1, s2, s3, s4, s5, s6; + // Enforce view/proportional width/height + if (context.relation.view || context.relation.multiplier && context.relation.multiplier !== 1) { + context.constraints.push({ + view1: name, + attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, + relation: context.relation.relation || Relation.EQU, + view2: context.relation.view, + attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, + priority: context.relation.priority, + multiplier: context.relation.multiplier + }); + context.relation.multiplier = undefined; + } else if (context.relation.constant) { + context.constraints.push({ + view1: name, + attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, + relation: Relation.EQU, + view2: null, + attr2: Attribute.CONST, + priority: context.relation.priority, + constant: context.relation.constant + }); + context.relation.constant = undefined; + } - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 40) { - s1 = peg$c41; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c42); - } - } - if (s1 !== peg$FAILED) { - s2 = peg$parseequalSpacingPredicate(); - if (s2 !== peg$FAILED) { - s3 = []; - s4 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 44) { - s5 = peg$c43; - peg$currPos++; - } else { - s5 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c44); - } - } - if (s5 !== peg$FAILED) { - s6 = peg$parseequalSpacingPredicate(); - if (s6 !== peg$FAILED) { - s5 = [s5, s6]; - s4 = s5; - } else { - peg$currPos = s4; - s4 = peg$c0; - } - } else { - peg$currPos = s4; - s4 = peg$c0; - } - while (s4 !== peg$FAILED) { - s3.push(s4); - s4 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 44) { - s5 = peg$c43; - peg$currPos++; - } else { - s5 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c44); - } - } - if (s5 !== peg$FAILED) { - s6 = peg$parseequalSpacingPredicate(); - if (s6 !== peg$FAILED) { - s5 = [s5, s6]; - s4 = s5; - } else { - peg$currPos = s4; - s4 = peg$c0; - } - } else { - peg$currPos = s4; - s4 = peg$c0; - } - } - if (s3 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 41) { - s4 = peg$c45; - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c46); - } - } - if (s4 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c47(s2, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } + // Add constraint + switch (context.orientation) { + case Orientation.HORIZONTAL: + context.attr1 = context.view1 !== stackView ? Attribute.RIGHT : Attribute.LEFT; + context.attr2 = Attribute.LEFT; + break; + case Orientation.VERTICAL: + context.attr1 = context.view1 !== stackView ? Attribute.BOTTOM : Attribute.TOP; + context.attr2 = Attribute.TOP; + break; + case Orientation.ZINDEX: + context.attr1 = Attribute.ZINDEX; + context.attr2 = Attribute.ZINDEX; + context.relation.constant = context.view1 !== stackView ? 'default' : 0; + break; + } + context.constraints.push({ + view1: context.view1, + attr1: context.attr1, + relation: context.relation.relation, + view2: name, + attr2: context.attr2, + priority: context.relation.priority + }); + context.view1 = name; +} - return s0; - } +/** + * Helper function that inserts proportional spacers (-12%-). + * @private + */ +function _processProportionalSpacer(context, stackView) { + context.proportionalSpacerIndex = context.proportionalSpacerIndex || 1; + var name = '_-' + context.lineIndex + ':' + context.proportionalSpacerIndex + '-'; + context.proportionalSpacerIndex++; + context.constraints.push({ + view1: name, + attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, + relation: context.relation.relation || Relation.EQU, + view2: context.relation.view, // or relative to the stackView... food for thought + attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, + priority: context.relation.priority, + multiplier: context.relation.multiplier + }); + context.relation.multiplier = undefined; - function peg$parseequalSpacingPredicate() { - var s0, s1, s2, s3, s4, s5; + // Add constraint + switch (context.orientation) { + case Orientation.HORIZONTAL: + context.attr1 = context.view1 !== stackView ? Attribute.RIGHT : Attribute.LEFT; + context.attr2 = Attribute.LEFT; + break; + case Orientation.VERTICAL: + context.attr1 = context.view1 !== stackView ? Attribute.BOTTOM : Attribute.TOP; + context.attr2 = Attribute.TOP; + break; + case Orientation.ZINDEX: + context.attr1 = Attribute.ZINDEX; + context.attr2 = Attribute.ZINDEX; + context.relation.constant = context.view1 !== stackView ? 'default' : 0; + break; + } + context.constraints.push({ + view1: context.view1, + attr1: context.attr1, + relation: context.relation.relation, + view2: name, + attr2: context.attr2, + priority: context.relation.priority + }); + context.view1 = name; +} - s0 = peg$currPos; - s1 = peg$parserelation(); - if (s1 === peg$FAILED) { - s1 = peg$c1; - } - if (s1 !== peg$FAILED) { - s2 = peg$parseobjectOfPredicate(); - if (s2 !== peg$FAILED) { - s3 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 64) { - s4 = peg$c48; - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c49); - } - } - if (s4 !== peg$FAILED) { - s5 = peg$parsepriority(); - if (s5 !== peg$FAILED) { - s4 = [s4, s5]; - s3 = s4; - } else { - peg$currPos = s3; - s3 = peg$c0; - } - } else { - peg$currPos = s3; - s3 = peg$c0; - } - if (s3 === peg$FAILED) { - s3 = peg$c1; - } - if (s3 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c51(s1, s2, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } +/** + * In case of a stack-view, set constraints for opposite orientations + * @private + */ +function _processStackView(context, name, subView) { + var viewName = undefined; + for (var orientation = 1; orientation <= 4; orientation *= 2) { + if (subView.orientations & orientation && subView.stack.orientation !== orientation && !(subView.stack.processedOrientations & orientation)) { + subView.stack.processedOrientations = subView.stack.processedOrientations | orientation; + viewName = viewName || { + name: name, + type: 'stack' + }; + for (var i = 0, j = subView.stack.subViews.length; i < j; i++) { + if (orientation === Orientation.ZINDEX) { + context.constraints.push({ + view1: viewName, + attr1: Attribute.ZINDEX, + relation: Relation.EQU, + view2: subView.stack.subViews[i], + attr2: Attribute.ZINDEX + }); } else { - peg$currPos = s0; - s0 = peg$c0; + context.constraints.push({ + view1: viewName, + attr1: orientation === Orientation.VERTICAL ? Attribute.HEIGHT : Attribute.WIDTH, + relation: Relation.EQU, + view2: subView.stack.subViews[i], + attr2: orientation === Orientation.VERTICAL ? Attribute.HEIGHT : Attribute.WIDTH + }); + context.constraints.push({ + view1: viewName, + attr1: orientation === Orientation.VERTICAL ? Attribute.TOP : Attribute.LEFT, + relation: Relation.EQU, + view2: subView.stack.subViews[i], + attr2: orientation === Orientation.VERTICAL ? Attribute.TOP : Attribute.LEFT + }); } - } else { - peg$currPos = s0; - s0 = peg$c0; } - - return s0; } + } +} - function peg$parserelation() { - var s0, s1; - - s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c52) { - s1 = peg$c52; - peg$currPos += 2; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c53); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c54(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c55) { - s1 = peg$c55; - peg$currPos += 2; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c56); - } +/** + * Recursive helper function that processes the cascaded data. + * @private + */ +function _processCascade(context, cascade, parentItem) { + var stackView = parentItem ? parentItem.view : null; + var subViews = []; + var subView = undefined; + if (stackView) { + cascade.push({ view: stackView }); + } + for (var i = 0; i < cascade.length; i++) { + context.item = cascade[i]; + if (!Array.isArray(context.item) && context.item.hasOwnProperty('view')) { + if (context.item.view !== stackView) { + subViews.push(context.item.view); + subView = context.subViews[context.item.view]; + if (!subView) { + subView = { orientations: 0 }; + context.subViews[context.item.view] = subView; } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c57(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c58) { - s1 = peg$c58; - peg$currPos += 2; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c59); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c60(); - } - s0 = s1; + subView.orientations = subView.orientations | context.orientation; + if (subView.stack) { + _processStackView(context, context.item.view, subView); } } - - return s0; - } - - function peg$parseobjectOfPredicate() { - var s0; - - s0 = peg$parsepercentage(); - if (s0 === peg$FAILED) { - s0 = peg$parseconstant(); - if (s0 === peg$FAILED) { - s0 = peg$parseviewPredicate(); + context.view1 = context.view2; + context.view2 = context.item.view; + if (context.view1 !== undefined && context.view2 !== undefined && context.relation) { + if (context.relation.equalSpacing) { + _processEqualSpacer(context, stackView); } - } - - return s0; - } - - function peg$parsepriority() { - var s0, s1, s2; - - s0 = peg$currPos; - s1 = []; - if (peg$c61.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c62); + if (context.relation.multiplier) { + _processProportionalSpacer(context, stackView); } - } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$c61.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c62); - } + if (context.relation.relation !== 'none') { + switch (context.orientation) { + case Orientation.HORIZONTAL: + context.attr1 = context.view1 !== stackView ? Attribute.RIGHT : Attribute.LEFT; + context.attr2 = context.view2 !== stackView ? Attribute.LEFT : Attribute.RIGHT; + break; + case Orientation.VERTICAL: + context.attr1 = context.view1 !== stackView ? Attribute.BOTTOM : Attribute.TOP; + context.attr2 = context.view2 !== stackView ? Attribute.TOP : Attribute.BOTTOM; + break; + case Orientation.ZINDEX: + context.attr1 = Attribute.ZINDEX; + context.attr2 = Attribute.ZINDEX; + context.relation.constant = context.view1 !== stackView ? 'default' : 0; + break; } + context.constraints.push({ + view1: context.view1, + attr1: context.attr1, + relation: context.relation.relation, + view2: context.view2, + attr2: context.attr2, + multiplier: context.relation.multiplier, + constant: context.relation.constant === 'default' || !context.relation.constant ? context.relation.constant : -context.relation.constant, + priority: context.relation.priority + //,variable: context.relation.variable + }); } - } else { - s1 = peg$c0; - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c63(s1); } - s0 = s1; - - return s0; - } - - function peg$parseconstant() { - var s0, s1; + context.relation = undefined; - s0 = peg$currPos; - s1 = peg$parsenumber(); - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c64(s1); + // process view size constraints + if (context.item.constraints) { + for (var n = 0; n < context.item.constraints.length; n++) { + context.attr1 = context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT; + context.attr2 = context.item.constraints[n].view || context.item.constraints[n].multiplier ? context.item.constraints[n].attribute || context.attr1 : context.item.constraints[n].variable ? Attribute.VARIABLE : Attribute.CONST; + context.constraints.push({ + view1: context.item.view, + attr1: context.attr1, + relation: context.item.constraints[n].relation, + view2: context.item.constraints[n].view, + attr2: context.attr2, + multiplier: context.item.constraints[n].multiplier, + constant: context.item.constraints[n].constant, + priority: context.item.constraints[n].priority + //,variable: context.item.constraints[n].variable + }); + } } - s0 = s1; - - return s0; - } - - function peg$parsepercentage() { - var s0, s1, s2; - s0 = peg$currPos; - s1 = peg$parsenumber(); - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 37) { - s2 = peg$c65; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c66); - } - } - if (s2 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c67(s1); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; + // Process cascaded data (child stack-views) + if (context.item.cascade) { + _processCascade(context, context.item.cascade, context.item); } + } else { + context.relation = context.item[0]; + } + } - return s0; + if (stackView) { + subView = context.subViews[stackView]; + if (!subView) { + subView = { orientations: context.orientation }; + context.subViews[stackView] = subView; + } else if (subView.stack) { + var err = new Error('A stack named "' + stackView + '" has already been created'); + err.column = parentItem.$parserOffset + 1; + throw err; } + subView.stack = { + orientation: context.orientation, + processedOrientations: context.orientation, + subViews: subViews + }; + _processStackView(context, stackView, subView); + } +} - function peg$parseviewPredicate() { - var s0, s1, s2, s3, s4; +var metaInfoCategories = ['viewport', 'spacing', 'colors', 'shapes', 'widths', 'heights']; - s0 = peg$currPos; - s1 = peg$parseviewName(); - if (s1 !== peg$FAILED) { - s2 = peg$parseattribute(); - if (s2 === peg$FAILED) { - s2 = peg$c1; - } - if (s2 !== peg$FAILED) { - s3 = peg$parsemultiplier(); - if (s3 === peg$FAILED) { - s3 = peg$c1; - } - if (s3 !== peg$FAILED) { - s4 = peg$parseconstantExpr(); - if (s4 === peg$FAILED) { - s4 = peg$c1; - } - if (s4 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c68(s1, s2, s3, s4); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } +/** + * VisualFormat + * + * @namespace VisualFormat + */ - return s0; - } +var VisualFormat = (function () { + function VisualFormat() { + _classCallCheck(this, VisualFormat); + } - function peg$parseattribute() { - var s0, s1; + _createClass(VisualFormat, null, [{ + key: 'parseLine', - s0 = peg$currPos; - if (input.substr(peg$currPos, 5) === peg$c69) { - s1 = peg$c69; - peg$currPos += 5; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c70); - } + /** + * Parses a single line of vfl into an array of constraint definitions. + * + * When the visual-format could not be succesfully parsed an exception is thrown containing + * additional info about the parse error and column position. + * + * @param {String} visualFormat Visual format string (cannot contain line-endings!). + * @param {Object} [options] Configuration options. + * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false). + * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`). + * @param {Number} [options.lineIndex] Line-index used when auto generating equal-spacing constraints. + * @return {Array} Array of constraint definitions. + */ + value: function parseLine(visualFormat, options) { + if (visualFormat.length === 0 || options && options.extended && visualFormat.indexOf('//') === 0) { + return []; } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c71(); + var res = options && options.extended ? parserExt.parse(visualFormat) : parser.parse(visualFormat); + if (options && options.outFormat === 'raw') { + return [res]; } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 6) === peg$c72) { - s1 = peg$c72; - peg$currPos += 6; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c73); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c74(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 4) === peg$c75) { - s1 = peg$c75; - peg$currPos += 4; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c76); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c77(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 7) === peg$c78) { - s1 = peg$c78; - peg$currPos += 7; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c79); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c80(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 6) === peg$c81) { - s1 = peg$c81; - peg$currPos += 6; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c82); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c83(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 7) === peg$c84) { - s1 = peg$c84; - peg$currPos += 7; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c85); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c86(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 8) === peg$c87) { - s1 = peg$c87; - peg$currPos += 8; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c88); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c89(); - } - s0 = s1; - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 8) === peg$c90) { - s1 = peg$c90; - peg$currPos += 8; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c91); - } - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c92(); - } - s0 = s1; - } - } - } - } - } - } + var context = { + constraints: [], + lineIndex: (options ? options.lineIndex : undefined) || 1, + subViews: (options ? options.subViews : undefined) || {} + }; + switch (res.orientation) { + case 'horizontal': + context.orientation = Orientation.HORIZONTAL; + context.horizontal = true; + _processCascade(context, res.cascade, null); + break; + case 'vertical': + context.orientation = Orientation.VERTICAL; + _processCascade(context, res.cascade, null); + break; + case 'horzvert': + context.orientation = Orientation.HORIZONTAL; + context.horizontal = true; + _processCascade(context, res.cascade, null); + context = { + constraints: context.constraints, + lineIndex: context.lineIndex, + subViews: context.subViews, + orientation: Orientation.VERTICAL + }; + _processCascade(context, res.cascade, null); + break; + case 'zIndex': + context.orientation = Orientation.ZINDEX; + _processCascade(context, res.cascade, null); + break; } - - return s0; + return context.constraints; } - function peg$parsemultiplier() { - var s0, s1, s2; - - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 47) { - s1 = peg$c93; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c94); - } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsenumber(); - if (s2 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c95(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 42) { - s1 = peg$c96; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c97); - } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsenumber(); - if (s2 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c98(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; + /** + * Parses one or more visual format strings into an array of constraint definitions. + * + * When the visual-format could not be succesfully parsed an exception is thrown containing + * additional info about the parse error and column position. + * + * @param {String|Array} visualFormat One or more visual format strings. + * @param {Object} [options] Configuration options. + * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false). + * @param {Boolean} [options.strict] When set to false trims any leading/trailing spaces and ignores empty lines (default: true). + * @param {String} [options.lineSeperator] String that defines the end of a line (default `\n`). + * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`). + * @return {Array} Array of constraint definitions. + */ + }, { + key: 'parse', + value: function parse(visualFormat, options) { + var lineSeperator = options && options.lineSeperator ? options.lineSeperator : '\n'; + if (!Array.isArray(visualFormat) && visualFormat.indexOf(lineSeperator) < 0) { + try { + return this.parseLine(visualFormat, options); + } catch (err) { + err.source = visualFormat; + throw err; } } - return s0; - } - - function peg$parseconstantExpr() { - var s0, s1, s2; - - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 45) { - s1 = peg$c30; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c31); - } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsenumber(); - if (s2 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c99(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.charCodeAt(peg$currPos) === 43) { - s1 = peg$c100; - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c101); - } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsenumber(); - if (s2 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c98(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; + // Decompose visual-format into an array of strings, and within those strings + // search for line-endings, and treat each line as a seperate visual-format. + visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat]; + var lines = undefined; + var constraints = []; + var lineIndex = 0; + var line = undefined; + var parseOptions = { + lineIndex: lineIndex, + extended: options && options.extended, + strict: options && options.strict !== undefined ? options.strict : true, + outFormat: options ? options.outFormat : undefined, + subViews: {} + }; + try { + for (var i = 0; i < visualFormat.length; i++) { + lines = visualFormat[i].split(lineSeperator); + for (var j = 0; j < lines.length; j++) { + line = lines[j]; + lineIndex++; + parseOptions.lineIndex = lineIndex; + if (!parseOptions.strict) { + line = line.trim(); + } + if (parseOptions.strict || line.length) { + constraints = constraints.concat(this.parseLine(line, parseOptions)); + } } - } else { - peg$currPos = s0; - s0 = peg$c0; } + } catch (err) { + err.source = line; + err.line = lineIndex; + throw err; } - - return s0; + return constraints; } - function peg$parseviewName() { - var s0, s1, s2, s3, s4; - - s0 = peg$currPos; - s1 = peg$currPos; - s2 = []; - if (peg$c102.test(input.charAt(peg$currPos))) { - s3 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c103); - } - } - if (s3 !== peg$FAILED) { - while (s3 !== peg$FAILED) { - s2.push(s3); - if (peg$c102.test(input.charAt(peg$currPos))) { - s3 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c103); + /** + * Parses meta information from the comments in the VFL. + * + * Additional meta information can be specified in the comments + * for previewing and rendering purposes. For instance, the view-port + * aspect-ratio, sub-view widths and colors, can be specified. The + * following example renders three colored circles in the visual-format editor: + * + * ```vfl + * //viewport aspect-ratio:3/1 max-height:300 + * //colors red:#FF0000 green:#00FF00 blue:#0000FF + * //shapes red:circle green:circle blue:circle + * H:|-[row:[red(green,blue)]-[green]-[blue]]-| + * V:|[row]| + * ``` + * + * Supported categories and properties: + * + * |Category|Property|Example| + * |--------|--------|-------| + * |`viewport`|`aspect-ratio:{width}/{height}`|`//viewport aspect-ratio:16/9`| + * ||`width:[{number}/intrinsic]`|`//viewport width:10`| + * ||`height:[{number}/intrinsic]`|`//viewport height:intrinsic`| + * ||`min-width:{number}`| + * ||`max-width:{number}`| + * ||`min-height:{number}`| + * ||`max-height:{number}`| + * |`spacing`|`[{number}/array]`|`//spacing:8` or `//spacing:[10, 20, 5]`| + * |`widths`|`{view-name}:[{number}/intrinsic]`|`//widths subview1:100`| + * |`heights`|`{view-name}:[{number}/intrinsic]`|`//heights subview1:intrinsic`| + * |`colors`|`{view-name}:{color}`|`//colors redview:#FF0000 blueview:#00FF00`| + * |`shapes`|`{view-name}:[circle/square]`|`//shapes avatar:circle`| + * + * @param {String|Array} visualFormat One or more visual format strings. + * @param {Object} [options] Configuration options. + * @param {String} [options.lineSeperator] String that defines the end of a line (default `\n`). + * @param {String} [options.prefix] When specified, also processes the categories using that prefix (e.g. "-dev-viewport max-height:10"). + * @return {Object} meta-info + */ + }, { + key: 'parseMetaInfo', + value: function parseMetaInfo(visualFormat, options) { + var lineSeperator = options && options.lineSeperator ? options.lineSeperator : '\n'; + var prefix = options ? options.prefix : undefined; + visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat]; + var metaInfo = {}; + var key; + for (var k = 0; k < visualFormat.length; k++) { + var lines = visualFormat[k].split(lineSeperator); + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + for (var c = 0; c < metaInfoCategories.length; c++) { + for (var s = 0; s < (prefix ? 2 : 1); s++) { + var category = metaInfoCategories[c]; + var prefixedCategory = (s === 0 ? '' : prefix) + category; + if (line.indexOf('//' + prefixedCategory + ' ') === 0) { + var items = line.substring(3 + prefixedCategory.length).split(' '); + for (var j = 0; j < items.length; j++) { + var item = items[j].split(':'); + metaInfo[category] = metaInfo[category] || {}; + metaInfo[category][item[0]] = item.length > 1 ? item[1] : ''; + } + } else if (line.indexOf('//' + prefixedCategory + ':') === 0) { + metaInfo[category] = line.substring(3 + prefixedCategory.length); + } } } } - } else { - s2 = peg$c0; } - if (s2 !== peg$FAILED) { - s2 = input.substring(s1, peg$currPos); - } - s1 = s2; - if (s1 !== peg$FAILED) { - s2 = peg$currPos; - s3 = []; - if (peg$c104.test(input.charAt(peg$currPos))) { - s4 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c105); - } - } - while (s4 !== peg$FAILED) { - s3.push(s4); - if (peg$c104.test(input.charAt(peg$currPos))) { - s4 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c105); - } - } + if (metaInfo.viewport) { + var viewport = metaInfo.viewport; + var aspectRatio = viewport['aspect-ratio']; + if (aspectRatio) { + aspectRatio = aspectRatio.split('/'); + viewport['aspect-ratio'] = parseInt(aspectRatio[0]) / parseInt(aspectRatio[1]); } - if (s3 !== peg$FAILED) { - s3 = input.substring(s2, peg$currPos); + if (viewport.height !== undefined) { + viewport.height = viewport.height === 'intrinsic' ? true : parseInt(viewport.height); } - s2 = s3; - if (s2 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c106(s1, s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; + if (viewport.width !== undefined) { + viewport.width = viewport.width === 'intrinsic' ? true : parseInt(viewport.width); } - } else { - peg$currPos = s0; - s0 = peg$c0; - } - - return s0; - } - - function peg$parsenumber() { - var s0, s1, s2, s3, s4; - - s0 = peg$currPos; - s1 = []; - if (peg$c61.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c62); + if (viewport['max-height'] !== undefined) { + viewport['max-height'] = parseInt(viewport['max-height']); } - } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$c61.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c62); - } - } + if (viewport['max-width'] !== undefined) { + viewport['max-width'] = parseInt(viewport['max-width']); } - } else { - s1 = peg$c0; - } - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 46) { - s2 = peg$c107; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c108); - } + if (viewport['min-height'] !== undefined) { + viewport['min-height'] = parseInt(viewport['min-height']); } - if (s2 !== peg$FAILED) { - s3 = []; - if (peg$c61.test(input.charAt(peg$currPos))) { - s4 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c62); - } - } - if (s4 !== peg$FAILED) { - while (s4 !== peg$FAILED) { - s3.push(s4); - if (peg$c61.test(input.charAt(peg$currPos))) { - s4 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c62); - } - } - } - } else { - s3 = peg$c0; - } - if (s3 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c109(s1, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$c0; - } - } else { - peg$currPos = s0; - s0 = peg$c0; + if (viewport['min-width'] !== undefined) { + viewport['min-width'] = parseInt(viewport['min-width']); } - } else { - peg$currPos = s0; - s0 = peg$c0; } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = []; - if (peg$c61.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c62); + if (metaInfo.widths) { + for (key in metaInfo.widths) { + var width = metaInfo.widths[key] === 'intrinsic' ? true : parseInt(metaInfo.widths[key]); + metaInfo.widths[key] = width; + if (width === undefined || isNaN(width)) { + delete metaInfo.widths[key]; } } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$c61.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$c62); - } - } + } + if (metaInfo.heights) { + for (key in metaInfo.heights) { + var height = metaInfo.heights[key] === 'intrinsic' ? true : parseInt(metaInfo.heights[key]); + metaInfo.heights[key] = height; + if (height === undefined || isNaN(height)) { + delete metaInfo.heights[key]; } - } else { - s1 = peg$c0; - } - if (s1 !== peg$FAILED) { - peg$reportedPos = s0; - s1 = peg$c110(s1); } - s0 = s1; } - - return s0; - } - - function extend(dst) { - for (var i = 1; i < arguments.length; i++) { - for (var k in arguments[i]) { - dst[k] = arguments[i][k]; + if (metaInfo.spacing) { + var value = JSON.parse(metaInfo.spacing); + metaInfo.spacing = value; + if (value === undefined || isNaN(value)) { + delete metaInfo.spacing; } } - return dst; + return metaInfo; } + }]); - peg$result = peg$startRuleFunction(); - - if (peg$result !== peg$FAILED && peg$currPos === input.length) { - return peg$result; - } else { - if (peg$result !== peg$FAILED && peg$currPos < input.length) { - peg$fail({ type: 'end', description: 'end of input' }); - } + return VisualFormat; +})(); - throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); +var SubView = (function () { + function SubView(options) { + _classCallCheck(this, SubView); + + this._name = options.name; + this._type = options.type; + this._solver = options.solver; + this._attr = {}; + if (!options.name) { + if (false) { + this._attr[Attribute.LEFT] = new c.Variable(); + this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.LEFT], c.Strength.required)); + this._attr[Attribute.TOP] = new c.Variable(); + this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.TOP], c.Strength.required)); + this._attr[Attribute.ZINDEX] = new c.Variable(); + this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.ZINDEX], c.Strength.required)); + } else { + this._attr[Attribute.LEFT] = new kiwi.Variable(); + this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.LEFT], kiwi.Operator.Eq, 0)); + this._attr[Attribute.TOP] = new kiwi.Variable(); + this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.TOP], kiwi.Operator.Eq, 0)); + this._attr[Attribute.ZINDEX] = new kiwi.Variable(); + this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.ZINDEX], kiwi.Operator.Eq, 0)); + } } } - return { - SyntaxError: SyntaxError, - parse: parse - }; -})(); + _createClass(SubView, [{ + key: 'toJSON', + value: function toJSON() { + return { + name: this.name, + left: this.left, + top: this.top, + width: this.width, + height: this.height + }; + } + }, { + key: 'toString', + value: function toString() { + JSON.stringify(this.toJSON(), undefined, 2); + } -var Orientation = { - HORIZONTAL: 1, - VERTICAL: 2, - ZINDEX: 4 -}; + /** + * Name of the sub-view. + * @readonly + * @type {String} + */ + }, { + key: 'getValue', -/** - * Helper function that inserts equal spacers (~). - * @private - */ -function _processEqualSpacer(context, stackView) { + /** + * Gets the value of one of the attributes. + * + * @param {String|Attribute} attr Attribute name (e.g. 'right', 'centerY', Attribute.TOP). + * @return {Number} value or `undefined` + */ + value: function getValue(attr) { + return this._attr[attr] ? this._attr[attr].value() : undefined; + } - // Determine unique name for the spacer - context.equalSpacerIndex = context.equalSpacerIndex || 1; - var name = '_~' + context.lineIndex + ':' + context.equalSpacerIndex + '~'; - if (context.equalSpacerIndex > 1) { + /** + * @private + */ + }, { + key: '_getAttr', + value: function _getAttr(attr) { + if (this._attr[attr]) { + return this._attr[attr]; + } + this._attr[attr] = false ? new c.Variable() : new kiwi.Variable(); + switch (attr) { + case Attribute.RIGHT: + this._getAttr(Attribute.LEFT); + this._getAttr(Attribute.WIDTH); + if (false) { + this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], this._attr[Attribute.WIDTH]))); + } else { + this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH]))); + } + break; + case Attribute.BOTTOM: + this._getAttr(Attribute.TOP); + this._getAttr(Attribute.HEIGHT); + if (false) { + this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], this._attr[Attribute.HEIGHT]))); + } else { + this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT]))); + } + break; + case Attribute.CENTERX: + this._getAttr(Attribute.LEFT); + this._getAttr(Attribute.WIDTH); + if (false) { + this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], c.divide(this._attr[Attribute.WIDTH], 2)))); + } else { + this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH].divide(2)))); + } + break; + case Attribute.CENTERY: + this._getAttr(Attribute.TOP); + this._getAttr(Attribute.HEIGHT); + if (false) { + this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], c.divide(this._attr[Attribute.HEIGHT], 2)))); + } else { + this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT].divide(2)))); + } + break; + } + if (!false) { + this._solver.updateVariables(); + } + return this._attr[attr]; + } - // Ensure that all spacers have the same width/height - context.constraints.push({ - view1: '_~' + context.lineIndex + ':1~', - attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, - relation: context.relation.relation || Relation.EQU, - view2: name, - attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, - priority: context.relation.priority - }); - } - context.equalSpacerIndex++; + /** + * @private + */ + }, { + key: '_getAttrValue', + value: function _getAttrValue(attr) { + if (false) { + return this._getAttr(attr).value; + } else { + return this._getAttr(attr).value(); + } + } + }, { + key: 'name', + get: function get() { + return this._name; + } - // Enforce proportional width/height - if (context.relation.multiplier && context.relation.multiplier !== 1) { - context.constraints.push({ - view1: name, - attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, - relation: context.relation.relation || Relation.EQU, - view2: null, - attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, - priority: context.relation.priority, - multiplier: context.relation.multiplier - }); - context.relation.multiplier = undefined; - } else if (context.relation.constant) { - context.constraints.push({ - view1: name, - attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, - relation: Relation.EQU, - view2: null, - attr2: Attribute.CONST, - priority: context.relation.priority, - constant: context.relation.constant - }); - context.relation.constant = undefined; - } + /** + * Left value (`Attribute.LEFT`). + * @readonly + * @type {Number} + */ + }, { + key: 'left', + get: function get() { + return this._getAttrValue(Attribute.LEFT); + } - // Add constraint - switch (context.orientation) { - case Orientation.HORIZONTAL: - context.attr1 = context.view1 !== stackView ? Attribute.RIGHT : Attribute.LEFT; - context.attr2 = Attribute.LEFT; - break; - case Orientation.VERTICAL: - context.attr1 = context.view1 !== stackView ? Attribute.BOTTOM : Attribute.TOP; - context.attr2 = Attribute.TOP; - break; - case Orientation.ZINDEX: - context.attr1 = Attribute.ZINDEX; - context.attr2 = Attribute.ZINDEX; - context.relation.constant = context.view1 !== stackView ? 'default' : 0; - break; - } - context.constraints.push({ - view1: context.view1, - attr1: context.attr1, - relation: context.relation.relation, - view2: name, - attr2: context.attr2, - priority: context.relation.priority - }); - context.view1 = name; -} + /** + * Right value (`Attribute.RIGHT`). + * @readonly + * @type {Number} + */ + }, { + key: 'right', + get: function get() { + return this._getAttrValue(Attribute.RIGHT); + } -/** - * Helper function that inserts proportional spacers (-12%-). - * @private - */ -function _processProportionalSpacer(context, stackView) { - context.proportionalSpacerIndex = context.proportionalSpacerIndex || 1; - var name = '_-' + context.lineIndex + ':' + context.proportionalSpacerIndex + '-'; - context.proportionalSpacerIndex++; - context.constraints.push({ - view1: name, - attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, - relation: context.relation.relation || Relation.EQU, - view2: null, // or relative to the stackView... food for thought - attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT, - priority: context.relation.priority, - multiplier: context.relation.multiplier - }); - context.relation.multiplier = undefined; + /** + * Width value (`Attribute.WIDTH`). + * @type {Number} + */ + }, { + key: 'width', + get: function get() { + return this._getAttrValue(Attribute.WIDTH); + } - // Add constraint - switch (context.orientation) { - case Orientation.HORIZONTAL: - context.attr1 = context.view1 !== stackView ? Attribute.RIGHT : Attribute.LEFT; - context.attr2 = Attribute.LEFT; - break; - case Orientation.VERTICAL: - context.attr1 = context.view1 !== stackView ? Attribute.BOTTOM : Attribute.TOP; - context.attr2 = Attribute.TOP; - break; - case Orientation.ZINDEX: - context.attr1 = Attribute.ZINDEX; - context.attr2 = Attribute.ZINDEX; - context.relation.constant = context.view1 !== stackView ? 'default' : 0; - break; - } - context.constraints.push({ - view1: context.view1, - attr1: context.attr1, - relation: context.relation.relation, - view2: name, - attr2: context.attr2, - priority: context.relation.priority - }); - context.view1 = name; -} + /** + * Height value (`Attribute.HEIGHT`). + * @readonly + * @type {Number} + */ + }, { + key: 'height', + get: function get() { + return this._getAttrValue(Attribute.HEIGHT); + } -/** - * In case of a stack-view, set constraints for opposite orientations - * @private - */ -function _processStackView(context, name, subView) { - var viewName = undefined; - for (var orientation = 1; orientation <= 4; orientation *= 2) { - if (subView.orientations & orientation && subView.stack.orientation !== orientation && !(subView.stack.processedOrientations & orientation)) { - subView.stack.processedOrientations = subView.stack.processedOrientations | orientation; - viewName = viewName || { - name: name, - type: 'stack' - }; - for (var i = 0, j = subView.stack.subViews.length; i < j; i++) { - if (orientation === Orientation.ZINDEX) { - context.constraints.push({ - view1: viewName, - attr1: Attribute.ZINDEX, - relation: Relation.EQU, - view2: subView.stack.subViews[i], - attr2: Attribute.ZINDEX - }); + /** + * Intrinsic width of the sub-view. + * + * Use this property to explicitely set the width of the sub-view, e.g.: + * ```javascript + * var view = new AutoLayout.View(AutoLayout.VisualFormat.parse('|[child1][child2]|'), { + * width: 500 + * }); + * view.subViews.child1.intrinsicWidth = 100; + * console.log('child2 width: ' + view.subViews.child2.width); // 400 + * ``` + * + * @type {Number} + */ + }, { + key: 'intrinsicWidth', + get: function get() { + return this._intrinsicWidth; + }, + set: function set(value) { + if (value !== undefined && value !== this._intrinsicWidth) { + var attr = this._getAttr(Attribute.WIDTH); + if (this._intrinsicWidth === undefined) { + if (false) { + this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000)); + } else { + this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000)); + } + } + this._intrinsicWidth = value; + this._solver.suggestValue(attr, value); + if (false) { + this._solver.resolve(); } else { - context.constraints.push({ - view1: viewName, - attr1: orientation === Orientation.VERTICAL ? Attribute.HEIGHT : Attribute.WIDTH, - relation: Relation.EQU, - view2: subView.stack.subViews[i], - attr2: orientation === Orientation.VERTICAL ? Attribute.HEIGHT : Attribute.WIDTH - }); - context.constraints.push({ - view1: viewName, - attr1: orientation === Orientation.VERTICAL ? Attribute.TOP : Attribute.LEFT, - relation: Relation.EQU, - view2: subView.stack.subViews[i], - attr2: orientation === Orientation.VERTICAL ? Attribute.TOP : Attribute.LEFT - }); + this._solver.updateVariables(); } } } - } -} -/** - * Recursive helper function that processes the cascaded data. - * @private - */ -function _processCascade(context, cascade, stackView) { - var subViews = []; - var subView = undefined; - if (stackView) { - cascade.push({ view: stackView }); - } - for (var i = 0; i < cascade.length; i++) { - context.item = cascade[i]; - if (!Array.isArray(context.item) && context.item.hasOwnProperty('view')) { - context.view1 = context.view2; - context.view2 = context.item.view; - if (context.view1 !== undefined && context.view2 !== undefined && context.relation) { - if (context.item.view !== stackView) { - subViews.push(context.item.view); - subView = context.subViews[context.item.view]; - if (!subView) { - subView = { orientations: 0 }; - context.subViews[context.item.view] = subView; - } - subView.orientations = subView.orientations | context.orientation; - if (subView.stack) { - _processStackView(context, context.item.view, subView); - } - } - if (context.relation.equalSpacing) { - _processEqualSpacer(context, stackView); - } - if (context.relation.multiplier) { - _processProportionalSpacer(context, stackView); - } - if (context.relation.relation !== 'none') { - switch (context.orientation) { - case Orientation.HORIZONTAL: - context.attr1 = context.view1 !== stackView ? Attribute.RIGHT : Attribute.LEFT; - context.attr2 = context.view2 !== stackView ? Attribute.LEFT : Attribute.RIGHT; - break; - case Orientation.VERTICAL: - context.attr1 = context.view1 !== stackView ? Attribute.BOTTOM : Attribute.TOP; - context.attr2 = context.view2 !== stackView ? Attribute.TOP : Attribute.BOTTOM; - break; - case Orientation.ZINDEX: - context.attr1 = Attribute.ZINDEX; - context.attr2 = Attribute.ZINDEX; - context.relation.constant = context.view1 !== stackView ? 'default' : 0; - break; + /** + * Intrinsic height of the sub-view. + * + * See `intrinsicWidth`. + * + * @type {Number} + */ + }, { + key: 'intrinsicHeight', + get: function get() { + return this._intrinsicHeight; + }, + set: function set(value) { + if (value !== undefined && value !== this._intrinsicHeight) { + var attr = this._getAttr(Attribute.HEIGHT); + if (this._intrinsicHeight === undefined) { + if (false) { + this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000)); + } else { + this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000)); } - context.constraints.push({ - view1: context.view1, - attr1: context.attr1, - relation: context.relation.relation, - view2: context.view2, - attr2: context.attr2, - multiplier: context.relation.multiplier, - constant: context.relation.constant === 'default' || !context.relation.constant ? context.relation.constant : -context.relation.constant, - priority: context.relation.priority - //,variable: context.relation.variable - }); } - } - context.relation = undefined; - - // process view size constraints - if (context.item.constraints) { - for (var n = 0; n < context.item.constraints.length; n++) { - context.attr1 = context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT; - context.attr2 = context.item.constraints[n].view || context.item.constraints[n].multiplier ? context.item.constraints[n].attribute || context.attr1 : context.item.constraints[n].variable ? Attribute.VARIABLE : Attribute.CONST; - context.constraints.push({ - view1: context.item.view, - attr1: context.attr1, - relation: context.item.constraints[n].relation, - view2: context.item.constraints[n].view, - attr2: context.attr2, - multiplier: context.item.constraints[n].multiplier, - constant: context.item.constraints[n].constant, - priority: context.item.constraints[n].priority - //,variable: context.item.constraints[n].variable - }); + this._intrinsicHeight = value; + this._solver.suggestValue(attr, value); + if (false) { + this._solver.resolve(); + } else { + this._solver.updateVariables(); } } - - // Process cascaded data (child stack-views) - if (context.item.cascade) { - _processCascade(context, context.item.cascade, context.item.view); - } - } else { - context.relation = context.item[0]; } - } - if (stackView) { - subView = context.subViews[stackView]; - if (subView.stack) { - throw new Error('A stack with name "' + stackView + '"" already exists'); + /** + * Top value (`Attribute.TOP`). + * @readonly + * @type {Number} + */ + }, { + key: 'top', + get: function get() { + return this._getAttrValue(Attribute.TOP); } - subView.stack = { - orientation: context.orientation, - processedOrientations: context.orientation, - subViews: subViews - }; - _processStackView(context, stackView, subView); - } -} - -var metaInfoCategories = ['viewport', 'spacing', 'colors', 'shapes', 'widths', 'heights']; -/** - * VisualFormat - * - * @namespace VisualFormat - */ + /** + * Bottom value (`Attribute.BOTTOM`). + * @readonly + * @type {Number} + */ + }, { + key: 'bottom', + get: function get() { + return this._getAttrValue(Attribute.BOTTOM); + } -var VisualFormat = (function () { - function VisualFormat() { - _classCallCheck(this, VisualFormat); - } + /** + * Horizontal center (`Attribute.CENTERX`). + * @readonly + * @type {Number} + */ + }, { + key: 'centerX', + get: function get() { + return this._getAttrValue(Attribute.CENTERX); + } - _createClass(VisualFormat, null, [{ - key: 'parseLine', + /** + * Vertical center (`Attribute.CENTERY`). + * @readonly + * @type {Number} + */ + }, { + key: 'centerY', + get: function get() { + return this._getAttrValue(Attribute.CENTERY); + } /** - * Parses a single line of vfl into an array of constraint definitions. - * - * When the visual-format could not be succesfully parsed an exception is thrown containing - * additional info about the parse error and column position. - * - * @param {String} visualFormat Visual format string (cannot contain line-endings!). - * @param {Object} [options] Configuration options. - * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false). - * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`). - * @param {Number} [options.lineIndex] Line-index used when auto generating equal-spacing constraints. - * @return {Array} Array of constraint definitions. + * Z-index (`Attribute.ZINDEX`). + * @readonly + * @type {Number} */ - value: function parseLine(visualFormat, options) { - if (visualFormat.length === 0 || options && options.extended && visualFormat.indexOf('//') === 0) { - return []; - } - var res = options && options.extended ? parserExt.parse(visualFormat) : parser.parse(visualFormat); - if (options && options.outFormat === 'raw') { - return [res]; - } - var context = { - constraints: [], - lineIndex: (options ? options.lineIndex : undefined) || 1, - subViews: (options ? options.subViews : undefined) || {} - }; - switch (res.orientation) { - case 'horizontal': - context.orientation = Orientation.HORIZONTAL; - context.horizontal = true; - break; - case 'vertical': - context.orientation = Orientation.VERTICAL; - break; - case 'zIndex': - context.orientation = Orientation.ZINDEX; - break; - } - _processCascade(context, res.cascade, null); - return context.constraints; - } }, { - key: 'parse', - - /** - * Parses one or more visual format strings into an array of constraint definitions. - * - * When the visual-format could not be succesfully parsed an exception is thrown containing - * additional info about the parse error and column position. - * - * @param {String|Array} visualFormat One or more visual format strings. - * @param {Object} [options] Configuration options. - * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false). - * @param {Boolean} [options.strict] When set to false trims any leading/trailing spaces and ignores empty lines (default: true). - * @param {String} [options.lineSeperator] String that defines the end of a line (default `\n`). - * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`). - * @return {Array} Array of constraint definitions. - */ - value: function parse(visualFormat, options) { - var lineSeperator = options && options.lineSeperator ? options.lineSeperator : '\n'; - if (!Array.isArray(visualFormat) && visualFormat.indexOf(lineSeperator) < 0) { - try { - return this.parseLine(visualFormat, options); - } catch (err) { - err.source = visualFormat; - throw err; - } - } - - // Decompose visual-format into an array of strings, and within those strings - // search for line-endings, and treat each line as a seperate visual-format. - visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat]; - var lines = undefined; - var constraints = []; - var lineIndex = 0; - var line = undefined; - var parseOptions = { - lineIndex: lineIndex, - extended: options && options.extended, - strict: options && options.strict !== undefined ? options.strict : true, - outFormat: options ? options.outFormat : undefined, - subViews: {} - }; - try { - for (var i = 0; i < visualFormat.length; i++) { - lines = visualFormat[i].split(lineSeperator); - for (var j = 0; j < lines.length; j++) { - line = lines[j]; - lineIndex++; - parseOptions.lineIndex = lineIndex; - if (!parseOptions.strict) { - line = line.trim(); - } - if (parseOptions.strict || line.length) { - constraints = constraints.concat(this.parseLine(line, parseOptions)); - } - } - } - } catch (err) { - err.source = line; - err.line = lineIndex; - throw err; - } - return constraints; + key: 'zIndex', + get: function get() { + return this._getAttrValue(Attribute.ZINDEX); } - }, { - key: 'parseMetaInfo', /** - * Parses meta information from the comments in the VFL. - * - * Additional meta information can be specified in the comments - * for previewing and rendering purposes. For instance, the view-port - * aspect-ratio, sub-view widths and colors, can be specified. The - * following example renders three colored circles in the visual-format editor: - * - * ```vfl - * //viewport aspect-ratio:3/1 max-height:300 - * //colors red:#FF0000 green:#00FF00 blue:#0000FF - * //shapes red:circle green:circle blue:circle - * H:|-[row:[red(green,blue)]-[green]-[blue]]-| - * V:|[row]| - * ``` - * - * Supported categories and properties: - * - * |Category|Property|Example| - * |--------|--------|-------| - * |`viewport`|`aspect-ratio:{width}/{height}`|`//viewport aspect-ratio:16/9`| - * ||`width:[{number}/intrinsic]`|`//viewport width:10`| - * ||`height:[{number}/intrinsic]`|`//viewport height:intrinsic`| - * ||`min-width:{number}`| - * ||`max-width:{number}`| - * ||`min-height:{number}`| - * ||`max-height:{number}`| - * |`spacing`|`[{number}/array]`|`//spacing:8` or `//spacing:[10, 20, 5]`| - * |`widths`|`{view-name}:[{number}/intrinsic]`|`//widths subview1:100`| - * |`heights`|`{view-name}:[{number}/intrinsic]`|`//heights subview1:intrinsic`| - * |`colors`|`{view-name}:{color}`|`//colors redview:#FF0000 blueview:#00FF00`| - * |`shapes`|`{view-name}:[circle/square]`|`//shapes avatar:circle`| - * - * @param {String|Array} visualFormat One or more visual format strings. - * @param {Object} [options] Configuration options. - * @param {String} [options.lineSeperator] String that defines the end of a line (default `\n`). - * @return {Object} meta-info + * Returns the type of the sub-view. + * @readonly + * @type {String} */ - value: function parseMetaInfo(visualFormat, options) { - var lineSeperator = options && options.lineSeperator ? options.lineSeperator : '\n'; - visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat]; - var metaInfo = {}; - var key; - for (var k = 0; k < visualFormat.length; k++) { - var lines = visualFormat[k].split(lineSeperator); - for (var i = 0; i < lines.length; i++) { - var line = lines[i]; - for (var c = 0; c < metaInfoCategories.length; c++) { - var category = metaInfoCategories[c]; - if (line.indexOf('//' + category + ' ') === 0) { - var items = line.substring(3 + category.length).split(' '); - for (var j = 0; j < items.length; j++) { - var item = items[j].split(':'); - metaInfo[category] = metaInfo[category] || {}; - metaInfo[category][item[0]] = item.length > 1 ? item[1] : ''; - } - } else if (line.indexOf('//' + category + ':') === 0) { - metaInfo[category] = line.substring(3 + category.length); - } - } - } - } - if (metaInfo.viewport) { - var viewport = metaInfo.viewport; - var aspectRatio = viewport['aspect-ratio']; - if (aspectRatio) { - aspectRatio = aspectRatio.split('/'); - viewport['aspect-ratio'] = parseInt(aspectRatio[0]) / parseInt(aspectRatio[1]); - } - if (viewport.height !== undefined) { - viewport.height = viewport.height === 'intrinsic' ? true : parseInt(viewport.height); - } - if (viewport.width !== undefined) { - viewport.width = viewport.width === 'intrinsic' ? true : parseInt(viewport.width); - } - if (viewport['max-height'] !== undefined) { - viewport['max-height'] = parseInt(viewport['max-height']); - } - if (viewport['max-width'] !== undefined) { - viewport['max-width'] = parseInt(viewport['max-width']); - } - if (viewport['min-height'] !== undefined) { - viewport['min-height'] = parseInt(viewport['min-height']); - } - if (viewport['min-width'] !== undefined) { - viewport['min-width'] = parseInt(viewport['min-width']); - } - } - if (metaInfo.widths) { - for (key in metaInfo.widths) { - var width = metaInfo.widths[key] === 'intrinsic' ? true : parseInt(metaInfo.widths[key]); - metaInfo.widths[key] = width; - if (width === undefined || isNaN(width)) { - delete metaInfo.widths[key]; - } - } - } - if (metaInfo.heights) { - for (key in metaInfo.heights) { - var height = metaInfo.heights[key] === 'intrinsic' ? true : parseInt(metaInfo.heights[key]); - metaInfo.heights[key] = height; - if (height === undefined || isNaN(height)) { - delete metaInfo.heights[key]; - } - } - } - if (metaInfo.spacing) { - var value = JSON.parse(metaInfo.spacing); - metaInfo.spacing = value; - if (value === undefined || isNaN(value)) { - delete metaInfo.spacing; - } - } - return metaInfo; + }, { + key: 'type', + get: function get() { + return this._type; } }]); - return VisualFormat; + return SubView; })(); -var SubView = (function () { - function SubView(options) { - _classCallCheck(this, SubView); +var defaultPriorityStrength = false ? new c.Strength('defaultPriority', 0, 1000, 1000) : kiwi.Strength.create(0, 1000, 1000); - this._name = options.name; - this._type = options.type; - this._solver = options.solver; - this._attr = {}; - if (!options.name) { - if (false) { - this._attr[Attribute.LEFT] = new c.Variable(); - this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.LEFT], c.Strength.required)); - this._attr[Attribute.TOP] = new c.Variable(); - this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.TOP], c.Strength.required)); - this._attr[Attribute.ZINDEX] = new c.Variable(); - this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.ZINDEX], c.Strength.required)); - } else { - this._attr[Attribute.LEFT] = new kiwi.Variable(); - this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.LEFT], kiwi.Operator.Eq, 0)); - this._attr[Attribute.TOP] = new kiwi.Variable(); - this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.TOP], kiwi.Operator.Eq, 0)); - this._attr[Attribute.ZINDEX] = new kiwi.Variable(); - this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.ZINDEX], kiwi.Operator.Eq, 0)); - } - } +function _getConst(name, value) { + if (false) { + var vr = new c.Variable({ value: value }); + this._solver.addConstraint(new c.StayConstraint(vr, c.Strength.required, 0)); + return vr; + } else { + var vr = new kiwi.Variable(); + this._solver.addConstraint(new kiwi.Constraint(vr, kiwi.Operator.Eq, value)); + return vr; } +} - _createClass(SubView, [{ - key: 'toJSON', - value: function toJSON() { - return { - name: this.name, - left: this.left, - top: this.top, - width: this.width, - height: this.height - }; +function _getSubView(viewName) { + if (!viewName) { + return this._parentSubView; + } else if (viewName.name) { + this._subViews[viewName.name] = this._subViews[viewName.name] || new SubView({ + name: viewName.name, + solver: this._solver + }); + this._subViews[viewName.name]._type = this._subViews[viewName.name]._type || viewName.type; + return this._subViews[viewName.name]; + } else { + this._subViews[viewName] = this._subViews[viewName] || new SubView({ + name: viewName, + solver: this._solver + }); + return this._subViews[viewName]; + } +} + +function _getSpacing(constraint) { + var index = 4; + if (!constraint.view1 && constraint.attr1 === 'left') { + index = 3; + } else if (!constraint.view1 && constraint.attr1 === 'top') { + index = 0; + } else if (!constraint.view2 && constraint.attr2 === 'right') { + index = 1; + } else if (!constraint.view2 && constraint.attr2 === 'bottom') { + index = 2; + } else { + switch (constraint.attr1) { + case 'left': + case 'right': + case 'centerX': + case 'leading': + case 'trailing': + index = 4; + break; + case 'zIndex': + index = 6; + break; + default: + index = 5; } - }, { - key: 'toString', - value: function toString() { - JSON.stringify(this.toJSON(), undefined, 2); + } + this._spacingVars = this._spacingVars || new Array(7); + this._spacingExpr = this._spacingExpr || new Array(7); + if (!this._spacingVars[index]) { + if (false) { + this._spacingVars[index] = new c.Variable(); + this._solver.addEditVar(this._spacingVars[index]); + this._spacingExpr[index] = c.minus(0, this._spacingVars[index]); + } else { + this._spacingVars[index] = new kiwi.Variable(); + this._solver.addEditVariable(this._spacingVars[index], kiwi.Strength.create(999, 1000, 1000)); + this._spacingExpr[index] = this._spacingVars[index].multiply(-1); } - }, { - key: 'name', + this._solver.suggestValue(this._spacingVars[index], this._spacing[index]); + } + return this._spacingExpr[index]; +} - /** - * Name of the sub-view. - * @readonly - * @type {String} - */ - get: function () { - return this._name; +function _addConstraint(constraint) { + //this.constraints.push(constraint); + var relation = undefined; + var multiplier = constraint.multiplier !== undefined ? constraint.multiplier : 1; + var constant = constraint.constant !== undefined ? constraint.constant : 0; + if (constant === 'default') { + constant = _getSpacing.call(this, constraint); + } + var attr1 = _getSubView.call(this, constraint.view1)._getAttr(constraint.attr1); + var attr2 = undefined; + if (false) { + if (constraint.attr2 === Attribute.CONST) { + attr2 = _getConst.call(this, undefined, constraint.constant); + } else { + attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2); + if (multiplier !== 1 && constant) { + attr2 = c.plus(c.times(attr2, multiplier), constant); + } else if (constant) { + attr2 = c.plus(attr2, constant); + } else if (multiplier !== 1) { + attr2 = c.times(attr2, multiplier); + } } - }, { - key: 'left', + var strength = constraint.priority !== undefined && constraint.priority < 1000 ? new c.Strength('priority', 0, constraint.priority, 1000) : defaultPriorityStrength; + switch (constraint.relation) { + case Relation.EQU: + relation = new c.Equation(attr1, attr2, strength); + break; + case Relation.GEQ: + relation = new c.Inequality(attr1, c.GEQ, attr2, strength); + break; + case Relation.LEQ: + relation = new c.Inequality(attr1, c.LEQ, attr2, strength); + break; + default: + throw 'Invalid relation specified: ' + constraint.relation; + } + } else { + if (constraint.attr2 === Attribute.CONST) { + attr2 = _getConst.call(this, undefined, constraint.constant); + } else { + attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2); + if (multiplier !== 1 && constant) { + attr2 = attr2.multiply(multiplier).plus(constant); + } else if (constant) { + attr2 = attr2.plus(constant); + } else if (multiplier !== 1) { + attr2 = attr2.multiply(multiplier); + } + } + var strength = constraint.priority !== undefined && constraint.priority < 1000 ? kiwi.Strength.create(0, constraint.priority, 1000) : defaultPriorityStrength; + switch (constraint.relation) { + case Relation.EQU: + relation = new kiwi.Constraint(attr1, kiwi.Operator.Eq, attr2, strength); + break; + case Relation.GEQ: + relation = new kiwi.Constraint(attr1, kiwi.Operator.Ge, attr2, strength); + break; + case Relation.LEQ: + relation = new kiwi.Constraint(attr1, kiwi.Operator.Le, attr2, strength); + break; + default: + throw 'Invalid relation specified: ' + constraint.relation; + } + } + this._solver.addConstraint(relation); +} - /** - * Left value (`Attribute.LEFT`). - * @readonly - * @type {Number} - */ - get: function () { - return this._getAttrValue(Attribute.LEFT); +function _compareSpacing(old, newz) { + if (old === newz) { + return true; + } + if (!old || !newz) { + return false; + } + for (var i = 0; i < 7; i++) { + if (old[i] !== newz[i]) { + return false; } - }, { - key: 'right', + } + return true; +} - /** - * Right value (`Attribute.RIGHT`). - * @readonly - * @type {Number} - */ - get: function () { - return this._getAttrValue(Attribute.RIGHT); +/** + * AutoLayoutJS API reference. + * + * ### Index + * + * |Entity|Type|Description| + * |---|---|---| + * |[AutoLayout](#autolayout)|`namespace`|Top level AutoLayout object.| + * |[VisualFormat](#autolayoutvisualformat--object)|`namespace`|Parses VFL into constraints.| + * |[View](#autolayoutview)|`class`|Main entity for adding & evaluating constraints.| + * |[SubView](#autolayoutsubview--object)|`class`|SubView's are automatically created when constraints are added to views. They give access to the evaluated results.| + * |[Attribute](#autolayoutattribute--enum)|`enum`|Attribute types that are supported when adding constraints.| + * |[Relation](#autolayoutrelation--enum)|`enum`|Relationship types that are supported when adding constraints.| + * |[Priority](#autolayoutpriority--enum)|`enum`|Default priority values for when adding constraints.| + * + * ### AutoLayout + * + * @module AutoLayout + */ + +var View = (function () { + + /** + * @class View + * @param {Object} [options] Configuration options. + * @param {Number} [options.width] Initial width of the view. + * @param {Number} [options.height] Initial height of the view. + * @param {Number|Object} [options.spacing] Spacing for the view (default: 8) (see `setSpacing`). + * @param {Array} [options.constraints] One or more constraint definitions (see `addConstraints`). + */ + + function View(options) { + _classCallCheck(this, View); + + this._solver = false ? new c.SimplexSolver() : new kiwi.Solver(); + this._subViews = {}; + //this._spacing = undefined; + this._parentSubView = new SubView({ + solver: this._solver + }); + this.setSpacing(options && options.spacing !== undefined ? options.spacing : 8); + //this.constraints = []; + if (options) { + if (options.width !== undefined || options.height !== undefined) { + this.setSize(options.width, options.height); + } + if (options.constraints) { + this.addConstraints(options.constraints); + } } - }, { - key: 'width', + } - /** - * Width value (`Attribute.WIDTH`). - * @type {Number} - */ - get: function () { - return this._getAttrValue(Attribute.WIDTH); + /** + * Sets the width and height of the view. + * + * @param {Number} width Width of the view. + * @param {Number} height Height of the view. + * @return {View} this + */ + + _createClass(View, [{ + key: 'setSize', + value: function setSize(width, height /*, depth*/) { + this._parentSubView.intrinsicWidth = width; + this._parentSubView.intrinsicHeight = height; + return this; } - }, { - key: 'height', /** - * Height value (`Attribute.HEIGHT`). + * Width that was set using `setSize`. * @readonly * @type {Number} */ - get: function () { - return this._getAttrValue(Attribute.HEIGHT); - } }, { - key: 'intrinsicWidth', + key: 'setSpacing', /** - * Intrinsic width of the sub-view. - * - * Use this property to explicitely set the width of the sub-view, e.g.: - * ```javascript - * var view = new AutoLayout.View(AutoLayout.VisualFormat.parse('|[child1][child2]|'), { - * width: 500 - * }); - * view.subViews.child1.intrinsicWidth = 100; - * console.log('child2 width: ' + view.subViews.child2.width); // 400 - * ``` + * Sets the spacing for the view. * - * @type {Number} + * The spacing can be set for 7 different variables: + * `top`, `right`, `bottom`, `left`, `width`, `height` and `zIndex`. The `left`-spacing is + * used when a spacer is used between the parent-view and a sub-view (e.g. `|-[subView]`). + * The same is true for the `right`, `top` and `bottom` spacers. The `width` and `height` are + * used for spacers in between sub-views (e.g. `[view1]-[view2]`). + * + * Instead of using the full spacing syntax, it is also possible to use shorthand notations: + * + * |Syntax|Type|Description| + * |---|---|---| + * |`[top, right, bottom, left, width, height, zIndex]`|Array(7)|Full syntax including z-index **(clockwise order)**.| + * |`[top, right, bottom, left, width, height]`|Array(6)|Full horizontal & vertical spacing syntax (no z-index) **(clockwise order)**.| + * |`[horizontal, vertical, zIndex]`|Array(3)|Horizontal = left, right, width, vertical = top, bottom, height.| + * |`[horizontal, vertical]`|Array(2)|Horizontal = left, right, width, vertical = top, bottom, height, z-index = 1.| + * |`spacing`|Number|Horizontal & vertical spacing are all the same, z-index = 1.| + * + * Examples: + * ```javascript + * view.setSpacing(10); // horizontal & vertical spacing 10 + * view.setSpacing([10, 15, 2]); // horizontal spacing 10, vertical spacing 15, z-axis spacing 2 + * view.setSpacing([10, 20, 10, 20, 5, 5]); // top, right, bottom, left, horizontal, vertical + * view.setSpacing([10, 20, 10, 20, 5, 5, 1]); // top, right, bottom, left, horizontal, vertical, z + * ``` + * + * @param {Number|Array} spacing + * @return {View} this */ - get: function () { - return this._intrinsicWidth; - }, - set: function (value) { - if (value !== undefined && value !== this._intrinsicWidth) { - var attr = this._getAttr(Attribute.WIDTH); - if (this._intrinsicWidth === undefined) { + value: function setSpacing(spacing) { + // convert spacing into array: [top, right, bottom, left, horz, vert, z-index] + switch (Array.isArray(spacing) ? spacing.length : -1) { + case -1: + spacing = [spacing, spacing, spacing, spacing, spacing, spacing, 1];break; + case 1: + spacing = [spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], 1];break; + case 2: + spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], 1];break; + case 3: + spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], spacing[2]];break; + case 6: + spacing = [spacing[0], spacing[1], spacing[2], spacing[3], spacing[4], spacing[5], 1];break; + case 7: + break; + default: + throw 'Invalid spacing syntax'; + } + if (!_compareSpacing(this._spacing, spacing)) { + this._spacing = spacing; + // update spacing variables + if (this._spacingVars) { + for (var i = 0; i < this._spacingVars.length; i++) { + if (this._spacingVars[i]) { + this._solver.suggestValue(this._spacingVars[i], this._spacing[i]); + } + } if (false) { - this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000)); + this._solver.resolve(); } else { - this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000)); + this._solver.updateVariables(); } } - this._intrinsicWidth = value; - this._solver.suggestValue(attr, value); - if (false) { - this._solver.resolve(); - } else { - this._solver.updateVariables(); - } } + return this; } - }, { - key: 'intrinsicHeight', /** - * Intrinsic height of the sub-view. + * Adds a constraint definition. * - * See `intrinsicWidth`. + * A constraint definition has the following format: * - * @type {Number} + * ```javascript + * constraint: { + * view1: {String}, + * attr1: {AutoLayout.Attribute}, + * relation: {AutoLayout.Relation}, + * view2: {String}, + * attr2: {AutoLayout.Attribute}, + * multiplier: {Number}, + * constant: {Number}, + * priority: {Number}(0..1000) + * } + * ``` + * @param {Object} constraint Constraint definition. + * @return {View} this */ - get: function () { - return this._intrinsicHeight; - }, - set: function (value) { - if (value !== undefined && value !== this._intrinsicHeight) { - var attr = this._getAttr(Attribute.HEIGHT); - if (this._intrinsicHeight === undefined) { - if (false) { - this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000)); - } else { - this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000)); - } - } - this._intrinsicHeight = value; - this._solver.suggestValue(attr, value); - if (false) { - this._solver.resolve(); - } else { - this._solver.updateVariables(); - } + }, { + key: 'addConstraint', + value: function addConstraint(constraint) { + _addConstraint.call(this, constraint); + if (!false) { + this._solver.updateVariables(); } + return this; } - }, { - key: 'top', /** - * Top value (`Attribute.TOP`). - * @readonly - * @type {Number} + * Adds one or more constraint definitions. + * + * A constraint definition has the following format: + * + * ```javascript + * constraint: { + * view1: {String}, + * attr1: {AutoLayout.Attribute}, + * relation: {AutoLayout.Relation}, + * view2: {String}, + * attr2: {AutoLayout.Attribute}, + * multiplier: {Number}, + * constant: {Number}, + * priority: {Number}(0..1000) + * } + * ``` + * @param {Array} constraints One or more constraint definitions. + * @return {View} this */ - get: function () { - return this._getAttrValue(Attribute.TOP); - } }, { - key: 'bottom', + key: 'addConstraints', + value: function addConstraints(constraints) { + for (var j = 0; j < constraints.length; j++) { + _addConstraint.call(this, constraints[j]); + } + if (!false) { + this._solver.updateVariables(); + } + return this; + } /** - * Bottom value (`Attribute.BOTTOM`). + * Dictionary of `SubView` objects that have been created when adding constraints. * @readonly - * @type {Number} + * @type {Object.SubView} */ - get: function () { - return this._getAttrValue(Attribute.BOTTOM); - } }, { - key: 'centerX', + key: 'width', + get: function get() { + return this._parentSubView.intrinsicWidth; + } /** - * Horizontal center (`Attribute.CENTERX`). + * Height that was set using `setSize`. * @readonly * @type {Number} */ - get: function () { - return this._getAttrValue(Attribute.CENTERX); - } }, { - key: 'centerY', + key: 'height', + get: function get() { + return this._parentSubView.intrinsicHeight; + } /** - * Vertical center (`Attribute.CENTERY`). + * Width that is calculated from the constraints and the `.intrinsicWidth` of + * the sub-views. + * + * When the width has been explicitely set using `setSize`, the fittingWidth + * will **always** be the same as the explicitely set width. To calculate the size + * based on the content, use: + * ```javascript + * var view = new AutoLayout.View({ + * constraints: VisualFormat.parse('|-[view1]-[view2]-'), + * spacing: 20 + * }); + * view.subViews.view1.intrinsicWidth = 100; + * view.subViews.view2.intrinsicWidth = 100; + * console.log('fittingWidth: ' + view.fittingWidth); // 260 + * ``` + * * @readonly * @type {Number} */ - get: function () { - return this._getAttrValue(Attribute.CENTERY); - } }, { - key: 'zIndex', + key: 'fittingWidth', + get: function get() { + return this._parentSubView.width; + } /** - * Z-index (`Attribute.ZINDEX`). + * Height that is calculated from the constraints and the `.intrinsicHeight` of + * the sub-views. + * + * See `.fittingWidth`. + * * @readonly * @type {Number} */ - get: function () { - return this._getAttrValue(Attribute.ZINDEX); - } }, { - key: 'type', - - /** - * Returns the type of the sub-view. - * @readonly - * @type {String} - */ - get: function () { - return this._type; + key: 'fittingHeight', + get: function get() { + return this._parentSubView.height; } }, { - key: 'getValue', - - /** - * Gets the value of one of the attributes. - * - * @param {String|Attribute} attr Attribute name (e.g. 'right', 'centerY', Attribute.TOP). - * @return {Number} value or `undefined` - */ - value: function getValue(attr) { - return this._attr[attr] ? this._attr[attr].value() : undefined; + key: 'subViews', + get: function get() { + return this._subViews; } - }, { - key: '_getAttr', /** + * Checks whether the constraints incompletely specify the location + * of the subViews. * @private */ - value: function _getAttr(attr) { - if (this._attr[attr]) { - return this._attr[attr]; - } - this._attr[attr] = false ? new c.Variable() : new kiwi.Variable(); - switch (attr) { - case Attribute.RIGHT: - this._getAttr(Attribute.LEFT); - this._getAttr(Attribute.WIDTH); - if (false) { - this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], this._attr[Attribute.WIDTH]))); - } else { - this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH]))); - } - break; - case Attribute.BOTTOM: - this._getAttr(Attribute.TOP); - this._getAttr(Attribute.HEIGHT); - if (false) { - this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], this._attr[Attribute.HEIGHT]))); - } else { - this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT]))); - } - break; - case Attribute.CENTERX: - this._getAttr(Attribute.LEFT); - this._getAttr(Attribute.WIDTH); - if (false) { - this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], c.divide(this._attr[Attribute.WIDTH], 2)))); - } else { - this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH].divide(2)))); - } - break; - case Attribute.CENTERY: - this._getAttr(Attribute.TOP); - this._getAttr(Attribute.HEIGHT); - if (false) { - this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], c.divide(this._attr[Attribute.HEIGHT], 2)))); - } else { - this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT].divide(2)))); - } - break; - } - if (!false) { - this._solver.updateVariables(); - } - return this._attr[attr]; - } - }, { - key: '_getAttrValue', - - /** - * @private - */ - value: function _getAttrValue(attr) { - if (false) { - return this._getAttr(attr).value; - } else { - return this._getAttr(attr).value(); - } - } + //get hasAmbiguousLayout() { + // Todo + //} }]); - return SubView; + return View; })(); -var defaultPriorityStrength = false ? new c.Strength('defaultPriority', 0, 1000, 1000) : kiwi.Strength.create(0, 1000, 1000); +var AutoLayout = { + Attribute: Attribute, + Relation: Relation, + Priority: Priority, + VisualFormat: VisualFormat, + View: View, + SubView: SubView + //DOM: DOM +}; -function _getConst(name, value) { - if (false) { - var vr = new c.Variable({ value: value }); - this._solver.addConstraint(new c.StayConstraint(vr, c.Strength.required, 0)); - return vr; - } else { - var vr = new kiwi.Variable(); - this._solver.addConstraint(new kiwi.Constraint(vr, kiwi.Operator.Eq, value)); - return vr; - } -} +module.exports = AutoLayout; -function _getSubView(viewName) { - if (!viewName) { - return this._parentSubView; - } else if (viewName.name) { - this._subViews[viewName.name] = this._subViews[viewName.name] || new SubView({ - name: viewName.name, - solver: this._solver +},{"kiwi/ts/bin/kiwi":2}],2:[function(require,module,exports){ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define([], function () { + return (root['kiwi'] = factory()); }); - this._subViews[viewName.name]._type = this._subViews[viewName.name]._type || viewName.type; - return this._subViews[viewName.name]; + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); } else { - this._subViews[viewName] = this._subViews[viewName] || new SubView({ - name: viewName, - solver: this._solver - }); - return this._subViews[viewName]; + root['kiwi'] = factory(); } -} +}(this, function () { -function _getSpacing(constraint) { - var index = 4; - if (!constraint.view1 && constraint.attr1 === 'left') { - index = 3; - } else if (!constraint.view1 && constraint.attr1 === 'top') { - index = 0; - } else if (!constraint.view2 && constraint.attr2 === 'right') { - index = 1; - } else if (!constraint.view2 && constraint.attr2 === 'bottom') { - index = 2; - } else { - switch (constraint.attr1) { - case 'left': - case 'right': - case 'centerX': - case 'leading': - case 'trailing': - index = 4; - break; - case 'zIndex': - index = 6; - break; - default: - index = 5; +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +var tsu; +(function (tsu) { + + /** + * An iterator for an array of items. + */ + var ArrayIterator = (function () { + /* + * Construct a new ArrayIterator. + * + * @param array The array of items to iterate. + * @param [index] The index at which to start iteration. + */ + function ArrayIterator(array, index) { + if (typeof index === "undefined") { index = 0; } + this._array = array; + this._index = Math.max(0, Math.min(index, array.length)); + } + /** + * Returns the next item from the iterator or undefined. + */ + ArrayIterator.prototype.__next__ = function () { + return this._array[this._index++]; + }; + + /** + * Returns this same iterator. + */ + ArrayIterator.prototype.__iter__ = function () { + return this; + }; + return ArrayIterator; + })(); + tsu.ArrayIterator = ArrayIterator; + + /** + * A reverse iterator for an array of items. + */ + var ReverseArrayIterator = (function () { + /** + * Construct a new ReverseArrayIterator. + * + * @param array The array of items to iterate. + * @param [index] The index at which to start iteration. + */ + function ReverseArrayIterator(array, index) { + if (typeof index === "undefined") { index = array.length; } + this._array = array; + this._index = Math.max(0, Math.min(index, array.length)); + } + /** + * Returns the next item from the iterator or undefined. + */ + ReverseArrayIterator.prototype.__next__ = function () { + return this._array[--this._index]; + }; + + /** + * Returns this same iterator. + */ + ReverseArrayIterator.prototype.__iter__ = function () { + return this; + }; + return ReverseArrayIterator; + })(); + tsu.ReverseArrayIterator = ReverseArrayIterator; + + + + function iter(object) { + if (object instanceof Array) { + return new ArrayIterator(object); + } + return object.__iter__(); } - } - this._spacingVars = this._spacingVars || new Array(7); - this._spacingExpr = this._spacingExpr || new Array(7); - if (!this._spacingVars[index]) { - if (false) { - this._spacingVars[index] = new c.Variable(); - this._solver.addEditVar(this._spacingVars[index]); - this._spacingExpr[index] = c.minus(0, this._spacingVars[index]); - } else { - this._spacingVars[index] = new kiwi.Variable(); - this._solver.addEditVariable(this._spacingVars[index], kiwi.Strength.create(999, 1000, 1000)); - this._spacingExpr[index] = this._spacingVars[index].multiply(-1); + tsu.iter = iter; + + + + function reversed(object) { + if (object instanceof Array) { + return new ReverseArrayIterator(object); + } + return object.__reversed__(); } - this._solver.suggestValue(this._spacingVars[index], this._spacing[index]); - } - return this._spacingExpr[index]; -} + tsu.reversed = reversed; -function _addConstraint(constraint) { - //this.constraints.push(constraint); - var relation = undefined; - var multiplier = constraint.multiplier !== undefined ? constraint.multiplier : 1; - var constant = constraint.constant !== undefined ? constraint.constant : 0; - if (constant === 'default') { - constant = _getSpacing.call(this, constraint); - } - var attr1 = _getSubView.call(this, constraint.view1)._getAttr(constraint.attr1); - var attr2 = undefined; - if (false) { - if (constraint.attr2 === Attribute.CONST) { - attr2 = _getConst.call(this, undefined, constraint.constant); - } else { - attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2); - if (multiplier !== 1 && constant) { - attr2 = c.plus(c.times(attr2, multiplier), constant); - } else if (constant) { - attr2 = c.plus(attr2, constant); - } else if (multiplier !== 1) { - attr2 = c.times(attr2, multiplier); - } + /** + * Returns the next value from an iterator, or undefined. + */ + function next(iterator) { + return iterator.__next__(); } - var strength = constraint.priority !== undefined && constraint.priority < 1000 ? new c.Strength('priority', 0, constraint.priority, 1000) : defaultPriorityStrength; - switch (constraint.relation) { - case Relation.EQU: - relation = new c.Equation(attr1, attr2, strength); - break; - case Relation.GEQ: - relation = new c.Inequality(attr1, c.GEQ, attr2, strength); - break; - case Relation.LEQ: - relation = new c.Inequality(attr1, c.LEQ, attr2, strength); - break; - default: - throw 'Invalid relation specified: ' + constraint.relation; - } - } else { - if (constraint.attr2 === Attribute.CONST) { - attr2 = _getConst.call(this, undefined, constraint.constant); - } else { - attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2); - if (multiplier !== 1 && constant) { - attr2 = attr2.multiply(multiplier).plus(constant); - } else if (constant) { - attr2 = attr2.plus(constant); - } else if (multiplier !== 1) { - attr2 = attr2.multiply(multiplier); - } - } - var strength = constraint.priority !== undefined && constraint.priority < 1000 ? kiwi.Strength.create(0, constraint.priority, 1000) : defaultPriorityStrength; - switch (constraint.relation) { - case Relation.EQU: - relation = new kiwi.Constraint(attr1, kiwi.Operator.Eq, attr2, strength); - break; - case Relation.GEQ: - relation = new kiwi.Constraint(attr1, kiwi.Operator.Ge, attr2, strength); - break; - case Relation.LEQ: - relation = new kiwi.Constraint(attr1, kiwi.Operator.Le, attr2, strength); - break; - default: - throw 'Invalid relation specified: ' + constraint.relation; - } - } - this._solver.addConstraint(relation); -} - -function _compareSpacing(old, newz) { - if (old === newz) { - return true; - } - if (!old || !newz) { - return false; - } - for (var i = 0; i < 7; i++) { - if (old[i] !== newz[i]) { - return false; - } - } - return true; -} - -/** - * AutoLayoutJS API reference. - * - * ### Index - * - * |Entity|Type|Description| - * |---|---|---| - * |[AutoLayout](#autolayout)|`namespace`|Top level AutoLayout object.| - * |[VisualFormat](#autolayoutvisualformat--object)|`namespace`|Parses VFL into constraints.| - * |[View](#autolayoutview)|`class`|Main entity for adding & evaluating constraints.| - * |[SubView](#autolayoutsubview--object)|`class`|SubView's are automatically created when constraints are added to views. They give access to the evaluated results.| - * |[Attribute](#autolayoutattribute--enum)|`enum`|Attribute types that are supported when adding constraints.| - * |[Relation](#autolayoutrelation--enum)|`enum`|Relationship types that are supported when adding constraints.| - * |[Priority](#autolayoutpriority--enum)|`enum`|Default priority values for when adding constraints.| - * - * ### AutoLayout - * - * @module AutoLayout - */ + tsu.next = next; -var View = (function () { - /** - * @class View - * @param {Object} [options] Configuration options. - * @param {Number} [options.width] Initial width of the view. - * @param {Number} [options.height] Initial height of the view. - * @param {Number|Object} [options.spacing] Spacing for the view (default: 8) (see `setSpacing`). - * @param {Array} [options.constraints] One or more constraint definitions (see `addConstraints`). - */ + function forEach(object, callback) { + if (object instanceof Array) { + for (var i = 0, n = object.length; i < n; ++i) { + if (callback(object[i]) === false) { + return; + } + } + } else { + var value; + var it = object.__iter__(); + while ((value = it.__next__()) !== undefined) { + if (callback(value) === false) { + return; + } + } + } + } + tsu.forEach = forEach; - function View(options) { - _classCallCheck(this, View); +})(tsu || (tsu = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +var tsu; +(function (tsu) { + - this._solver = false ? new c.SimplexSolver() : new kiwi.Solver(); - this._subViews = {}; - //this._spacing = undefined; - this._parentSubView = new SubView({ - solver: this._solver - }); - this.setSpacing(options && options.spacing !== undefined ? options.spacing : 8); - //this.constraints = []; - if (options) { - if (options.width !== undefined || options.height !== undefined) { - this.setSize(options.width, options.height); - } - if (options.constraints) { - this.addConstraints(options.constraints); - } + /** + * A class which defines a generic pair object. + */ + var Pair = (function () { + /** + * Construct a new Pair object. + * + * @param first The first item of the pair. + * @param second The second item of the pair. + */ + function Pair(first, second) { + this.first = first; + this.second = second; + } + /** + * Create a copy of the pair. + */ + Pair.prototype.copy = function () { + return new Pair(this.first, this.second); + }; + return Pair; + })(); + tsu.Pair = Pair; +})(tsu || (tsu = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +/// +/// +var tsu; +(function (tsu) { + /** + * Perform a lower bound search on a sorted array. + * + * @param array The array of sorted items to search. + * @param value The value to located in the array. + * @param compare The value comparison function. + * @returns The index of the first element in the array which + * compares greater than or equal to the given value. + */ + function lowerBound(array, value, compare) { + var begin = 0; + var n = array.length; + var half; + var middle; + while (n > 0) { + half = n >> 1; + middle = begin + half; + if (compare(array[middle], value) < 0) { + begin = middle + 1; + n -= half + 1; + } else { + n = half; + } + } + return begin; } - } + tsu.lowerBound = lowerBound; - _createClass(View, [{ - key: 'setSize', + /** + * Perform a binary search on a sorted array. + * + * @param array The array of sorted items to search. + * @param value The value to located in the array. + * @param compare The value comparison function. + * @returns The index of the found item, or -1. + */ + function binarySearch(array, value, compare) { + var index = lowerBound(array, value, compare); + if (index === array.length) { + return -1; + } + var item = array[index]; + if (compare(item, value) !== 0) { + return -1; + } + return index; + } + tsu.binarySearch = binarySearch; /** - * Sets the width and height of the view. - * - * @param {Number} width Width of the view. - * @param {Number} height Height of the view. - * @return {View} this - */ - value: function setSize(width, height /*, depth*/) { - this._parentSubView.intrinsicWidth = width; - this._parentSubView.intrinsicHeight = height; - return this; + * Perform a binary find on a sorted array. + * + * @param array The array of sorted items to search. + * @param value The value to located in the array. + * @param compare The value comparison function. + * @returns The found item in the array, or undefined. + */ + function binaryFind(array, value, compare) { + var index = lowerBound(array, value, compare); + if (index === array.length) { + return undefined; + } + var item = array[index]; + if (compare(item, value) !== 0) { + return undefined; + } + return item; } - }, { - key: 'width', + tsu.binaryFind = binaryFind; +})(tsu || (tsu = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +/// +var tsu; +(function (tsu) { + /** + * A base class for implementing array-based data structures. + * + * @class + */ + var ArrayBase = (function () { + function ArrayBase() { + /* + * The internal data array. + * + * @protected + */ + this._array = []; + } + /** + * Returns the number of items in the array. + */ + ArrayBase.prototype.size = function () { + return this._array.length; + }; + + /** + * Returns true if the array is empty. + */ + ArrayBase.prototype.empty = function () { + return this._array.length === 0; + }; + + /** + * Returns the item at the given array index. + * + * @param index The integer index of the desired item. + */ + ArrayBase.prototype.itemAt = function (index) { + return this._array[index]; + }; + + /** + * Removes and returns the item at the given index. + * + * @param index The integer index of the desired item. + */ + ArrayBase.prototype.takeAt = function (index) { + return this._array.splice(index, 1)[0]; + }; + + /** + * Clear the internal contents of array. + */ + ArrayBase.prototype.clear = function () { + this._array = []; + }; + + /** + * Swap this array's contents with another array. + * + * @param other The array base to use for the swap. + */ + ArrayBase.prototype.swap = function (other) { + var array = this._array; + this._array = other._array; + other._array = array; + }; + + /** + * Returns an iterator over the array of items. + */ + ArrayBase.prototype.__iter__ = function () { + return tsu.iter(this._array); + }; + + /** + * Returns a reverse iterator over the array of items. + */ + ArrayBase.prototype.__reversed__ = function () { + return tsu.reversed(this._array); + }; + return ArrayBase; + })(); + tsu.ArrayBase = ArrayBase; +})(tsu || (tsu = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +/// +/// +/// +/// +var tsu; +(function (tsu) { + /** + * A mapping container build on a sorted array. + * + * @class + */ + var AssociativeArray = (function (_super) { + __extends(AssociativeArray, _super); + /** + * Construct a new AssociativeArray. + * + * @param compare The key comparison function. + */ + function AssociativeArray(compare) { + _super.call(this); + this._compare = compare; + this._wrapped = wrapCompare(compare); + } + /** + * Returns the key comparison function used by this array. + */ + AssociativeArray.prototype.comparitor = function () { + return this._compare; + }; + + /** + * Return the array index of the given key, or -1. + * + * @param key The key to locate in the array. + */ + AssociativeArray.prototype.indexOf = function (key) { + return tsu.binarySearch(this._array, key, this._wrapped); + }; + + /** + * Returns true if the key is in the array, false otherwise. + * + * @param key The key to locate in the array. + */ + AssociativeArray.prototype.contains = function (key) { + return tsu.binarySearch(this._array, key, this._wrapped) >= 0; + }; + + /** + * Returns the pair associated with the given key, or undefined. + * + * @param key The key to locate in the array. + */ + AssociativeArray.prototype.find = function (key) { + return tsu.binaryFind(this._array, key, this._wrapped); + }; + + /** + * Returns the pair associated with the key if it exists. + * + * If the key does not exist, a new pair will be created and + * inserted using the value created by the given factory. + * + * @param key The key to locate in the array. + * @param factory The function which creates the default value. + */ + AssociativeArray.prototype.setDefault = function (key, factory) { + var array = this._array; + var index = tsu.lowerBound(array, key, this._wrapped); + if (index === array.length) { + var pair = new tsu.Pair(key, factory()); + array.push(pair); + return pair; + } + var currPair = array[index]; + if (this._compare(currPair.first, key) !== 0) { + var pair = new tsu.Pair(key, factory()); + array.splice(index, 0, pair); + return pair; + } + return currPair; + }; + + /** + * Insert the pair into the array and return the pair. + * + * This will overwrite any existing entry in the array. + * + * @param key The key portion of the pair. + * @param value The value portion of the pair. + */ + AssociativeArray.prototype.insert = function (key, value) { + var array = this._array; + var index = tsu.lowerBound(array, key, this._wrapped); + if (index === array.length) { + var pair = new tsu.Pair(key, value); + array.push(pair); + return pair; + } + var currPair = array[index]; + if (this._compare(currPair.first, key) !== 0) { + var pair = new tsu.Pair(key, value); + array.splice(index, 0, pair); + return pair; + } + currPair.second = value; + return currPair; + }; + + AssociativeArray.prototype.update = function (object) { + var _this = this; + if (object instanceof AssociativeArray) { + var obj = object; + this._array = merge(this._array, obj._array, this._compare); + } else { + tsu.forEach(object, function (pair) { + _this.insert(pair.first, pair.second); + }); + } + }; + + /** + * Removes and returns the pair for the given key, or undefined. + * + * @param key The key to remove from the map. + */ + AssociativeArray.prototype.erase = function (key) { + var array = this._array; + var index = tsu.binarySearch(array, key, this._wrapped); + if (index < 0) { + return undefined; + } + return array.splice(index, 1)[0]; + }; + + /** + * Create a copy of this associative array. + */ + AssociativeArray.prototype.copy = function () { + var theCopy = new AssociativeArray(this._compare); + var copyArray = theCopy._array; + var thisArray = this._array; + for (var i = 0, n = thisArray.length; i < n; ++i) { + copyArray.push(thisArray[i].copy()); + } + return theCopy; + }; + return AssociativeArray; + })(tsu.ArrayBase); + tsu.AssociativeArray = AssociativeArray; + + /** + * An internal which wraps a comparison key function. + */ + function wrapCompare(cmp) { + return function (pair, value) { + return cmp(pair.first, value); + }; + } + + /** + * An internal function which merges two ordered pair arrays. + */ + function merge(first, second, compare) { + var i = 0, j = 0; + var len1 = first.length; + var len2 = second.length; + var merged = []; + while (i < len1 && j < len2) { + var a = first[i]; + var b = second[j]; + var v = compare(a.first, b.first); + if (v < 0) { + merged.push(a.copy()); + ++i; + } else if (v > 0) { + merged.push(b.copy()); + ++j; + } else { + merged.push(b.copy()); + ++i; + ++j; + } + } + while (i < len1) { + merged.push(first[i].copy()); + ++i; + } + while (j < len2) { + merged.push(second[j].copy()); + ++j; + } + return merged; + } +})(tsu || (tsu = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +/// +/// +/// +/// +/// +/// + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +// +// +/** + * Kiwi is an efficient implementation of the Cassowary constraint solving + * algorithm, based on the seminal Cassowary paper. + * It is *not* a refactoring or port of the original C++ solver, but + * has been designed from the ground up to be lightweight and fast. + * + * **Example** + * ```javascript + * var kiwi = require('kiwi'); + * + * // Create a solver + * var solver = new kiwi.Solver(); + * + * // Create and add some editable variables + * var left = new kiwi.Variable(); + * var width = new kiwi.Variable(); + * solver.addEditVariable(left, kiwi.Strength.strong); + * solver.addEditVariable(width, kiwi.Strength.strong); + * + * // Create a variable calculated through a constraint + * var centerX = new kiwi.Variable(); + * var expr = new kiwi.Expression([-1, centerX], left, [0.5, width]); + * solver.addConstraint(new kiwi.Constraint(expr, kiwi.Operator.Eq, kiwi.Strength.required)); + * + * // Suggest some values to the solver + * solver.suggestValue(left, 0); + * solver.suggestValue(width, 500); + * + * // Lets solve the problem! + * solver.updateVariables(); + * assert(centerX.value(), 250); + * ``` + * + * ##API Documentation + * @module kiwi + */ +var kiwi; +(function (kiwi) { + /** + * An enum defining the linear constraint operators. + * + * |Value|Operator|Description| + * |----|-----|-----| + * |`Le`|<=|Less than equal| + * |`Ge`|>=|Greater than equal| + * |`Eq`|==|Equal| + * + * @enum {Number} + */ + (function (Operator) { + Operator[Operator["Le"] = 0] = "Le"; + Operator[Operator["Ge"] = 1] = "Ge"; + Operator[Operator["Eq"] = 2] = "Eq"; // == + })(kiwi.Operator || (kiwi.Operator = {})); + var Operator = kiwi.Operator; + /** + * A linear constraint equation. + * + * A constraint equation is composed of an expression, an operator, + * and a strength. The RHS of the equation is implicitly zero. + * + * @class + * @param {Expression} expression The constraint expression (LHS). + * @param {Operator} operator The equation operator. + * @param {Expression} [rhs] Right hand side of the expression. + * @param {Number} [strength=Strength.required] The strength of the constraint. + */ + var Constraint = (function () { + function Constraint(expression, operator, rhs, strength) { + if (strength === void 0) { strength = kiwi.Strength.required; } + this._id = CnId++; + this._operator = operator; + this._strength = kiwi.Strength.clip(strength); + if ((rhs === undefined) && (expression instanceof kiwi.Expression)) { + this._expression = expression; + } + else { + this._expression = expression.minus(rhs); + } + } + /** + * A static constraint comparison function. + * @private + */ + Constraint.Compare = function (a, b) { + return a.id() - b.id(); + }; + /** + * Returns the unique id number of the constraint. + * @private + */ + Constraint.prototype.id = function () { + return this._id; + }; + /** + * Returns the expression of the constraint. + * + * @return {Expression} expression + */ + Constraint.prototype.expression = function () { + return this._expression; + }; + /** + * Returns the relational operator of the constraint. + * + * @return {Operator} linear constraint operator + */ + Constraint.prototype.op = function () { + return this._operator; + }; + /** + * Returns the strength of the constraint. + * + * @return {Number} strength + */ + Constraint.prototype.strength = function () { + return this._strength; + }; + return Constraint; + })(); + kiwi.Constraint = Constraint; + /** + * The internal constraint id counter. + * @private + */ + var CnId = 0; +})(kiwi || (kiwi = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +/// +var kiwi; +(function (kiwi) { + function createMap(compare) { + return new tsu.AssociativeArray(compare); + } + kiwi.createMap = createMap; +})(kiwi || (kiwi = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +var kiwi; +(function (kiwi) { + /** + * The primary user constraint variable. + * + * @class + * @param {String} [name=""] The name to associated with the variable. + */ + var Variable = (function () { + function Variable(name) { + if (name === void 0) { name = ""; } + this._value = 0.0; + this._context = null; + this._id = VarId++; + this._name = name; + } + /** + * A static variable comparison function. + * @private + */ + Variable.Compare = function (a, b) { + return a.id() - b.id(); + }; + /** + * Returns the unique id number of the variable. + * @private + */ + Variable.prototype.id = function () { + return this._id; + }; + /** + * Returns the name of the variable. + * + * @return {String} name of the variable + */ + Variable.prototype.name = function () { + return this._name; + }; + /** + * Set the name of the variable. + * + * @param {String} name Name of the variable + */ + Variable.prototype.setName = function (name) { + this._name = name; + }; + /** + * Returns the user context object of the variable. + * @private + */ + Variable.prototype.context = function () { + return this._context; + }; + /** + * Set the user context object of the variable. + * @private + */ + Variable.prototype.setContext = function (context) { + this._context = context; + }; + /** + * Returns the value of the variable. + * + * @return {Number} Calculated value + */ + Variable.prototype.value = function () { + return this._value; + }; + /** + * Set the value of the variable. + * @private + */ + Variable.prototype.setValue = function (value) { + this._value = value; + }; + /** + * Creates a new Expression by adding a number, variable or expression + * to the variable. + * + * @param {Number|Variable|Expression} value Value to add. + * @return {Expression} expression + */ + Variable.prototype.plus = function (value) { + return new kiwi.Expression(this, value); + }; + /** + * Creates a new Expression by substracting a number, variable or expression + * from the variable. + * + * @param {Number|Variable|Expression} value Value to substract. + * @return {Expression} expression + */ + Variable.prototype.minus = function (value) { + return new kiwi.Expression(this, typeof value === 'number' ? -value : [-1, value]); + }; + /** + * Creates a new Expression by multiplying with a fixed number. + * + * @param {Number} coefficient Coefficient to multiply with. + * @return {Expression} expression + */ + Variable.prototype.multiply = function (coefficient) { + return new kiwi.Expression([coefficient, this]); + }; + /** + * Creates a new Expression by dividing with a fixed number. + * + * @param {Number} coefficient Coefficient to divide by. + * @return {Expression} expression + */ + Variable.prototype.divide = function (coefficient) { + return new kiwi.Expression([1 / coefficient, this]); + }; + /** + * Returns the JSON representation of the variable. + * @private + */ + Variable.prototype.toJSON = function () { + return { + name: this._name, + value: this._value + }; + }; + return Variable; + })(); + kiwi.Variable = Variable; + /** + * The internal variable id counter. + * @private + */ + var VarId = 0; +})(kiwi || (kiwi = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +/// +/// +/// +var kiwi; +(function (kiwi) { + /** + * An expression of variable terms and a constant. + * + * The constructor accepts an arbitrary number of parameters, + * each of which must be one of the following types: + * - number + * - Variable + * - Expression + * - 2-tuple of [number, Variable|Expression] + * + * The parameters are summed. The tuples are multiplied. + * + * @class + * @param {...(number|Variable|Expression|Array)} args + */ + var Expression = (function () { + function Expression() { + var parsed = parseArgs(arguments); + this._terms = parsed.terms; + this._constant = parsed.constant; + } + /** + * Returns the mapping of terms in the expression. + * + * This *must* be treated as const. + * @private + */ + Expression.prototype.terms = function () { + return this._terms; + }; + /** + * Returns the constant of the expression. + * @private + */ + Expression.prototype.constant = function () { + return this._constant; + }; + /** + * Returns the computed value of the expression. + * + * @private + * @return {Number} computed value of the expression + */ + Expression.prototype.value = function () { + var result = this._constant; + for (var i = 0, n = this._terms.size(); i < n; i++) { + var pair = this._terms.itemAt(i); + result += pair.first.value() * pair.second; + } + return result; + }; + /** + * Creates a new Expression by adding a number, variable or expression + * to the expression. + * + * @param {Number|Variable|Expression} value Value to add. + * @return {Expression} expression + */ + Expression.prototype.plus = function (value) { + return new Expression(this, value); + }; + /** + * Creates a new Expression by substracting a number, variable or expression + * from the expression. + * + * @param {Number|Variable|Expression} value Value to substract. + * @return {Expression} expression + */ + Expression.prototype.minus = function (value) { + return new Expression(this, typeof value === 'number' ? -value : [-1, value]); + }; + /** + * Creates a new Expression by multiplying with a fixed number. + * + * @param {Number} coefficient Coefficient to multiply with. + * @return {Expression} expression + */ + Expression.prototype.multiply = function (coefficient) { + return new Expression([coefficient, this]); + }; + /** + * Creates a new Expression by dividing with a fixed number. + * + * @param {Number} coefficient Coefficient to divide by. + * @return {Expression} expression + */ + Expression.prototype.divide = function (coefficient) { + return new Expression([1 / coefficient, this]); + }; + return Expression; + })(); + kiwi.Expression = Expression; + /** + * An internal argument parsing function. + * @private + */ + function parseArgs(args) { + var constant = 0.0; + var factory = function () { return 0.0; }; + var terms = kiwi.createMap(kiwi.Variable.Compare); + for (var i = 0, n = args.length; i < n; ++i) { + var item = args[i]; + if (typeof item === "number") { + constant += item; + } + else if (item instanceof kiwi.Variable) { + terms.setDefault(item, factory).second += 1.0; + } + else if (item instanceof Expression) { + constant += item.constant(); + var terms2 = item.terms(); + for (var j = 0, k = terms2.size(); j < k; j++) { + var termPair = terms2.itemAt(j); + terms.setDefault(termPair.first, factory).second += termPair.second; + } + } + else if (item instanceof Array) { + if (item.length !== 2) { + throw new Error("array must have length 2"); + } + var value = item[0]; + var value2 = item[1]; + if (typeof value !== "number") { + throw new Error("array item 0 must be a number"); + } + if (value2 instanceof kiwi.Variable) { + terms.setDefault(value2, factory).second += value; + } + else if (value2 instanceof Expression) { + constant += (value2.constant() * value); + var terms2 = value2.terms(); + for (var j = 0, k = terms2.size(); j < k; j++) { + var termPair = terms2.itemAt(j); + terms.setDefault(termPair.first, factory).second += (termPair.second * value); + } + } + else { + throw new Error("array item 1 must be a variable or expression"); + } + } + else { + throw new Error("invalid Expression argument: " + item); + } + } + return { terms: terms, constant: constant }; + } +})(kiwi || (kiwi = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +var kiwi; +(function (kiwi) { + /** + * @class Strength + */ + var Strength; + (function (Strength) { + /** + * Create a new symbolic strength. + * + * @param {Number} a strong + * @param {Number} b medium + * @param {Number} c weak + * @param {Number} [w] weight + * @return {Number} strength + */ + function create(a, b, c, w) { + if (w === void 0) { w = 1.0; } + var result = 0.0; + result += Math.max(0.0, Math.min(1000.0, a * w)) * 1000000.0; + result += Math.max(0.0, Math.min(1000.0, b * w)) * 1000.0; + result += Math.max(0.0, Math.min(1000.0, c * w)); + return result; + } + Strength.create = create; + /** + * The 'required' symbolic strength. + */ + Strength.required = create(1000.0, 1000.0, 1000.0); + /** + * The 'strong' symbolic strength. + */ + Strength.strong = create(1.0, 0.0, 0.0); + /** + * The 'medium' symbolic strength. + */ + Strength.medium = create(0.0, 1.0, 0.0); + /** + * The 'weak' symbolic strength. + */ + Strength.weak = create(0.0, 0.0, 1.0); + /** + * Clip a symbolic strength to the allowed min and max. + * @private + */ + function clip(value) { + return Math.max(0.0, Math.min(Strength.required, value)); + } + Strength.clip = clip; + })(Strength = kiwi.Strength || (kiwi.Strength = {})); +})(kiwi || (kiwi = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +/// +/// +/// +/// +/// +/// +var kiwi; +(function (kiwi) { + /** + * The constraint solver class. + * + * @class + */ + var Solver = (function () { + /** + * Construct a new Solver. + */ + function Solver() { + this._cnMap = createCnMap(); + this._rowMap = createRowMap(); + this._varMap = createVarMap(); + this._editMap = createEditMap(); + this._infeasibleRows = []; + this._objective = new Row(); + this._artificial = null; + this._idTick = 0; + } + /** + * Creates and add a constraint to the solver. + * + * @param {Expression|Variable} lhs Left hand side of the expression + * @param {Operator} operator Operator + * @param {Expression|Variable|Number} rhs Right hand side of the expression + * @param {Number} [strength=Strength.required] Strength + */ + Solver.prototype.createConstraint = function (lhs, operator, rhs, strength) { + if (strength === void 0) { strength = kiwi.Strength.required; } + var cn = new kiwi.Constraint(lhs, operator, rhs, strength); + this.addConstraint(cn); + return cn; + }; + /** + * Add a constraint to the solver. + * + * @param {Constraint} constraint Constraint to add to the solver + */ + Solver.prototype.addConstraint = function (constraint) { + var cnPair = this._cnMap.find(constraint); + if (cnPair !== undefined) { + throw new Error("duplicate constraint"); + } + // Creating a row causes symbols to be reserved for the variables + // in the constraint. If this method exits with an exception, + // then its possible those variables will linger in the var map. + // Since its likely that those variables will be used in other + // constraints and since exceptional conditions are uncommon, + // i'm not too worried about aggressive cleanup of the var map. + var data = this._createRow(constraint); + var row = data.row; + var tag = data.tag; + var subject = this._chooseSubject(row, tag); + // If chooseSubject couldnt find a valid entering symbol, one + // last option is available if the entire row is composed of + // dummy variables. If the constant of the row is zero, then + // this represents redundant constraints and the new dummy + // marker can enter the basis. If the constant is non-zero, + // then it represents an unsatisfiable constraint. + if (subject.type() === 0 /* Invalid */ && row.allDummies()) { + if (!nearZero(row.constant())) { + throw new Error("unsatisfiable constraint"); + } + else { + subject = tag.marker; + } + } + // If an entering symbol still isn't found, then the row must + // be added using an artificial variable. If that fails, then + // the row represents an unsatisfiable constraint. + if (subject.type() === 0 /* Invalid */) { + if (!this._addWithArtificialVariable(row)) { + throw new Error("unsatisfiable constraint"); + } + } + else { + row.solveFor(subject); + this._substitute(subject, row); + this._rowMap.insert(subject, row); + } + this._cnMap.insert(constraint, tag); + // Optimizing after each constraint is added performs less + // aggregate work due to a smaller average system size. It + // also ensures the solver remains in a consistent state. + this._optimize(this._objective); + }; + /** + * Remove a constraint from the solver. + * + * @param {Constraint} constraint Constraint to remove from the solver + */ + Solver.prototype.removeConstraint = function (constraint) { + var cnPair = this._cnMap.erase(constraint); + if (cnPair === undefined) { + throw new Error("unknown constraint"); + } + // Remove the error effects from the objective function + // *before* pivoting, or substitutions into the objective + // will lead to incorrect solver results. + this._removeConstraintEffects(constraint, cnPair.second); + // If the marker is basic, simply drop the row. Otherwise, + // pivot the marker into the basis and then drop the row. + var marker = cnPair.second.marker; + var rowPair = this._rowMap.erase(marker); + if (rowPair === undefined) { + var leaving = this._getMarkerLeavingSymbol(marker); + if (leaving.type() === 0 /* Invalid */) { + throw new Error("failed to find leaving row"); + } + rowPair = this._rowMap.erase(leaving); + rowPair.second.solveForEx(leaving, marker); + this._substitute(marker, rowPair.second); + } + // Optimizing after each constraint is removed ensures that the + // solver remains consistent. It makes the solver api easier to + // use at a small tradeoff for speed. + this._optimize(this._objective); + }; + /** + * Test whether the solver contains the constraint. + * + * @param {Constraint} constraint Constraint to test for + * @return {Bool} true or false + */ + Solver.prototype.hasConstraint = function (constraint) { + return this._cnMap.contains(constraint); + }; + /** + * Add an edit variable to the solver. + * + * @param {Variable} variable Edit variable to add to the solver + * @param {Number} strength Strength, should be less than `Strength.required` + */ + Solver.prototype.addEditVariable = function (variable, strength) { + var editPair = this._editMap.find(variable); + if (editPair !== undefined) { + throw new Error("duplicate edit variable"); + } + strength = kiwi.Strength.clip(strength); + if (strength === kiwi.Strength.required) { + throw new Error("bad required strength"); + } + var expr = new kiwi.Expression(variable); + var cn = new kiwi.Constraint(expr, 2 /* Eq */, undefined, strength); + this.addConstraint(cn); + var tag = this._cnMap.find(cn).second; + var info = { tag: tag, constraint: cn, constant: 0.0 }; + this._editMap.insert(variable, info); + }; + /** + * Remove an edit variable from the solver. + * + * @param {Variable} variable Edit variable to remove from the solver + */ + Solver.prototype.removeEditVariable = function (variable) { + var editPair = this._editMap.erase(variable); + if (editPair === undefined) { + throw new Error("unknown edit variable"); + } + this.removeConstraint(editPair.second.constraint); + }; + /** + * Test whether the solver contains the edit variable. + * + * @param {Variable} variable Edit variable to test for + * @return {Bool} true or false + */ + Solver.prototype.hasEditVariable = function (variable) { + return this._editMap.contains(variable); + }; + /** + * Suggest the value of an edit variable. + * + * @param {Variable} variable Edit variable to suggest a value for + * @param {Number} value Suggested value + */ + Solver.prototype.suggestValue = function (variable, value) { + var editPair = this._editMap.find(variable); + if (editPair === undefined) { + throw new Error("unknown edit variable"); + } + var rows = this._rowMap; + var info = editPair.second; + var delta = value - info.constant; + info.constant = value; + // Check first if the positive error variable is basic. + var marker = info.tag.marker; + var rowPair = rows.find(marker); + if (rowPair !== undefined) { + if (rowPair.second.add(-delta) < 0.0) { + this._infeasibleRows.push(marker); + } + this._dualOptimize(); + return; + } + // Check next if the negative error variable is basic. + var other = info.tag.other; + var rowPair = rows.find(other); + if (rowPair !== undefined) { + if (rowPair.second.add(delta) < 0.0) { + this._infeasibleRows.push(other); + } + this._dualOptimize(); + return; + } + for (var i = 0, n = rows.size(); i < n; ++i) { + var rowPair = rows.itemAt(i); + var row = rowPair.second; + var coeff = row.coefficientFor(marker); + if (coeff !== 0.0 && row.add(delta * coeff) < 0.0 && rowPair.first.type() !== 1 /* External */) { + this._infeasibleRows.push(rowPair.first); + } + } + this._dualOptimize(); + }; + /** + * Update the values of the variables. + */ + Solver.prototype.updateVariables = function () { + var vars = this._varMap; + var rows = this._rowMap; + for (var i = 0, n = vars.size(); i < n; ++i) { + var pair = vars.itemAt(i); + var rowPair = rows.find(pair.second); + if (rowPair !== undefined) { + pair.first.setValue(rowPair.second.constant()); + } + else { + pair.first.setValue(0.0); + } + } + }; + /** + * Get the symbol for the given variable. + * + * If a symbol does not exist for the variable, one will be created. + * @private + */ + Solver.prototype._getVarSymbol = function (variable) { + var _this = this; + var factory = function () { return _this._makeSymbol(1 /* External */); }; + return this._varMap.setDefault(variable, factory).second; + }; + /** + * Create a new Row object for the given constraint. + * + * The terms in the constraint will be converted to cells in the row. + * Any term in the constraint with a coefficient of zero is ignored. + * This method uses the `_getVarSymbol` method to get the symbol for + * the variables added to the row. If the symbol for a given cell + * variable is basic, the cell variable will be substituted with the + * basic row. + * + * The necessary slack and error variables will be added to the row. + * If the constant for the row is negative, the sign for the row + * will be inverted so the constant becomes positive. + * + * Returns the created Row and the tag for tracking the constraint. + * @private + */ + Solver.prototype._createRow = function (constraint) { + var expr = constraint.expression(); + var row = new Row(expr.constant()); + // Substitute the current basic variables into the row. + var terms = expr.terms(); + for (var i = 0, n = terms.size(); i < n; ++i) { + var termPair = terms.itemAt(i); + if (!nearZero(termPair.second)) { + var symbol = this._getVarSymbol(termPair.first); + var basicPair = this._rowMap.find(symbol); + if (basicPair !== undefined) { + row.insertRow(basicPair.second, termPair.second); + } + else { + row.insertSymbol(symbol, termPair.second); + } + } + } + // Add the necessary slack, error, and dummy variables. + var objective = this._objective; + var strength = constraint.strength(); + var tag = { marker: INVALID_SYMBOL, other: INVALID_SYMBOL }; + switch (constraint.op()) { + case 0 /* Le */: + case 1 /* Ge */: + { + var coeff = constraint.op() === 0 /* Le */ ? 1.0 : -1.0; + var slack = this._makeSymbol(2 /* Slack */); + tag.marker = slack; + row.insertSymbol(slack, coeff); + if (strength < kiwi.Strength.required) { + var error = this._makeSymbol(3 /* Error */); + tag.other = error; + row.insertSymbol(error, -coeff); + objective.insertSymbol(error, strength); + } + break; + } + case 2 /* Eq */: + { + if (strength < kiwi.Strength.required) { + var errplus = this._makeSymbol(3 /* Error */); + var errminus = this._makeSymbol(3 /* Error */); + tag.marker = errplus; + tag.other = errminus; + row.insertSymbol(errplus, -1.0); // v = eplus - eminus + row.insertSymbol(errminus, 1.0); // v - eplus + eminus = 0 + objective.insertSymbol(errplus, strength); + objective.insertSymbol(errminus, strength); + } + else { + var dummy = this._makeSymbol(4 /* Dummy */); + tag.marker = dummy; + row.insertSymbol(dummy); + } + break; + } + } + // Ensure the row has a positive constant. + if (row.constant() < 0.0) { + row.reverseSign(); + } + return { row: row, tag: tag }; + }; + /** + * Choose the subject for solving for the row. + * + * This method will choose the best subject for using as the solve + * target for the row. An invalid symbol will be returned if there + * is no valid target. + * + * The symbols are chosen according to the following precedence: + * + * 1) The first symbol representing an external variable. + * 2) A negative slack or error tag variable. + * + * If a subject cannot be found, an invalid symbol will be returned. + * + * @private + */ + Solver.prototype._chooseSubject = function (row, tag) { + var cells = row.cells(); + for (var i = 0, n = cells.size(); i < n; ++i) { + var pair = cells.itemAt(i); + if (pair.first.type() === 1 /* External */) { + return pair.first; + } + } + var type = tag.marker.type(); + if (type === 2 /* Slack */ || type === 3 /* Error */) { + if (row.coefficientFor(tag.marker) < 0.0) { + return tag.marker; + } + } + type = tag.other.type(); + if (type === 2 /* Slack */ || type === 3 /* Error */) { + if (row.coefficientFor(tag.other) < 0.0) { + return tag.other; + } + } + return INVALID_SYMBOL; + }; + /** + * Add the row to the tableau using an artificial variable. + * + * This will return false if the constraint cannot be satisfied. + * + * @private + */ + Solver.prototype._addWithArtificialVariable = function (row) { + // Create and add the artificial variable to the tableau. + var art = this._makeSymbol(2 /* Slack */); + this._rowMap.insert(art, row.copy()); + this._artificial = row.copy(); + // Optimize the artificial objective. This is successful + // only if the artificial objective is optimized to zero. + this._optimize(this._artificial); + var success = nearZero(this._artificial.constant()); + this._artificial = null; + // If the artificial variable is basic, pivot the row so that + // it becomes non-basic. If the row is constant, exit early. + var pair = this._rowMap.erase(art); + if (pair !== undefined) { + var basicRow = pair.second; + if (basicRow.isConstant()) { + return success; + } + var entering = this._anyPivotableSymbol(basicRow); + if (entering.type() === 0 /* Invalid */) { + return false; // unsatisfiable (will this ever happen?) + } + basicRow.solveForEx(art, entering); + this._substitute(entering, basicRow); + this._rowMap.insert(entering, basicRow); + } + // Remove the artificial variable from the tableau. + var rows = this._rowMap; + for (var i = 0, n = rows.size(); i < n; ++i) { + rows.itemAt(i).second.removeSymbol(art); + } + this._objective.removeSymbol(art); + return success; + }; + /** + * Substitute the parametric symbol with the given row. + * + * This method will substitute all instances of the parametric symbol + * in the tableau and the objective function with the given row. + * + * @private + */ + Solver.prototype._substitute = function (symbol, row) { + var rows = this._rowMap; + for (var i = 0, n = rows.size(); i < n; ++i) { + var pair = rows.itemAt(i); + pair.second.substitute(symbol, row); + if (pair.second.constant() < 0.0 && pair.first.type() !== 1 /* External */) { + this._infeasibleRows.push(pair.first); + } + } + this._objective.substitute(symbol, row); + if (this._artificial) { + this._artificial.substitute(symbol, row); + } + }; + /** + * Optimize the system for the given objective function. + * + * This method performs iterations of Phase 2 of the simplex method + * until the objective function reaches a minimum. + * + * @private + */ + Solver.prototype._optimize = function (objective) { + while (true) { + var entering = this._getEnteringSymbol(objective); + if (entering.type() === 0 /* Invalid */) { + return; + } + var leaving = this._getLeavingSymbol(entering); + if (leaving.type() === 0 /* Invalid */) { + throw new Error("the objective is unbounded"); + } + // pivot the entering symbol into the basis + var row = this._rowMap.erase(leaving).second; + row.solveForEx(leaving, entering); + this._substitute(entering, row); + this._rowMap.insert(entering, row); + } + }; + /** + * Optimize the system using the dual of the simplex method. + * + * The current state of the system should be such that the objective + * function is optimal, but not feasible. This method will perform + * an iteration of the dual simplex method to make the solution both + * optimal and feasible. + * + * @private + */ + Solver.prototype._dualOptimize = function () { + var rows = this._rowMap; + var infeasible = this._infeasibleRows; + while (infeasible.length !== 0) { + var leaving = infeasible.pop(); + var pair = rows.find(leaving); + if (pair !== undefined && pair.second.constant() < 0.0) { + var entering = this._getDualEnteringSymbol(pair.second); + if (entering.type() === 0 /* Invalid */) { + throw new Error("dual optimize failed"); + } + // pivot the entering symbol into the basis + var row = pair.second; + rows.erase(leaving); + row.solveForEx(leaving, entering); + this._substitute(entering, row); + rows.insert(entering, row); + } + } + }; + /** + * Compute the entering variable for a pivot operation. + * + * This method will return first symbol in the objective function which + * is non-dummy and has a coefficient less than zero. If no symbol meets + * the criteria, it means the objective function is at a minimum, and an + * invalid symbol is returned. + * + * @private + */ + Solver.prototype._getEnteringSymbol = function (objective) { + var cells = objective.cells(); + for (var i = 0, n = cells.size(); i < n; ++i) { + var pair = cells.itemAt(i); + var symbol = pair.first; + if (pair.second < 0.0 && symbol.type() !== 4 /* Dummy */) { + return symbol; + } + } + return INVALID_SYMBOL; + }; + /** + * Compute the entering symbol for the dual optimize operation. + * + * This method will return the symbol in the row which has a positive + * coefficient and yields the minimum ratio for its respective symbol + * in the objective function. The provided row *must* be infeasible. + * If no symbol is found which meats the criteria, an invalid symbol + * is returned. + * + * @private + */ + Solver.prototype._getDualEnteringSymbol = function (row) { + var ratio = Number.MAX_VALUE; + var entering = INVALID_SYMBOL; + var cells = row.cells(); + for (var i = 0, n = cells.size(); i < n; ++i) { + var pair = cells.itemAt(i); + var symbol = pair.first; + var c = pair.second; + if (c > 0.0 && symbol.type() !== 4 /* Dummy */) { + var coeff = this._objective.coefficientFor(symbol); + var r = coeff / c; + if (r < ratio) { + ratio = r; + entering = symbol; + } + } + } + return entering; + }; + /** + * Compute the symbol for pivot exit row. + * + * This method will return the symbol for the exit row in the row + * map. If no appropriate exit symbol is found, an invalid symbol + * will be returned. This indicates that the objective function is + * unbounded. + * + * @private + */ + Solver.prototype._getLeavingSymbol = function (entering) { + var ratio = Number.MAX_VALUE; + var found = INVALID_SYMBOL; + var rows = this._rowMap; + for (var i = 0, n = rows.size(); i < n; ++i) { + var pair = rows.itemAt(i); + var symbol = pair.first; + if (symbol.type() !== 1 /* External */) { + var row = pair.second; + var temp = row.coefficientFor(entering); + if (temp < 0.0) { + var temp_ratio = -row.constant() / temp; + if (temp_ratio < ratio) { + ratio = temp_ratio; + found = symbol; + } + } + } + } + return found; + }; + /** + * Compute the leaving symbol for a marker variable. + * + * This method will return a symbol corresponding to a basic row + * which holds the given marker variable. The row will be chosen + * according to the following precedence: + * + * 1) The row with a restricted basic varible and a negative coefficient + * for the marker with the smallest ratio of -constant / coefficient. + * + * 2) The row with a restricted basic variable and the smallest ratio + * of constant / coefficient. + * + * 3) The last unrestricted row which contains the marker. + * + * If the marker does not exist in any row, an invalid symbol will be + * returned. This indicates an internal solver error since the marker + * *should* exist somewhere in the tableau. + * + * @private + */ + Solver.prototype._getMarkerLeavingSymbol = function (marker) { + var dmax = Number.MAX_VALUE; + var r1 = dmax; + var r2 = dmax; + var invalid = INVALID_SYMBOL; + var first = invalid; + var second = invalid; + var third = invalid; + var rows = this._rowMap; + for (var i = 0, n = rows.size(); i < n; ++i) { + var pair = rows.itemAt(i); + var row = pair.second; + var c = row.coefficientFor(marker); + if (c === 0.0) { + continue; + } + var symbol = pair.first; + if (symbol.type() === 1 /* External */) { + third = symbol; + } + else if (c < 0.0) { + var r = -row.constant() / c; + if (r < r1) { + r1 = r; + first = symbol; + } + } + else { + var r = row.constant() / c; + if (r < r2) { + r2 = r; + second = symbol; + } + } + } + if (first !== invalid) { + return first; + } + if (second !== invalid) { + return second; + } + return third; + }; + /** + * Remove the effects of a constraint on the objective function. + * + * @private + */ + Solver.prototype._removeConstraintEffects = function (cn, tag) { + if (tag.marker.type() === 3 /* Error */) { + this._removeMarkerEffects(tag.marker, cn.strength()); + } + if (tag.other.type() === 3 /* Error */) { + this._removeMarkerEffects(tag.other, cn.strength()); + } + }; + /** + * Remove the effects of an error marker on the objective function. + * + * @private + */ + Solver.prototype._removeMarkerEffects = function (marker, strength) { + var pair = this._rowMap.find(marker); + if (pair !== undefined) { + this._objective.insertRow(pair.second, -strength); + } + else { + this._objective.insertSymbol(marker, -strength); + } + }; + /** + * Get the first Slack or Error symbol in the row. + * + * If no such symbol is present, an invalid symbol will be returned. + * + * @private + */ + Solver.prototype._anyPivotableSymbol = function (row) { + var cells = row.cells(); + for (var i = 0, n = cells.size(); i < n; ++i) { + var pair = cells.itemAt(i); + var type = pair.first.type(); + if (type === 2 /* Slack */ || type === 3 /* Error */) { + return pair.first; + } + } + return INVALID_SYMBOL; + }; + /** + * Returns a new Symbol of the given type. + * + * @private + */ + Solver.prototype._makeSymbol = function (type) { + return new Symbol(type, this._idTick++); + }; + return Solver; + })(); + kiwi.Solver = Solver; /** - * Width that was set using `setSize`. - * @readonly - * @type {Number} + * Test whether a value is approximately zero. + * @private */ - get: function () { - return this._parentSubView.intrinsicWidth; + function nearZero(value) { + var eps = 1.0e-8; + return value < 0.0 ? -value < eps : value < eps; } - }, { - key: 'height', - /** - * Height that was set using `setSize`. - * @readonly - * @type {Number} + * An internal function for creating a constraint map. + * @private */ - get: function () { - return this._parentSubView.intrinsicHeight; + function createCnMap() { + return kiwi.createMap(kiwi.Constraint.Compare); } - }, { - key: 'fittingWidth', - /** - * Width that is calculated from the constraints and the `.intrinsicWidth` of - * the sub-views. - * - * When the width has been explicitely set using `setSize`, the fittingWidth - * will **always** be the same as the explicitely set width. To calculate the size - * based on the content, use: - * ```javascript - * var view = new AutoLayout.View({ - * constraints: VisualFormat.parse('|-[view1]-[view2]-'), - * spacing: 20 - * }); - * view.subViews.view1.intrinsicWidth = 100; - * view.subViews.view2.intrinsicWidth = 100; - * console.log('fittingWidth: ' + view.fittingWidth); // 260 - * ``` - * - * @readonly - * @type {Number} + * An internal function for creating a row map. + * @private */ - get: function () { - return this._parentSubView.width; + function createRowMap() { + return kiwi.createMap(Symbol.Compare); } - }, { - key: 'fittingHeight', - /** - * Height that is calculated from the constraints and the `.intrinsicHeight` of - * the sub-views. - * - * See `.fittingWidth`. - * - * @readonly - * @type {Number} + * An internal function for creating a variable map. + * @private */ - get: function () { - return this._parentSubView.height; + function createVarMap() { + return kiwi.createMap(kiwi.Variable.Compare); } - }, { - key: 'setSpacing', - /** - * Sets the spacing for the view. - * - * The spacing can be set for 7 different variables: - * `top`, `right`, `bottom`, `left`, `width`, `height` and `zIndex`. The `left`-spacing is - * used when a spacer is used between the parent-view and a sub-view (e.g. `|-[subView]`). - * The same is true for the `right`, `top` and `bottom` spacers. The `width` and `height` are - * used for spacers in between sub-views (e.g. `[view1]-[view2]`). - * - * Instead of using the full spacing syntax, it is also possible to use shorthand notations: - * - * |Syntax|Type|Description| - * |---|---|---| - * |`[top, right, bottom, left, width, height, zIndex]`|Array(7)|Full syntax including z-index **(clockwise order)**.| - * |`[top, right, bottom, left, width, height]`|Array(6)|Full horizontal & vertical spacing syntax (no z-index) **(clockwise order)**.| - * |`[horizontal, vertical, zIndex]`|Array(3)|Horizontal = left, right, width, vertical = top, bottom, height.| - * |`[horizontal, vertical]`|Array(2)|Horizontal = left, right, width, vertical = top, bottom, height, z-index = 1.| - * |`spacing`|Number|Horizontal & vertical spacing are all the same, z-index = 1.| - * - * Examples: - * ```javascript - * view.setSpacing(10); // horizontal & vertical spacing 10 - * view.setSpacing([10, 15, 2]); // horizontal spacing 10, vertical spacing 15, z-axis spacing 2 - * view.setSpacing([10, 20, 10, 20, 5, 5]); // top, right, bottom, left, horizontal, vertical - * view.setSpacing([10, 20, 10, 20, 5, 5, 1]); // top, right, bottom, left, horizontal, vertical, z - * ``` - * - * @param {Number|Array} spacing - * @return {View} this + * An internal function for creating an edit map. + * @private */ - value: function setSpacing(spacing) { - // convert spacing into array: [top, right, bottom, left, horz, vert, z-index] - switch (Array.isArray(spacing) ? spacing.length : -1) { - case -1: - spacing = [spacing, spacing, spacing, spacing, spacing, spacing, 1];break; - case 1: - spacing = [spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], 1];break; - case 2: - spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], 1];break; - case 3: - spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], spacing[2]];break; - case 6: - spacing = [spacing[0], spacing[1], spacing[2], spacing[3], spacing[4], spacing[5], 1];break; - case 7: - break; - default: - throw 'Invalid spacing syntax'; - } - if (!_compareSpacing(this._spacing, spacing)) { - this._spacing = spacing; - // update spacing variables - if (this._spacingVars) { - for (var i = 0; i < this._spacingVars.length; i++) { - if (this._spacingVars[i]) { - this._solver.suggestValue(this._spacingVars[i], this._spacing[i]); - } - } - if (false) { - this._solver.resolve(); - } else { - this._solver.updateVariables(); - } - } - } - return this; + function createEditMap() { + return kiwi.createMap(kiwi.Variable.Compare); } - }, { - key: 'addConstraint', - /** - * Adds a constraint definition. - * - * A constraint definition has the following format: - * - * ```javascript - * constraint: { - * view1: {String}, - * attr1: {AutoLayout.Attribute}, - * relation: {AutoLayout.Relation}, - * view2: {String}, - * attr2: {AutoLayout.Attribute}, - * multiplier: {Number}, - * constant: {Number}, - * priority: {Number}(0..1000) - * } - * ``` - * @param {Object} constraint Constraint definition. - * @return {View} this + * An enum defining the available symbol types. + * @private */ - value: function addConstraint(constraint) { - _addConstraint.call(this, constraint); - if (!false) { - this._solver.updateVariables(); - } - return this; - } - }, { - key: 'addConstraints', - + var SymbolType; + (function (SymbolType) { + SymbolType[SymbolType["Invalid"] = 0] = "Invalid"; + SymbolType[SymbolType["External"] = 1] = "External"; + SymbolType[SymbolType["Slack"] = 2] = "Slack"; + SymbolType[SymbolType["Error"] = 3] = "Error"; + SymbolType[SymbolType["Dummy"] = 4] = "Dummy"; + })(SymbolType || (SymbolType = {})); /** - * Adds one or more constraint definitions. - * - * A constraint definition has the following format: - * - * ```javascript - * constraint: { - * view1: {String}, - * attr1: {AutoLayout.Attribute}, - * relation: {AutoLayout.Relation}, - * view2: {String}, - * attr2: {AutoLayout.Attribute}, - * multiplier: {Number}, - * constant: {Number}, - * priority: {Number}(0..1000) - * } - * ``` - * @param {Array} constraints One or more constraint definitions. - * @return {View} this + * An internal class representing a symbol in the solver. + * @private */ - value: function addConstraints(constraints) { - for (var j = 0; j < constraints.length; j++) { - _addConstraint.call(this, constraints[j]); - } - if (!false) { - this._solver.updateVariables(); - } - return this; - } - }, { - key: 'subViews', - + var Symbol = (function () { + /** + * Construct a new Symbol + * + * @param [type] The type of the symbol. + * @param [id] The unique id number of the symbol. + */ + function Symbol(type, id) { + this._id = id; + this._type = type; + } + /** + * The static Symbol comparison function. + */ + Symbol.Compare = function (a, b) { + return a.id() - b.id(); + }; + /** + * Returns the unique id number of the symbol. + */ + Symbol.prototype.id = function () { + return this._id; + }; + /** + * Returns the type of the symbol. + */ + Symbol.prototype.type = function () { + return this._type; + }; + return Symbol; + })(); /** - * Dictionary of `SubView` objects that have been created when adding constraints. - * @readonly - * @type {Object.SubView} + * A static invalid symbol + * @private */ - get: function () { - return this._subViews; - } - + var INVALID_SYMBOL = new Symbol(0 /* Invalid */, -1); /** - * Checks whether the constraints incompletely specify the location - * of the subViews. + * An internal row class used by the solver. * @private */ - //get hasAmbiguousLayout() { - // Todo - //} - - }]); - - return View; -})(); + var Row = (function () { + /** + * Construct a new Row. + */ + function Row(constant) { + if (constant === void 0) { constant = 0.0; } + this._cellMap = kiwi.createMap(Symbol.Compare); + this._constant = constant; + } + /** + * Returns the mapping of symbols to coefficients. + */ + Row.prototype.cells = function () { + return this._cellMap; + }; + /** + * Returns the constant for the row. + */ + Row.prototype.constant = function () { + return this._constant; + }; + /** + * Returns true if the row is a constant value. + */ + Row.prototype.isConstant = function () { + return this._cellMap.empty(); + }; + /** + * Returns true if the Row has all dummy symbols. + */ + Row.prototype.allDummies = function () { + var cells = this._cellMap; + for (var i = 0, n = cells.size(); i < n; ++i) { + var pair = cells.itemAt(i); + if (pair.first.type() !== 4 /* Dummy */) { + return false; + } + } + return true; + }; + /** + * Create a copy of the row. + */ + Row.prototype.copy = function () { + var theCopy = new Row(this._constant); + theCopy._cellMap = this._cellMap.copy(); + return theCopy; + }; + /** + * Add a constant value to the row constant. + * + * Returns the new value of the constant. + */ + Row.prototype.add = function (value) { + return this._constant += value; + }; + /** + * Insert the symbol into the row with the given coefficient. + * + * If the symbol already exists in the row, the coefficient + * will be added to the existing coefficient. If the resulting + * coefficient is zero, the symbol will be removed from the row. + */ + Row.prototype.insertSymbol = function (symbol, coefficient) { + if (coefficient === void 0) { coefficient = 1.0; } + var pair = this._cellMap.setDefault(symbol, function () { return 0.0; }); + if (nearZero(pair.second += coefficient)) { + this._cellMap.erase(symbol); + } + }; + /** + * Insert a row into this row with a given coefficient. + * + * The constant and the cells of the other row will be + * multiplied by the coefficient and added to this row. Any + * cell with a resulting coefficient of zero will be removed + * from the row. + */ + Row.prototype.insertRow = function (other, coefficient) { + if (coefficient === void 0) { coefficient = 1.0; } + this._constant += other._constant * coefficient; + var cells = other._cellMap; + for (var i = 0, n = cells.size(); i < n; ++i) { + var pair = cells.itemAt(i); + this.insertSymbol(pair.first, pair.second * coefficient); + } + }; + /** + * Remove a symbol from the row. + */ + Row.prototype.removeSymbol = function (symbol) { + this._cellMap.erase(symbol); + }; + /** + * Reverse the sign of the constant and cells in the row. + */ + Row.prototype.reverseSign = function () { + this._constant = -this._constant; + var cells = this._cellMap; + for (var i = 0, n = cells.size(); i < n; ++i) { + var pair = cells.itemAt(i); + pair.second = -pair.second; + } + }; + /** + * Solve the row for the given symbol. + * + * This method assumes the row is of the form + * a * x + b * y + c = 0 and (assuming solve for x) will modify + * the row to represent the right hand side of + * x = -b/a * y - c / a. The target symbol will be removed from + * the row, and the constant and other cells will be multiplied + * by the negative inverse of the target coefficient. + * + * The given symbol *must* exist in the row. + */ + Row.prototype.solveFor = function (symbol) { + var cells = this._cellMap; + var pair = cells.erase(symbol); + var coeff = -1.0 / pair.second; + this._constant *= coeff; + for (var i = 0, n = cells.size(); i < n; ++i) { + cells.itemAt(i).second *= coeff; + } + }; + /** + * Solve the row for the given symbols. + * + * This method assumes the row is of the form + * x = b * y + c and will solve the row such that + * y = x / b - c / b. The rhs symbol will be removed from the + * row, the lhs added, and the result divided by the negative + * inverse of the rhs coefficient. + * + * The lhs symbol *must not* exist in the row, and the rhs + * symbol must* exist in the row. + */ + Row.prototype.solveForEx = function (lhs, rhs) { + this.insertSymbol(lhs, -1.0); + this.solveFor(rhs); + }; + /** + * Returns the coefficient for the given symbol. + */ + Row.prototype.coefficientFor = function (symbol) { + var pair = this._cellMap.find(symbol); + return pair !== undefined ? pair.second : 0.0; + }; + /** + * Substitute a symbol with the data from another row. + * + * Given a row of the form a * x + b and a substitution of the + * form x = 3 * y + c the row will be updated to reflect the + * expression 3 * a * y + a * c + b. + * + * If the symbol does not exist in the row, this is a no-op. + */ + Row.prototype.substitute = function (symbol, row) { + var pair = this._cellMap.erase(symbol); + if (pair !== undefined) { + this.insertRow(row, pair.second); + } + }; + return Row; + })(); +})(kiwi || (kiwi = {})); +/*----------------------------------------------------------------------------- +| Copyright (c) 2014, Nucleic Development Team. +| +| Distributed under the terms of the Modified BSD License. +| +| The full license is in the file COPYING.txt, distributed with this software. +|----------------------------------------------------------------------------*/ +/// +/// +/// +/// +/// +/// -var AutoLayout = { - Attribute: Attribute, - Relation: Relation, - Priority: Priority, - VisualFormat: VisualFormat, - View: View, - SubView: SubView - //DOM: DOM -}; +return kiwi; -module.exports = AutoLayout; +})); -},{"kiwi/ts/bin/kiwi":1}]},{},[2])(2) +},{}]},{},[1])(1) }); \ No newline at end of file diff --git a/dist/autolayout.min.js b/dist/autolayout.min.js index de9b78b..f3d0335 100644 --- a/dist/autolayout.min.js +++ b/dist/autolayout.min.js @@ -8,8 +8,7 @@ * @copyright Gloey Apps, 2015 * * @library autolayout.js -* @version 0.4.2 -* @generated 28-07-2015 +* @version 0.4.3 */ /** * Parts Copyright (C) 2011-2012, Alex Russell (slightlyoff@chromium.org) @@ -18,14 +17,13 @@ * Use of this source code is governed by the LGPL, which can be found in the * COPYING.LGPL file. */ - (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AutoLayout = f()}})(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;o1&&t.constraints.push({view1:"_~"+t.lineIndex+":1~",attr1:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,relation:t.relation.relation||Relation.EQU,view2:r,attr2:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,priority:t.relation.priority}),t.equalSpacerIndex++,t.relation.view||t.relation.multiplier&&1!==t.relation.multiplier?(t.constraints.push({view1:r,attr1:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,relation:t.relation.relation||Relation.EQU,view2:t.relation.view,attr2:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,priority:t.relation.priority,multiplier:t.relation.multiplier}),t.relation.multiplier=void 0):t.relation.constant&&(t.constraints.push({view1:r,attr1:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,relation:Relation.EQU,view2:null,attr2:Attribute.CONST,priority:t.relation.priority,constant:t.relation.constant}),t.relation.constant=void 0),t.orientation){case Orientation.HORIZONTAL:t.attr1=t.view1!==e?Attribute.RIGHT:Attribute.LEFT,t.attr2=Attribute.LEFT;break;case Orientation.VERTICAL:t.attr1=t.view1!==e?Attribute.BOTTOM:Attribute.TOP,t.attr2=Attribute.TOP;break;case Orientation.ZINDEX:t.attr1=Attribute.ZINDEX,t.attr2=Attribute.ZINDEX,t.relation.constant=t.view1!==e?"default":0}t.constraints.push({view1:t.view1,attr1:t.attr1,relation:t.relation.relation,view2:r,attr2:t.attr2,priority:t.relation.priority}),t.view1=r}function _processProportionalSpacer(t,e){t.proportionalSpacerIndex=t.proportionalSpacerIndex||1;var r="_-"+t.lineIndex+":"+t.proportionalSpacerIndex+"-";switch(t.proportionalSpacerIndex++,t.constraints.push({view1:r,attr1:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,relation:t.relation.relation||Relation.EQU,view2:t.relation.view,attr2:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,priority:t.relation.priority,multiplier:t.relation.multiplier}),t.relation.multiplier=void 0,t.orientation){case Orientation.HORIZONTAL:t.attr1=t.view1!==e?Attribute.RIGHT:Attribute.LEFT,t.attr2=Attribute.LEFT;break;case Orientation.VERTICAL:t.attr1=t.view1!==e?Attribute.BOTTOM:Attribute.TOP,t.attr2=Attribute.TOP;break;case Orientation.ZINDEX:t.attr1=Attribute.ZINDEX,t.attr2=Attribute.ZINDEX,t.relation.constant=t.view1!==e?"default":0}t.constraints.push({view1:t.view1,attr1:t.attr1,relation:t.relation.relation,view2:r,attr2:t.attr2,priority:t.relation.priority}),t.view1=r}function _processStackView(t,e,r){for(var i=void 0,n=1;4>=n;n*=2)if(r.orientations&n&&r.stack.orientation!==n&&!(r.stack.processedOrientations&n)){r.stack.processedOrientations=r.stack.processedOrientations|n,i=i||{name:e,type:"stack"};for(var a=0,s=r.stack.subViews.length;s>a;a++)n===Orientation.ZINDEX?t.constraints.push({view1:i,attr1:Attribute.ZINDEX,relation:Relation.EQU,view2:r.stack.subViews[a],attr2:Attribute.ZINDEX}):(t.constraints.push({view1:i,attr1:n===Orientation.VERTICAL?Attribute.HEIGHT:Attribute.WIDTH,relation:Relation.EQU,view2:r.stack.subViews[a],attr2:n===Orientation.VERTICAL?Attribute.HEIGHT:Attribute.WIDTH}),t.constraints.push({view1:i,attr1:n===Orientation.VERTICAL?Attribute.TOP:Attribute.LEFT,relation:Relation.EQU,view2:r.stack.subViews[a],attr2:n===Orientation.VERTICAL?Attribute.TOP:Attribute.LEFT}))}}function _processCascade(t,e,r){var i=r?r.view:null,n=[],a=void 0;i&&e.push({view:i});for(var s=0;sr;r++)if(t[r]!==e[r])return!1;return!0}var _createClass=function(){function t(t,e){for(var r=0;rn;n++)a=t.charAt(n),"\n"===a?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===a||"\u2028"===a||"\u2029"===a?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}return kt!==e&&(kt>e&&(kt=0,Rt={line:1,column:1,seenCR:!1}),r(Rt,kt,e),kt=e),Rt}function n(t){Ft>St||(St>Ft&&(Ft=St,Nt=[]),Nt.push(t))}function a(r,n,a){function s(t){var e=1;for(t.sort(function(t,e){return t.descriptione.description?1:0});e1?s.slice(0,-1).join(", ")+" or "+s[t.length-1]:s[0],n=e?'"'+r(e)+'"':"end of input","Expected "+i+" but "+n+" found."}var u=i(a),c=a1?arguments[1]:{},E={},I={visualFormatString:s},T=s,V=E,O=null,H=":",S={type:"literal",value:":",description:'":"'},x=function(t,e,r,i,n){return{orientation:t?t[0]:"horizontal",cascade:(e||[]).concat([r],[].concat.apply([],i),n||[])}},k="H",R={type:"literal",value:"H",description:'"H"'},F="V",N={type:"literal",value:"V",description:'"V"'},L=function(t){return"H"==t?"horizontal":"vertical"},q="|",Z={type:"literal",value:"|",description:'"|"'},D=function(){return{view:null}},z="[",G={type:"literal",value:"[",description:'"["'},X="]",P={type:"literal",value:"]",description:'"]"'},W=function(t,e){return y(t,e?{constraints:e}:{})},Q="-",U={type:"literal",value:"-",description:'"-"'},B=function(t){return t},j=function(){return[{relation:"equ",constant:"default",$parserOffset:r()}]},Y="",M=function(){return[{relation:"equ",constant:0,$parserOffset:r()}]},$=function(t){return[{relation:"equ",constant:t,$parserOffset:r()}]},J="(",K={type:"literal",value:"(",description:'"("'},tt=",",et={type:"literal",value:",",description:'","'},rt=")",it={type:"literal",value:")",description:'")"'},nt=function(t,e){return[t].concat(e.map(function(t){return t[1]}))},at="@",st={type:"literal",value:"@",description:'"@"'},ot=function(t,e,r){return y({relation:"equ"},t||{},e,r?r[1]:{})},ut="==",ct={type:"literal",value:"==",description:'"=="'},lt=function(){return{relation:"equ",$parserOffset:r()}},ht="<=",pt={type:"literal",value:"<=",description:'"<="'},ft=function(){return{relation:"leq",$parserOffset:r()}},dt=">=",vt={type:"literal",value:">=",description:'">="'},At=function(){return{relation:"geq",$parserOffset:r()}},gt=/^[0-9]/,bt={type:"class",value:"[0-9]",description:"[0-9]"},wt=function(t){return{priority:parseInt(t.join(""),10)}},_t=function(t){return{constant:t}},yt=/^[a-zA-Z_]/,mt={type:"class",value:"[a-zA-Z_]",description:"[a-zA-Z_]"},Ct=/^[a-zA-Z0-9_]/,Et={type:"class",value:"[a-zA-Z0-9_]",description:"[a-zA-Z0-9_]"},It=function(t,e){return{view:t+e}},Tt=".",Vt={type:"literal",value:".",description:'"."'},Ot=function(t,e){return parseFloat(t.concat(".").concat(e).join(""),10)},Ht=function(t){return parseInt(t.join(""),10)},St=0,xt=0,kt=0,Rt={line:1,column:1,seenCR:!1},Ft=0,Nt=[],Lt=0;if("startRule"in C){if(!(C.startRule in I))throw new Error("Can't start parsing from rule \""+C.startRule+'".');T=I[C.startRule]}if(m=T(),m!==E&&St===t.length)return m;throw m!==E&&Stn;n++)a=t.charAt(n),"\n"===a?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===a||"\u2028"===a||"\u2029"===a?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}return Qe!==e&&(Qe>e&&(Qe=0,Ue={line:1,column:1,seenCR:!1}),r(Ue,Qe,e),Qe=e),Ue}function n(t){Be>Pe||(Pe>Be&&(Be=Pe,je=[]),je.push(t))}function a(r,n,a){function s(t){var e=1;for(t.sort(function(t,e){return t.descriptione.description?1:0});e1?s.slice(0,-1).join(", ")+" or "+s[t.length-1]:s[0],n=e?'"'+r(e)+'"':"end of input","Expected "+i+" but "+n+" found."}var u=i(a),c=aPe?(s=t.charAt(Pe),Pe++):(s=R,0===Ye&&n(it));s!==R;)a.push(s),t.length>Pe?(s=t.charAt(Pe),Pe++):(s=R,0===Ye&&n(it));a!==R?(r=[r,i,a],e=r):(Pe=e,e=L)}else Pe=e,e=L;else Pe=e,e=L;return e}function c(){var e,r;return e=Pe,124===t.charCodeAt(Pe)?(r=nt,Pe++):(r=R,0===Ye&&n(at)),r!==R&&(We=e,r=st()),e=r}function l(){var e,r,i,a,s,o;return e=Pe,91===t.charCodeAt(Pe)?(r=ot,Pe++):(r=R,0===Ye&&n(ut)),r!==R?(i=O(),i!==R?(a=v(),a===R&&(a=q),a!==R?(s=h(),s===R&&(s=q),s!==R?(93===t.charCodeAt(Pe)?(o=ct,Pe++):(o=R,0===Ye&&n(lt)),o!==R?(We=e,r=ht(i,a,s),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e}function h(){var e,r,i,a,s,o;if(e=Pe,58===t.charCodeAt(Pe)?(r=Z,Pe++):(r=R,0===Ye&&n(D)),r!==R){if(i=[],a=Pe,s=p(),s!==R?(o=l(),o!==R?(s=[s,o],a=s):(Pe=a,a=L)):(Pe=a,a=L),a!==R)for(;a!==R;)i.push(a),a=Pe,s=p(),s!==R?(o=l(),o!==R?(s=[s,o],a=s):(Pe=a,a=L)):(Pe=a,a=L);else i=L;i!==R?(a=p(),a!==R?(We=e,r=pt(i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)}else Pe=e,e=L;return e}function p(){var e,r,i,a;return e=Pe,t.substr(Pe,2)===ft?(r=ft,Pe+=2):(r=R,0===Ye&&n(dt)),r!==R&&(We=e,r=vt()),e=r,e===R&&(e=Pe,45===t.charCodeAt(Pe)?(r=At,Pe++):(r=R,0===Ye&&n(gt)),r!==R?(i=f(),i!==R?(45===t.charCodeAt(Pe)?(a=At,Pe++):(a=R,0===Ye&&n(gt)),a!==R?(We=e,r=bt(i),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e===R&&(e=Pe,45===t.charCodeAt(Pe)?(r=At,Pe++):(r=R,0===Ye&&n(gt)),r!==R&&(We=e,r=wt()),e=r,e===R&&(e=Pe,126===t.charCodeAt(Pe)?(r=_t,Pe++):(r=R,0===Ye&&n(yt)),r!==R?(i=g(),i!==R?(126===t.charCodeAt(Pe)?(a=_t,Pe++):(a=R,0===Ye&&n(yt)),a!==R?(We=e,r=bt(i),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e===R&&(e=Pe,126===t.charCodeAt(Pe)?(r=_t,Pe++):(r=R,0===Ye&&n(yt)),r!==R&&(We=e,r=mt()),e=r,e===R&&(e=Pe,r=Ct,r!==R&&(We=e,r=Et()),e=r))))),e}function f(){var t;return t=d(),t===R&&(t=v()),t}function d(){var t,e;return t=Pe,e=C(),e!==R&&(We=t,e=It(e)),t=e,t===R&&(t=Pe,e=H(),e!==R&&(We=t,e=Tt(e)),t=e),t}function v(){var e,r,i,a,s,o,u;if(e=Pe,40===t.charCodeAt(Pe)?(r=Vt,Pe++):(r=R,0===Ye&&n(Ot)),r!==R)if(i=A(),i!==R){for(a=[],s=Pe,44===t.charCodeAt(Pe)?(o=Ht,Pe++):(o=R,0===Ye&&n(St)),o!==R?(u=A(),u!==R?(o=[o,u],s=o):(Pe=s,s=L)):(Pe=s,s=L);s!==R;)a.push(s),s=Pe,44===t.charCodeAt(Pe)?(o=Ht,Pe++):(o=R,0===Ye&&n(St)),o!==R?(u=A(),u!==R?(o=[o,u],s=o):(Pe=s,s=L)):(Pe=s,s=L);a!==R?(41===t.charCodeAt(Pe)?(s=xt,Pe++):(s=R,0===Ye&&n(kt)),s!==R?(We=e,r=Rt(i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)}else Pe=e,e=L;else Pe=e,e=L;return e}function A(){var e,r,i,a,s,o;return e=Pe,r=w(),r===R&&(r=q),r!==R?(i=_(),i!==R?(a=Pe,64===t.charCodeAt(Pe)?(s=Ft,Pe++):(s=R,0===Ye&&n(Nt)),s!==R?(o=y(),o!==R?(s=[s,o],a=s):(Pe=a,a=L)):(Pe=a,a=L),a===R&&(a=q),a!==R?(We=e,r=Lt(r,i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e}function g(){var e,r,i,a,s,o,u;if(e=Pe,40===t.charCodeAt(Pe)?(r=Vt,Pe++):(r=R,0===Ye&&n(Ot)),r!==R)if(i=b(),i!==R){for(a=[],s=Pe,44===t.charCodeAt(Pe)?(o=Ht,Pe++):(o=R,0===Ye&&n(St)),o!==R?(u=b(),u!==R?(o=[o,u],s=o):(Pe=s,s=L)):(Pe=s,s=L);s!==R;)a.push(s),s=Pe,44===t.charCodeAt(Pe)?(o=Ht,Pe++):(o=R,0===Ye&&n(St)),o!==R?(u=b(),u!==R?(o=[o,u],s=o):(Pe=s,s=L)):(Pe=s,s=L);a!==R?(41===t.charCodeAt(Pe)?(s=xt,Pe++):(s=R,0===Ye&&n(kt)),s!==R?(We=e,r=Rt(i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)}else Pe=e,e=L;else Pe=e,e=L;return e}function b(){var e,r,i,a,s,o;return e=Pe,r=w(),r===R&&(r=q),r!==R?(i=_(),i!==R?(a=Pe,64===t.charCodeAt(Pe)?(s=Ft,Pe++):(s=R,0===Ye&&n(Nt)),s!==R?(o=y(),o!==R?(s=[s,o],a=s):(Pe=a,a=L)):(Pe=a,a=L),a===R&&(a=q),a!==R?(We=e,r=qt(r,i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e}function w(){var e,r;return e=Pe,t.substr(Pe,2)===Zt?(r=Zt,Pe+=2):(r=R,0===Ye&&n(Dt)),r!==R&&(We=e,r=zt()),e=r,e===R&&(e=Pe,t.substr(Pe,2)===Gt?(r=Gt,Pe+=2):(r=R,0===Ye&&n(Xt)),r!==R&&(We=e,r=Pt()),e=r,e===R&&(e=Pe,t.substr(Pe,2)===Wt?(r=Wt,Pe+=2):(r=R,0===Ye&&n(Qt)),r!==R&&(We=e,r=Ut()),e=r)),e}function _(){var t;return t=C(),t===R&&(t=m(),t===R&&(t=E())),t}function y(){var e,r,i;if(e=Pe,r=[],Bt.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===Ye&&n(jt)),i!==R)for(;i!==R;)r.push(i),Bt.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===Ye&&n(jt));else r=L;return r!==R&&(We=e,r=Yt(r)),e=r}function m(){var t,e;return t=Pe,e=H(),e!==R&&(We=t,e=Mt(e)),t=e}function C(){var e,r,i;return e=Pe,r=H(),r!==R?(37===t.charCodeAt(Pe)?(i=$t,Pe++):(i=R,0===Ye&&n(Jt)),i!==R?(We=e,r=Kt(r),e=r):(Pe=e,e=L)):(Pe=e,e=L),e}function E(){var t,e,r,i,n;return t=Pe,e=O(),e!==R?(r=I(),r===R&&(r=q),r!==R?(i=T(),i===R&&(i=q),i!==R?(n=V(),n===R&&(n=q),n!==R?(We=t,e=te(e,r,i,n),t=e):(Pe=t,t=L)):(Pe=t,t=L)):(Pe=t,t=L)):(Pe=t,t=L),t}function I(){var e,r;return e=Pe,t.substr(Pe,5)===ee?(r=ee,Pe+=5):(r=R,0===Ye&&n(re)),r!==R&&(We=e,r=ie()),e=r,e===R&&(e=Pe,t.substr(Pe,6)===ne?(r=ne,Pe+=6):(r=R,0===Ye&&n(ae)),r!==R&&(We=e,r=se()),e=r,e===R&&(e=Pe,t.substr(Pe,4)===oe?(r=oe,Pe+=4):(r=R,0===Ye&&n(ue)),r!==R&&(We=e,r=ce()),e=r,e===R&&(e=Pe,t.substr(Pe,7)===le?(r=le,Pe+=7):(r=R,0===Ye&&n(he)),r!==R&&(We=e,r=pe()),e=r,e===R&&(e=Pe,t.substr(Pe,6)===fe?(r=fe,Pe+=6):(r=R,0===Ye&&n(de)),r!==R&&(We=e,r=ve()),e=r,e===R&&(e=Pe,t.substr(Pe,7)===Ae?(r=Ae,Pe+=7):(r=R,0===Ye&&n(ge)),r!==R&&(We=e,r=be()),e=r,e===R&&(e=Pe,t.substr(Pe,8)===we?(r=we,Pe+=8):(r=R,0===Ye&&n(_e)),r!==R&&(We=e,r=ye()),e=r,e===R&&(e=Pe,t.substr(Pe,8)===me?(r=me,Pe+=8):(r=R,0===Ye&&n(Ce)),r!==R&&(We=e,r=Ee()),e=r))))))),e}function T(){var e,r,i;return e=Pe,47===t.charCodeAt(Pe)?(r=Ie,Pe++):(r=R,0===Ye&&n(Te)),r!==R?(i=H(),i!==R?(We=e,r=Ve(i),e=r):(Pe=e,e=L)):(Pe=e,e=L),e===R&&(e=Pe,42===t.charCodeAt(Pe)?(r=Oe,Pe++):(r=R,0===Ye&&n(He)),r!==R?(i=H(),i!==R?(We=e,r=Se(i),e=r):(Pe=e,e=L)):(Pe=e,e=L)),e}function V(){var e,r,i;return e=Pe,45===t.charCodeAt(Pe)?(r=At,Pe++):(r=R,0===Ye&&n(gt)),r!==R?(i=H(),i!==R?(We=e,r=xe(i),e=r):(Pe=e,e=L)):(Pe=e,e=L),e===R&&(e=Pe,43===t.charCodeAt(Pe)?(r=ke,Pe++):(r=R,0===Ye&&n(Re)),r!==R?(i=H(),i!==R?(We=e,r=Se(i),e=r):(Pe=e,e=L)):(Pe=e,e=L)),e}function O(){var e,r,i,a,s;if(e=Pe,r=Pe,i=[],Fe.test(t.charAt(Pe))?(a=t.charAt(Pe),Pe++):(a=R,0===Ye&&n(Ne)),a!==R)for(;a!==R;)i.push(a),Fe.test(t.charAt(Pe))?(a=t.charAt(Pe),Pe++):(a=R,0===Ye&&n(Ne));else i=L;if(i!==R&&(i=t.substring(r,Pe)),r=i,r!==R){for(i=Pe,a=[],Le.test(t.charAt(Pe))?(s=t.charAt(Pe),Pe++):(s=R,0===Ye&&n(qe));s!==R;)a.push(s),Le.test(t.charAt(Pe))?(s=t.charAt(Pe),Pe++):(s=R,0===Ye&&n(qe));a!==R&&(a=t.substring(i,Pe)),i=a,i!==R?(We=e,r=Ze(r,i),e=r):(Pe=e,e=L)}else Pe=e,e=L;return e}function H(){var e,r,i,a,s;if(e=Pe,r=[],Bt.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===Ye&&n(jt)),i!==R)for(;i!==R;)r.push(i),Bt.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===Ye&&n(jt));else r=L;if(r!==R)if(46===t.charCodeAt(Pe)?(i=De,Pe++):(i=R,0===Ye&&n(ze)),i!==R){if(a=[],Bt.test(t.charAt(Pe))?(s=t.charAt(Pe),Pe++):(s=R,0===Ye&&n(jt)),s!==R)for(;s!==R;)a.push(s),Bt.test(t.charAt(Pe))?(s=t.charAt(Pe),Pe++):(s=R,0===Ye&&n(jt));else a=L;a!==R?(We=e,r=Ge(r,a),e=r):(Pe=e,e=L)}else Pe=e,e=L;else Pe=e,e=L;if(e===R){if(e=Pe,r=[],Bt.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===Ye&&n(jt)),i!==R)for(;i!==R;)r.push(i),Bt.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===Ye&&n(jt));else r=L;r!==R&&(We=e,r=Xe(r)),e=r}return e}function S(t){for(var e=1;e1?arguments[1]:{},R={},F={visualFormatString:s},N=s,L=R,q=null,Z=":",D={type:"literal",value:":",description:'":"'},z=function(t,e,r,i,n,a){return{orientation:t?t[0]:"horizontal",cascade:(e||[]).concat([r],[].concat.apply([],i),n||[])}},G="HV",X={type:"literal",value:"HV",description:'"HV"'},P=function(){return"horzvert"},W="H",Q={type:"literal",value:"H",description:'"H"'},U=function(){return"horizontal"},B="V",j={type:"literal",value:"V",description:'"V"'},Y=function(){return"vertical"},M="Z",$={type:"literal",value:"Z",description:'"Z"'},J=function(){return"zIndex"},K=" ",tt={type:"literal",value:" ",description:'" "'},et="//",rt={type:"literal",value:"//",description:'"//"'},it={type:"any",description:"any character"},nt="|",at={type:"literal",value:"|",description:'"|"'},st=function(){return{view:null}},ot="[",ut={type:"literal",value:"[",description:'"["'},ct="]",lt={type:"literal",value:"]",description:'"]"'},ht=function(t,e,r){return S(S(t,e?{constraints:e}:{}),r?{cascade:r}:{})},pt=function(t,e){return[].concat([].concat.apply([],t),[e])},ft="->",dt={type:"literal",value:"->",description:'"->"'},vt=function(){return[{relation:"none"}]},At="-",gt={type:"literal",value:"-",description:'"-"'},bt=function(t){return t},wt=function(){return[{relation:"equ",constant:"default"}]},_t="~",yt={type:"literal",value:"~",description:'"~"'},mt=function(){return[{relation:"equ",equalSpacing:!0}]},Ct="",Et=function(){return[{relation:"equ",constant:0}]},It=function(t){return[{relation:"equ",multiplier:t.multiplier}]},Tt=function(t){return[{relation:"equ",constant:t}]},Vt="(",Ot={type:"literal",value:"(",description:'"("'},Ht=",",St={type:"literal",value:",",description:'","'},xt=")",kt={type:"literal",value:")",description:'")"'},Rt=function(t,e){return[t].concat(e.map(function(t){return t[1]}))},Ft="@",Nt={type:"literal",value:"@",description:'"@"'},Lt=function(t,e,r){return S({relation:"equ"},t||{},e,r?r[1]:{})},qt=function(t,e,r){return S({relation:"equ",equalSpacing:!0},t||{},e,r?r[1]:{})},Zt="==",Dt={type:"literal",value:"==",description:'"=="'},zt=function(){return{relation:"equ"}},Gt="<=",Xt={type:"literal",value:"<=",description:'"<="'},Pt=function(){return{relation:"leq"}},Wt=">=",Qt={type:"literal",value:">=",description:'">="'},Ut=function(){return{relation:"geq"}},Bt=/^[0-9]/,jt={type:"class",value:"[0-9]",description:"[0-9]"},Yt=function(t){return{priority:parseInt(t.join(""),10)}},Mt=function(t){return{constant:t}},$t="%",Jt={type:"literal",value:"%",description:'"%"'},Kt=function(t){return{view:null,multiplier:t/100}},te=function(t,e,r,i){return{view:t.view,attribute:e?e:void 0,multiplier:r?r:1,constant:i?i:void 0}},ee=".left",re={type:"literal",value:".left",description:'".left"'},ie=function(){return"left"},ne=".right",ae={type:"literal",value:".right",description:'".right"'},se=function(){return"right"},oe=".top",ue={type:"literal",value:".top",description:'".top"'},ce=function(){return"top"},le=".bottom",he={type:"literal",value:".bottom",description:'".bottom"'},pe=function(){return"bottom"},fe=".width",de={type:"literal",value:".width",description:'".width"'},ve=function(){return"width"},Ae=".height",ge={type:"literal",value:".height",description:'".height"'},be=function(){return"height"},we=".centerX",_e={type:"literal",value:".centerX",description:'".centerX"'},ye=function(){return"centerX"},me=".centerY",Ce={type:"literal",value:".centerY",description:'".centerY"'},Ee=function(){return"centerY"},Ie="/",Te={type:"literal",value:"/",description:'"/"'},Ve=function(t){return 1/t},Oe="*",He={type:"literal",value:"*",description:'"*"'},Se=function(t){return t},xe=function(t){return-t},ke="+",Re={type:"literal",value:"+",description:'"+"'},Fe=/^[a-zA-Z_]/,Ne={type:"class",value:"[a-zA-Z_]",description:"[a-zA-Z_]"},Le=/^[a-zA-Z0-9_]/,qe={type:"class",value:"[a-zA-Z0-9_]",description:"[a-zA-Z0-9_]"},Ze=function(t,e){return{view:t+e,$parserOffset:r()}},De=".",ze={type:"literal",value:".",description:'"."'},Ge=function(t,e){return parseFloat(t.concat(".").concat(e).join(""),10)},Xe=function(t){return parseInt(t.join(""),10)},Pe=0,We=0,Qe=0,Ue={line:1,column:1,seenCR:!1},Be=0,je=[],Ye=0;if("startRule"in k){if(!(k.startRule in F))throw new Error("Can't start parsing from rule \""+k.startRule+'".');N=F[k.startRule]}if(x=N(),x!==R&&Pe===t.length)return x;throw x!==R&&Peh;h++){var p=metaInfoCategories[l],f=(0===h?"":i)+p;if(0===c.indexOf("//"+f+" "))for(var d=c.substring(3+f.length).split(" "),v=0;v1?A[1]:""}else 0===c.indexOf("//"+f+":")&&(a[p]=c.substring(3+f.length))}if(a.viewport){var g=a.viewport,b=g["aspect-ratio"];b&&(b=b.split("/"),g["aspect-ratio"]=parseInt(b[0])/parseInt(b[1])),void 0!==g.height&&(g.height="intrinsic"===g.height?!0:parseInt(g.height)),void 0!==g.width&&(g.width="intrinsic"===g.width?!0:parseInt(g.width)),void 0!==g["max-height"]&&(g["max-height"]=parseInt(g["max-height"])),void 0!==g["max-width"]&&(g["max-width"]=parseInt(g["max-width"])),void 0!==g["min-height"]&&(g["min-height"]=parseInt(g["min-height"])),void 0!==g["min-width"]&&(g["min-width"]=parseInt(g["min-width"]))}if(a.widths)for(n in a.widths){var w="intrinsic"===a.widths[n]?!0:parseInt(a.widths[n]);a.widths[n]=w,(void 0===w||isNaN(w))&&delete a.widths[n]}if(a.heights)for(n in a.heights){var _="intrinsic"===a.heights[n]?!0:parseInt(a.heights[n]);a.heights[n]=_,(void 0===_||isNaN(_))&&delete a.heights[n]}if(a.spacing){var y=JSON.parse(a.spacing);a.spacing=y,(void 0===y||isNaN(y))&&delete a.spacing}return a}}]),t}(),SubView=function(){function t(e){_classCallCheck(this,t),this._name=e.name,this._type=e.type,this._solver=e.solver,this._attr={},e.name||(this._attr[Attribute.LEFT]=new c.Variable,this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.LEFT],c.Strength.required)),this._attr[Attribute.TOP]=new c.Variable,this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.TOP],c.Strength.required)),this._attr[Attribute.ZINDEX]=new c.Variable,this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.ZINDEX],c.Strength.required)))}return _createClass(t,[{key:"toJSON",value:function(){return{name:this.name,left:this.left,top:this.top,width:this.width,height:this.height}}},{key:"toString",value:function(){JSON.stringify(this.toJSON(),void 0,2)}},{key:"getValue",value:function(t){return this._attr[t]?this._attr[t].value():void 0}},{key:"_getAttr",value:function(t){if(this._attr[t])return this._attr[t];switch(this._attr[t]=new c.Variable,t){case Attribute.RIGHT:this._getAttr(Attribute.LEFT),this._getAttr(Attribute.WIDTH),this._solver.addConstraint(new c.Equation(this._attr[t],c.plus(this._attr[Attribute.LEFT],this._attr[Attribute.WIDTH])));break;case Attribute.BOTTOM:this._getAttr(Attribute.TOP),this._getAttr(Attribute.HEIGHT),this._solver.addConstraint(new c.Equation(this._attr[t],c.plus(this._attr[Attribute.TOP],this._attr[Attribute.HEIGHT])));break;case Attribute.CENTERX:this._getAttr(Attribute.LEFT),this._getAttr(Attribute.WIDTH),this._solver.addConstraint(new c.Equation(this._attr[t],c.plus(this._attr[Attribute.LEFT],c.divide(this._attr[Attribute.WIDTH],2))));break;case Attribute.CENTERY:this._getAttr(Attribute.TOP),this._getAttr(Attribute.HEIGHT),this._solver.addConstraint(new c.Equation(this._attr[t],c.plus(this._attr[Attribute.TOP],c.divide(this._attr[Attribute.HEIGHT],2))))}return this._attr[t]}},{key:"_getAttrValue",value:function(t){return this._getAttr(t).value}},{key:"name",get:function(){return this._name}},{key:"left",get:function(){return this._getAttrValue(Attribute.LEFT)}},{key:"right",get:function(){return this._getAttrValue(Attribute.RIGHT)}},{key:"width",get:function(){return this._getAttrValue(Attribute.WIDTH)}},{key:"height",get:function(){return this._getAttrValue(Attribute.HEIGHT)}},{key:"intrinsicWidth",get:function(){return this._intrinsicWidth},set:function(t){if(void 0!==t&&t!==this._intrinsicWidth){var e=this._getAttr(Attribute.WIDTH);void 0===this._intrinsicWidth&&this._solver.addEditVar(e,new c.Strength("required",this._name?998:999,1e3,1e3)),this._intrinsicWidth=t,this._solver.suggestValue(e,t),this._solver.resolve()}}},{key:"intrinsicHeight",get:function(){return this._intrinsicHeight},set:function(t){if(void 0!==t&&t!==this._intrinsicHeight){var e=this._getAttr(Attribute.HEIGHT);void 0===this._intrinsicHeight&&this._solver.addEditVar(e,new c.Strength("required",this._name?998:999,1e3,1e3)),this._intrinsicHeight=t,this._solver.suggestValue(e,t),this._solver.resolve()}}},{key:"top",get:function(){return this._getAttrValue(Attribute.TOP)}},{key:"bottom",get:function(){return this._getAttrValue(Attribute.BOTTOM)}},{key:"centerX",get:function(){return this._getAttrValue(Attribute.CENTERX)}},{key:"centerY",get:function(){return this._getAttrValue(Attribute.CENTERY)}},{key:"zIndex",get:function(){return this._getAttrValue(Attribute.ZINDEX)}},{key:"type",get:function(){return this._type}}]),t}(),defaultPriorityStrength=new c.Strength("defaultPriority",0,1e3,1e3),View=function(){function t(e){_classCallCheck(this,t),this._solver=new c.SimplexSolver,this._subViews={},this._parentSubView=new SubView({solver:this._solver}),this.setSpacing(e&&void 0!==e.spacing?e.spacing:8),e&&((void 0!==e.width||void 0!==e.height)&&this.setSize(e.width,e.height),e.constraints&&this.addConstraints(e.constraints))}return _createClass(t,[{key:"setSize",value:function(t,e){return this._parentSubView.intrinsicWidth=t,this._parentSubView.intrinsicHeight=e,this}},{key:"setSpacing",value:function(t){switch(Array.isArray(t)?t.length:-1){case-1:t=[t,t,t,t,t,t,1];break;case 1:t=[t[0],t[0],t[0],t[0],t[0],t[0],1];break;case 2:t=[t[1],t[0],t[1],t[0],t[0],t[1],1];break;case 3:t=[t[1],t[0],t[1],t[0],t[0],t[1],t[2]];break;case 6:t=[t[0],t[1],t[2],t[3],t[4],t[5],1];break;case 7:break;default:throw"Invalid spacing syntax"}if(!_compareSpacing(this._spacing,t)&&(this._spacing=t,this._spacingVars)){for(var e=0;eMath.abs(i):0==i?r>Math.abs(n):Math.abs(n-i)64||this._deleted>this._compactThreshold&&(this._compact(),this._deleted=0)},"delete":function(t){t=e(t),this._store.hasOwnProperty(t)&&(this._deleted++,delete this._store[t],this.size>0&&this.size--)},each:function(t,e){if(this.size){this._perhapsCompact();var n=this._store,i=this._keyStrMap;Object.keys(this._store).forEach(function(r){t.call(e||null,i[r],n[r])},this)}},escapingEach:function(t,e){if(this.size){this._perhapsCompact();for(var n=this,r=this._store,s=this._keyStrMap,a=i,l=Object.keys(r),o=0;l.length>o;o++)if(function(i){n._store.hasOwnProperty(i)&&(a=t.call(e||null,s[i],r[i]))}(l[o]),a){if(void 0!==a.retval)return a;if(a.brk)break}}},clone:function(){var e=new t.HashTable;return this.size&&(e.size=this.size,n(this._store,e._store),n(this._keyStrMap,e._keyStrMap)),e},equals:function(e){if(e===this)return!0;if(!(e instanceof t.HashTable)||e._size!==this._size)return!1;for(var n=Object.keys(this._store),i=0;n.length>i;i++){var r=n[i];if(this._keyStrMap[r]!==e._keyStrMap[r]||this._store[r]!==e._store[r])return!1}return!0},toString:function(){var t="";return this.each(function(e,n){t+=e+" => "+n+"\n"}),t}})}(this.c||module.parent.exports||{}),function(t){"use strict";t.HashSet=t.inherit({_t:"c.HashSet",initialize:function(){this.storage=[],this.size=0},add:function(t){var e=this.storage;e.indexOf(t),-1==e.indexOf(t)&&e.push(t),this.size=this.storage.length},values:function(){return this.storage},has:function(t){var e=this.storage;return-1!=e.indexOf(t)},"delete":function(t){var e=this.storage.indexOf(t);return-1==e?null:(this.storage.splice(e,1)[0],void(this.size=this.storage.length))},clear:function(){this.storage.length=0},each:function(t,e){this.size&&this.storage.forEach(t,e)},escapingEach:function(t,e){this.size&&this.storage.forEach(t,e)},toString:function(){var t=this.size+" {",e=!0;return this.each(function(n){e?e=!1:t+=", ",t+=n}),t+="}\n"},toJSON:function(){var t=[];return this.each(function(e){t.push(e.toJSON())}),{_t:"c.HashSet",data:t}},fromJSON:function(e){var n=new t.HashSet;return e.data&&(n.size=e.data.length,n.storage=e.data),n}})}(this.c||module.parent.exports||{}),function(t){"use strict";t.Error=t.inherit({initialize:function(t){t&&(this._description=t)},_name:"c.Error",_description:"An error has occured in Cassowary",set description(t){this._description=t},get description(){return"("+this._name+") "+this._description},get message(){return this.description},toString:function(){return this.description}});var e=function(e,n){return t.inherit({"extends":t.Error,initialize:function(){t.Error.apply(this,arguments)},_name:e||"",_description:n||""})};t.ConstraintNotFound=e("c.ConstraintNotFound","Tried to remove a constraint never added to the tableu"),t.InternalError=e("c.InternalError"),t.NonExpression=e("c.NonExpression","The resulting expression would be non"),t.NotEnoughStays=e("c.NotEnoughStays","There are not enough stays to give specific values to every variable"),t.RequiredFailure=e("c.RequiredFailure","A required constraint cannot be satisfied"),t.TooDifficult=e("c.TooDifficult","The constraints are too difficult to solve")}(this.c||module.parent.exports||{}),function(t){"use strict";var e=1e3;t.SymbolicWeight=t.inherit({_t:"c.SymbolicWeight",initialize:function(){this.value=0;for(var t=1,n=arguments.length-1;n>=0;--n)this.value+=arguments[n]*t,t*=e},toJSON:function(){return{_t:this._t,value:this.value}}})}(this.c||module.parent.exports||{}),function(t){t.Strength=t.inherit({initialize:function(e,n,i,r){this.name=e,this.symbolicWeight=n instanceof t.SymbolicWeight?n:new t.SymbolicWeight(n,i,r)},get required(){return this===t.Strength.required},toString:function(){return this.name+(this.isRequired?"":":"+this.symbolicWeight)}}),t.Strength.required=new t.Strength("",1e3,1e3,1e3),t.Strength.strong=new t.Strength("strong",1,0,0),t.Strength.medium=new t.Strength("medium",0,1,0),t.Strength.weak=new t.Strength("weak",0,0,1)}(this.c||("undefined"!=typeof module?module.parent.exports.c:{})),function(t){"use strict";t.AbstractVariable=t.inherit({isDummy:!1,isExternal:!1,isPivotable:!1,isRestricted:!1,_init:function(e,n){this.hashCode=t._inc(),this.name=(n||"")+this.hashCode,e&&(void 0!==e.name&&(this.name=e.name),void 0!==e.value&&(this.value=e.value),void 0!==e.prefix&&(this._prefix=e.prefix))},_prefix:"",name:"",value:0,toJSON:function(){var t={};return this._t&&(t._t=this._t),this.name&&(t.name=this.name),void 0!==this.value&&(t.value=this.value),this._prefix&&(t._prefix=this._prefix),this._t&&(t._t=this._t),t},fromJSON:function(e,n){var i=new n;return t.extend(i,e),i},toString:function(){return this._prefix+"["+this.name+":"+this.value+"]"}}),t.Variable=t.inherit({_t:"c.Variable","extends":t.AbstractVariable,initialize:function(e){this._init(e,"v");var n=t.Variable._map;n&&(n[this.name]=this)},isExternal:!0}),t.DummyVariable=t.inherit({_t:"c.DummyVariable","extends":t.AbstractVariable,initialize:function(t){this._init(t,"d")},isDummy:!0,isRestricted:!0,value:"dummy"}),t.ObjectiveVariable=t.inherit({_t:"c.ObjectiveVariable","extends":t.AbstractVariable,initialize:function(t){this._init(t,"o")},value:"obj"}),t.SlackVariable=t.inherit({_t:"c.SlackVariable","extends":t.AbstractVariable,initialize:function(t){this._init(t,"s")},isPivotable:!0,isRestricted:!0,value:"slack"})}(this.c||module.parent.exports||{}),function(t){"use strict";t.Point=t.inherit({initialize:function(e,n,i){if(e instanceof t.Variable)this._x=e;else{var r={value:e};i&&(r.name="x"+i),this._x=new t.Variable(r)}if(n instanceof t.Variable)this._y=n;else{var s={value:n};i&&(s.name="y"+i),this._y=new t.Variable(s)}},get x(){return this._x},set x(e){e instanceof t.Variable?this._x=e:this._x.value=e},get y(){return this._y},set y(e){e instanceof t.Variable?this._y=e:this._y.value=e},toString:function(){return"("+this.x+", "+this.y+")"}})}(this.c||module.parent.exports||{}),function(t){"use strict";t.Expression=t.inherit({initialize:function(e,n,i){t.GC&&console.log("new c.Expression"),this.constant="number"!=typeof i||isNaN(i)?0:i,this.terms=new t.HashTable,e instanceof t.AbstractVariable?this.setVariable(e,"number"==typeof n?n:1):"number"==typeof e&&(isNaN(e)?console.trace():this.constant=e)},initializeFromHash:function(e,n){return t.verbose&&(console.log("*******************************"),console.log("clone c.initializeFromHash"),console.log("*******************************")),t.GC&&console.log("clone c.Expression"),this.constant=e,this.terms=n.clone(),this},multiplyMe:function(t){this.constant*=t;var e=this.terms;return e.each(function(n,i){e.set(n,i*t)}),this},clone:function(){t.verbose&&(console.log("*******************************"),console.log("clone c.Expression"),console.log("*******************************"));var e=new t.Expression;return e.initializeFromHash(this.constant,this.terms),e},times:function(e){if("number"==typeof e)return this.clone().multiplyMe(e);if(this.isConstant)return e.times(this.constant);if(e.isConstant)return this.times(e.constant);throw new t.NonExpression},plus:function(e){return e instanceof t.Expression?this.clone().addExpression(e,1):e instanceof t.Variable?this.clone().addVariable(e,1):void 0},minus:function(e){return e instanceof t.Expression?this.clone().addExpression(e,-1):e instanceof t.Variable?this.clone().addVariable(e,-1):void 0},divide:function(e){if("number"==typeof e){if(t.approx(e,0))throw new t.NonExpression;return this.times(1/e)}if(e instanceof t.Expression){if(!e.isConstant)throw new t.NonExpression;return this.times(1/e.constant)}},addExpression:function(e,n,i,r){return e instanceof t.AbstractVariable&&(e=new t.Expression(e),t.trace&&console.log("addExpression: Had to cast a var to an expression")),n=n||1,this.constant+=n*e.constant,e.terms.each(function(t,e){this.addVariable(t,e*n,i,r)},this),this},addVariable:function(e,n,i,r){null==n&&(n=1),t.trace&&console.log("c.Expression::addVariable():",e,n);var s=this.terms.get(e);if(s){var a=s+n;0==a||t.approx(a,0)?(r&&r.noteRemovedVariable(e,i),this.terms["delete"](e)):this.setVariable(e,a)}else t.approx(n,0)||(this.setVariable(e,n),r&&r.noteAddedVariable(e,i));return this},setVariable:function(t,e){return this.terms.set(t,e),this},anyPivotableVariable:function(){if(this.isConstant)throw new t.InternalError("anyPivotableVariable called on a constant");var e=this.terms.escapingEach(function(t){return t.isPivotable?{retval:t}:void 0});return e&&void 0!==e.retval?e.retval:null},substituteOut:function(e,n,i,r){t.trace&&(t.fnenterprint("CLE:substituteOut: "+e+", "+n+", "+i+", ..."),t.traceprint("this = "+this));var s=this.setVariable.bind(this),a=this.terms,l=a.get(e);a["delete"](e),this.constant+=l*n.constant,n.terms.each(function(e,n){var o=a.get(e);if(o){var u=o+l*n;t.approx(u,0)?(r.noteRemovedVariable(e,i),a["delete"](e)):s(e,u)}else s(e,l*n),r&&r.noteAddedVariable(e,i)}),t.trace&&t.traceprint("Now this is "+this)},changeSubject:function(t,e){this.setVariable(t,this.newSubject(e))},newSubject:function(e){t.trace&&t.fnenterprint("newSubject:"+e);var n=1/this.terms.get(e);return this.terms["delete"](e),this.multiplyMe(-n),n},coefficientFor:function(t){return this.terms.get(t)||0},get isConstant(){return 0==this.terms.size},toString:function(){var e="",n=!1;if(!t.approx(this.constant,0)||this.isConstant){if(e+=this.constant,this.isConstant)return e;n=!0}return this.terms.each(function(t,i){n&&(e+=" + "),e+=i+"*"+t,n=!0}),e},equals:function(e){return e===this?!0:e instanceof t.Expression&&e.constant===this.constant&&e.terms.equals(this.terms)},Plus:function(t,e){return t.plus(e)},Minus:function(t,e){return t.minus(e)},Times:function(t,e){return t.times(e)},Divide:function(t,e){return t.divide(e)}})}(this.c||module.parent.exports||{}),function(t){"use strict";t.AbstractConstraint=t.inherit({initialize:function(e,n){this.hashCode=t._inc(),this.strength=e||t.Strength.required,this.weight=n||1},isEditConstraint:!1,isInequality:!1,isStayConstraint:!1,get required(){return this.strength===t.Strength.required},toString:function(){return this.strength+" {"+this.weight+"} ("+this.expression+")"}});var e=t.AbstractConstraint.prototype.toString,n=function(e,n,i){t.AbstractConstraint.call(this,n||t.Strength.strong,i),this.variable=e,this.expression=new t.Expression(e,-1,e.value)};t.EditConstraint=t.inherit({"extends":t.AbstractConstraint,initialize:function(){n.apply(this,arguments)},isEditConstraint:!0,toString:function(){return"edit:"+e.call(this)}}),t.StayConstraint=t.inherit({"extends":t.AbstractConstraint,initialize:function(){n.apply(this,arguments)},isStayConstraint:!0,toString:function(){return"stay:"+e.call(this)}});var i=t.Constraint=t.inherit({"extends":t.AbstractConstraint,initialize:function(e,n,i){t.AbstractConstraint.call(this,n,i),this.expression=e}});t.Inequality=t.inherit({"extends":t.Constraint,_cloneOrNewCle:function(e){return e.clone?e.clone():new t.Expression(e)},initialize:function(e,n,r,s,a){var l=e instanceof t.Expression,o=r instanceof t.Expression,u=e instanceof t.AbstractVariable,c=r instanceof t.AbstractVariable,h="number"==typeof e,f="number"==typeof r;if((l||h)&&c){var d=e,p=n,v=r,b=s,m=a;if(i.call(this,this._cloneOrNewCle(d),b,m),p==t.LEQ)this.expression.multiplyMe(-1),this.expression.addVariable(v);else{if(p!=t.GEQ)throw new t.InternalError("Invalid operator in c.Inequality constructor");this.expression.addVariable(v,-1)}}else if(u&&(o||f)){var d=r,p=n,v=e,b=s,m=a;if(i.call(this,this._cloneOrNewCle(d),b,m),p==t.GEQ)this.expression.multiplyMe(-1),this.expression.addVariable(v);else{if(p!=t.LEQ)throw new t.InternalError("Invalid operator in c.Inequality constructor");this.expression.addVariable(v,-1)}}else{if(l&&f){var g=e,p=n,_=r,b=s,m=a;if(i.call(this,this._cloneOrNewCle(g),b,m),p==t.LEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(_));else{if(p!=t.GEQ)throw new t.InternalError("Invalid operator in c.Inequality constructor");this.expression.addExpression(this._cloneOrNewCle(_),-1)}return this}if(h&&o){var g=r,p=n,_=e,b=s,m=a;if(i.call(this,this._cloneOrNewCle(g),b,m),p==t.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(_));else{if(p!=t.LEQ)throw new t.InternalError("Invalid operator in c.Inequality constructor");this.expression.addExpression(this._cloneOrNewCle(_),-1)}return this}if(l&&o){var g=e,p=n,_=r,b=s,m=a;if(i.call(this,this._cloneOrNewCle(_),b,m),p==t.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(g));else{if(p!=t.LEQ)throw new t.InternalError("Invalid operator in c.Inequality constructor");this.expression.addExpression(this._cloneOrNewCle(g),-1)}}else{if(l)return i.call(this,e,n,r);if(n==t.GEQ)i.call(this,new t.Expression(r),s,a),this.expression.multiplyMe(-1),this.expression.addVariable(e);else{if(n!=t.LEQ)throw new t.InternalError("Invalid operator in c.Inequality constructor");i.call(this,new t.Expression(r),s,a),this.expression.addVariable(e,-1)}}}},isInequality:!0,toString:function(){return i.prototype.toString.call(this)+" >= 0) id: "+this.hashCode}}),t.Equation=t.inherit({"extends":t.Constraint,initialize:function(e,n,r,s){if(e instanceof t.Expression&&!n||n instanceof t.Strength)i.call(this,e,n,r);else if(e instanceof t.AbstractVariable&&n instanceof t.Expression){var a=e,l=n,o=r,u=s;i.call(this,l.clone(),o,u),this.expression.addVariable(a,-1)}else if(e instanceof t.AbstractVariable&&"number"==typeof n){var a=e,c=n,o=r,u=s;i.call(this,new t.Expression(c),o,u),this.expression.addVariable(a,-1)}else if(e instanceof t.Expression&&n instanceof t.AbstractVariable){var l=e,a=n,o=r,u=s;i.call(this,l.clone(),o,u),this.expression.addVariable(a,-1)}else{if(!(e instanceof t.Expression||e instanceof t.AbstractVariable||"number"==typeof e)||!(n instanceof t.Expression||n instanceof t.AbstractVariable||"number"==typeof n))throw"Bad initializer to c.Equation";e=e instanceof t.Expression?e.clone():new t.Expression(e),n=n instanceof t.Expression?n.clone():new t.Expression(n),i.call(this,e,r,s),this.expression.addExpression(n,-1)}t.assert(this.strength instanceof t.Strength,"_strength not set")},toString:function(){return i.prototype.toString.call(this)+" = 0)"}})}(this.c||module.parent.exports||{}),function(t){"use strict";t.EditInfo=t.inherit({initialize:function(t,e,n,i,r){this.constraint=t,this.editPlus=e,this.editMinus=n,this.prevEditConstant=i,this.index=r},toString:function(){return""}})}(this.c||module.parent.exports||{}),function(t){"use strict";t.Tableau=t.inherit({initialize:function(){this.columns=new t.HashTable,this.rows=new t.HashTable,this._infeasibleRows=new t.HashSet,this._externalRows=new t.HashSet,this._externalParametricVars=new t.HashSet},noteRemovedVariable:function(e,n){t.trace&&console.log("c.Tableau::noteRemovedVariable: ",e,n);var i=this.columns.get(e);n&&i&&i["delete"](n)},noteAddedVariable:function(t,e){e&&this.insertColVar(t,e)},getInternalInfo:function(){var t="Tableau Information:\n";return t+="Rows: "+this.rows.size,t+=" (= "+(this.rows.size-1)+" constraints)",t+="\nColumns: "+this.columns.size,t+="\nInfeasible Rows: "+this._infeasibleRows.size,t+="\nExternal basic variables: "+this._externalRows.size,t+="\nExternal parametric variables: ",t+=this._externalParametricVars.size,t+="\n"},toString:function(){var t="Tableau:\n";return this.rows.each(function(e,n){t+=e,t+=" <==> ",t+=n,t+="\n"}),t+="\nColumns:\n",t+=this.columns,t+="\nInfeasible rows: ",t+=this._infeasibleRows,t+="External basic variables: ",t+=this._externalRows,t+="External parametric variables: ",t+=this._externalParametricVars},insertColVar:function(e,n){var i=this.columns.get(e);i||(i=new t.HashSet,this.columns.set(e,i)),i.add(n)},addRow:function(e,n){t.trace&&t.fnenterprint("addRow: "+e+", "+n),this.rows.set(e,n),n.terms.each(function(t){this.insertColVar(t,e),t.isExternal&&this._externalParametricVars.add(t)},this),e.isExternal&&this._externalRows.add(e),t.trace&&t.traceprint(""+this)},removeColumn:function(e){t.trace&&t.fnenterprint("removeColumn:"+e);var n=this.columns.get(e);n?(this.columns["delete"](e),n.each(function(t){var n=this.rows.get(t);n.terms["delete"](e)},this)):t.trace&&console.log("Could not find var",e,"in columns"),e.isExternal&&(this._externalRows["delete"](e),this._externalParametricVars["delete"](e))},removeRow:function(e){t.trace&&t.fnenterprint("removeRow:"+e);var n=this.rows.get(e);return t.assert(null!=n),n.terms.each(function(n){var i=this.columns.get(n);null!=i&&(t.trace&&console.log("removing from varset:",e),i["delete"](e))},this),this._infeasibleRows["delete"](e),e.isExternal&&this._externalRows["delete"](e),this.rows["delete"](e),t.trace&&t.fnexitprint("returning "+n),n},substituteOut:function(e,n){t.trace&&t.fnenterprint("substituteOut:"+e+", "+n),t.trace&&t.traceprint(""+this);var i=this.columns.get(e);i.each(function(t){var i=this.rows.get(t);i.substituteOut(e,n,t,this),t.isRestricted&&0>i.constant&&this._infeasibleRows.add(t)},this),e.isExternal&&(this._externalRows.add(e),this._externalParametricVars["delete"](e)),this.columns["delete"](e)},columnsHasKey:function(t){return!!this.columns.get(t)}})}(this.c||module.parent.exports||{}),function(t){var e=t.Tableau,n=e.prototype,i=1e-8,r=t.Strength.weak;t.SimplexSolver=t.inherit({"extends":t.Tableau,initialize:function(){t.Tableau.call(this),this._stayMinusErrorVars=[],this._stayPlusErrorVars=[],this._errorVars=new t.HashTable,this._markerVars=new t.HashTable,this._objective=new t.ObjectiveVariable({name:"Z"}),this._editVarMap=new t.HashTable,this._editVarList=[],this._slackCounter=0,this._artificialCounter=0,this._dummyCounter=0,this.autoSolve=!0,this._fNeedsSolving=!1,this._optimizeCount=0,this.rows.set(this._objective,new t.Expression),this._stkCedcns=[0],t.trace&&t.traceprint("objective expr == "+this.rows.get(this._objective))},addLowerBound:function(e,n){var i=new t.Inequality(e,t.GEQ,new t.Expression(n));return this.addConstraint(i)},addUpperBound:function(e,n){var i=new t.Inequality(e,t.LEQ,new t.Expression(n));return this.addConstraint(i)},addBounds:function(t,e,n){return this.addLowerBound(t,e),this.addUpperBound(t,n),this},add:function(){for(var t=0;arguments.length>t;t++)this.addConstraint(arguments[t]);return this},addConstraint:function(e){t.trace&&t.fnenterprint("addConstraint: "+e);var n=Array(2),i=Array(1),r=this.newExpression(e,n,i);if(i=i[0],this.tryAddingDirectly(r)||this.addWithArtificialVariable(r),this._fNeedsSolving=!0,e.isEditConstraint){var s=this._editVarMap.size,a=n[0],l=n[1];!a instanceof t.SlackVariable&&console.warn("cvEplus not a slack variable =",a),!l instanceof t.SlackVariable&&console.warn("cvEminus not a slack variable =",l),t.debug&&console.log("new c.EditInfo("+e+", "+a+", "+l+", "+i+", "+s+")");var o=new t.EditInfo(e,a,l,i,s);this._editVarMap.set(e.variable,o),this._editVarList[s]={v:e.variable,info:o}}return this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},addConstraintNoException:function(e){t.trace&&t.fnenterprint("addConstraintNoException: "+e);try{return this.addConstraint(e),!0}catch(n){return!1}},addEditVar:function(e,n){return t.trace&&t.fnenterprint("addEditVar: "+e+" @ "+n),this.addConstraint(new t.EditConstraint(e,n||t.Strength.strong))},beginEdit:function(){return t.assert(this._editVarMap.size>0,"_editVarMap.size > 0"),this._infeasibleRows.clear(),this._resetStayConstants(),this._stkCedcns.push(this._editVarMap.size),this},endEdit:function(){return t.assert(this._editVarMap.size>0,"_editVarMap.size > 0"),this.resolve(),this._stkCedcns.pop(),this.removeEditVarsTo(this._stkCedcns[this._stkCedcns.length-1]),this},removeAllEditVars:function(){return this.removeEditVarsTo(0)},removeEditVarsTo:function(e){try{for(var n=this._editVarList.length,i=e;n>i;i++)this._editVarList[i]&&this.removeConstraint(this._editVarMap.get(this._editVarList[i].v).constraint);return this._editVarList.length=e,t.assert(this._editVarMap.size==e,"_editVarMap.size == n"),this}catch(r){throw new t.InternalError("Constraint not found in removeEditVarsTo")}},addPointStays:function(e){return t.trace&&console.log("addPointStays",e),e.forEach(function(t,e){this.addStay(t.x,r,Math.pow(2,e)),this.addStay(t.y,r,Math.pow(2,e))},this),this},addStay:function(e,n,i){var s=new t.StayConstraint(e,n||r,i||1);return this.addConstraint(s)},removeConstraint:function(t){return this.removeConstraintInternal(t),this},removeConstraintInternal:function(e){t.trace&&t.fnenterprint("removeConstraintInternal: "+e),t.trace&&t.traceprint(""+this),this._fNeedsSolving=!0,this._resetStayConstants();var n=this.rows.get(this._objective),i=this._errorVars.get(e);t.trace&&t.traceprint("eVars == "+i),null!=i&&i.each(function(r){var s=this.rows.get(r);null==s?n.addVariable(r,-e.weight*e.strength.symbolicWeight.value,this._objective,this):n.addExpression(s,-e.weight*e.strength.symbolicWeight.value,this._objective,this),t.trace&&t.traceprint("now eVars == "+i)},this);var r=this._markerVars.get(e);if(this._markerVars["delete"](e),null==r)throw new t.InternalError("Constraint not found in removeConstraintInternal");if(t.trace&&t.traceprint("Looking to remove var "+r),null==this.rows.get(r)){var s=this.columns.get(r);t.trace&&t.traceprint("Must pivot -- columns are "+s);var a=null,l=0;s.each(function(e){if(e.isRestricted){var n=this.rows.get(e),i=n.coefficientFor(r);if(t.trace&&t.traceprint("Marker "+r+"'s coefficient in "+n+" is "+i),0>i){var s=-n.constant/i;(null==a||l>s||t.approx(s,l)&&e.hashCodei)&&(l=i,a=t)}},this)),null==a&&(0==s.size?this.removeColumn(r):s.escapingEach(function(t){return t!=this._objective?(a=t,{brk:!0}):void 0},this)),null!=a&&this.pivot(r,a)}if(null!=this.rows.get(r)&&this.removeRow(r),null!=i&&i.each(function(t){t!=r&&this.removeColumn(t)},this),e.isStayConstraint){if(null!=i)for(var o=0;this._stayPlusErrorVars.length>o;o++)i["delete"](this._stayPlusErrorVars[o]),i["delete"](this._stayMinusErrorVars[o])}else if(e.isEditConstraint){t.assert(null!=i,"eVars != null");var u=this._editVarMap.get(e.variable);this.removeColumn(u.editMinus),this._editVarMap["delete"](e.variable)}return null!=i&&this._errorVars["delete"](i),this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},reset:function(){throw t.trace&&t.fnenterprint("reset"),new t.InternalError("reset not implemented")},resolveArray:function(e){t.trace&&t.fnenterprint("resolveArray"+e);var n=e.length;this._editVarMap.each(function(t,i){var r=i.index;n>r&&this.suggestValue(t,e[r])},this),this.resolve()},resolvePair:function(t,e){this.suggestValue(this._editVarList[0].v,t),this.suggestValue(this._editVarList[1].v,e),this.resolve()},resolve:function(){t.trace&&t.fnenterprint("resolve()"),this.dualOptimize(),this._setExternalVariables(),this._infeasibleRows.clear(),this._resetStayConstants()},suggestValue:function(e,n){t.trace&&console.log("suggestValue("+e+", "+n+")");var i=this._editVarMap.get(e);if(!i)throw new t.Error("suggestValue for variable "+e+", but var is not an edit variable");var r=n-i.prevEditConstant;return i.prevEditConstant=n,this.deltaEditConstant(r,i.editPlus,i.editMinus),this},solve:function(){return this._fNeedsSolving&&(this.optimize(this._objective),this._setExternalVariables()),this},setEditedValue:function(e,n){if(!this.columnsHasKey(e)&&null==this.rows.get(e))return e.value=n,this;if(!t.approx(n,e.value)){this.addEditVar(e),this.beginEdit();try{this.suggestValue(e,n)}catch(i){throw new t.InternalError("Error in setEditedValue")}this.endEdit()}return this},addVar:function(e){if(!this.columnsHasKey(e)&&null==this.rows.get(e)){try{this.addStay(e)}catch(n){throw new t.InternalError("Error in addVar -- required failure is impossible")}t.trace&&t.traceprint("added initial stay on "+e)}return this},getInternalInfo:function(){var t=n.getInternalInfo.call(this);return t+="\nSolver info:\n",t+="Stay Error Variables: ",t+=this._stayPlusErrorVars.length+this._stayMinusErrorVars.length,t+=" ("+this._stayPlusErrorVars.length+" +, ",t+=this._stayMinusErrorVars.length+" -)\n",t+="Edit Variables: "+this._editVarMap.size,t+="\n"},getDebugInfo:function(){return""+this+this.getInternalInfo()+"\n"},toString:function(){var t=n.getInternalInfo.call(this);return t+="\n_stayPlusErrorVars: ",t+="["+this._stayPlusErrorVars+"]",t+="\n_stayMinusErrorVars: ",t+="["+this._stayMinusErrorVars+"]",t+="\n",t+="_editVarMap:\n"+this._editVarMap,t+="\n"},getConstraintMap:function(){return this._markerVars},addWithArtificialVariable:function(e){t.trace&&t.fnenterprint("addWithArtificialVariable: "+e);var n=new t.SlackVariable({value:++this._artificialCounter,prefix:"a"}),i=new t.ObjectiveVariable({name:"az"}),r=e.clone();t.trace&&t.traceprint("before addRows:\n"+this),this.addRow(i,r),this.addRow(n,e),t.trace&&t.traceprint("after addRows:\n"+this),this.optimize(i);var s=this.rows.get(i);if(t.trace&&t.traceprint("azTableauRow.constant == "+s.constant),!t.approx(s.constant,0))throw this.removeRow(i),this.removeColumn(n),new t.RequiredFailure;var a=this.rows.get(n);if(null!=a){if(a.isConstant)return this.removeRow(n),void this.removeRow(i);var l=a.anyPivotableVariable();this.pivot(l,n)}t.assert(null==this.rows.get(n),"rowExpression(av) == null"),this.removeColumn(n),this.removeRow(i)},tryAddingDirectly:function(e){t.trace&&t.fnenterprint("tryAddingDirectly: "+e);var n=this.chooseSubject(e);return null==n?(t.trace&&t.fnexitprint("returning false"),!1):(e.newSubject(n),this.columnsHasKey(n)&&this.substituteOut(n,e),this.addRow(n,e),t.trace&&t.fnexitprint("returning true"),!0)},chooseSubject:function(e){t.trace&&t.fnenterprint("chooseSubject: "+e);var n=null,i=!1,r=!1,s=e.terms,a=s.escapingEach(function(t,e){if(i){if(!t.isRestricted&&!this.columnsHasKey(t))return{retval:t}}else if(t.isRestricted){if(!r&&!t.isDummy&&0>e){var s=this.columns.get(t);(null==s||1==s.size&&this.columnsHasKey(this._objective))&&(n=t,r=!0)}}else n=t,i=!0},this);if(a&&void 0!==a.retval)return a.retval;if(null!=n)return n;var l=0,a=s.escapingEach(function(t,e){return t.isDummy?void(this.columnsHasKey(t)||(n=t,l=e)):{retval:null}},this);if(a&&void 0!==a.retval)return a.retval;if(!t.approx(e.constant,0))throw new t.RequiredFailure;return l>0&&e.multiplyMe(-1),n},deltaEditConstant:function(e,n,i){t.trace&&t.fnenterprint("deltaEditConstant :"+e+", "+n+", "+i);var r=this.rows.get(n);if(null!=r)return r.constant+=e,void(0>r.constant&&this._infeasibleRows.add(n));var s=this.rows.get(i);if(null!=s)return s.constant+=-e,void(0>s.constant&&this._infeasibleRows.add(i));var a=this.columns.get(i);a||console.log("columnVars is null -- tableau is:\n"+this),a.each(function(t){var n=this.rows.get(t),r=n.coefficientFor(i);n.constant+=r*e,t.isRestricted&&0>n.constant&&this._infeasibleRows.add(t)},this)},dualOptimize:function(){t.trace&&t.fnenterprint("dualOptimize:");for(var e=this.rows.get(this._objective);this._infeasibleRows.size;){var n=this._infeasibleRows.values()[0];this._infeasibleRows["delete"](n);var i=null,r=this.rows.get(n);if(r&&0>r.constant){var s,a=Number.MAX_VALUE,l=r.terms;if(l.each(function(n,r){if(r>0&&n.isPivotable){var l=e.coefficientFor(n);s=l/r,(a>s||t.approx(s,a)&&n.hashCodes.constant&&s.multiplyMe(-1),t.trace&&t.fnexitprint("returning "+s),s},optimize:function(e){t.trace&&t.fnenterprint("optimize: "+e),t.trace&&t.traceprint(""+this),this._optimizeCount++;var n=this.rows.get(e);t.assert(null!=n,"zRow != null");for(var r,s,a=null,l=null;;){if(r=0,s=n.terms,s.escapingEach(function(t,e){return t.isPivotable&&r>e?(r=e,a=t,{brk:1}):void 0},this),r>=-i)return;t.trace&&console.log("entryVar:",a,"objectiveCoeff:",r);var o=Number.MAX_VALUE,u=this.columns.get(a),c=0;if(u.each(function(e){if(t.trace&&t.traceprint("Checking "+e),e.isPivotable){var n=this.rows.get(e),i=n.coefficientFor(a);t.trace&&t.traceprint("pivotable, coeff = "+i),0>i&&(c=-n.constant/i,(o>c||t.approx(c,o)&&e.hashCodee;e++){var n=this.rows.get(this._stayPlusErrorVars[e]);null==n&&(n=this.rows.get(this._stayMinusErrorVars[e])),null!=n&&(n.constant=0)}},_setExternalVariables:function(){t.trace&&t.fnenterprint("_setExternalVariables:"),t.trace&&t.traceprint(""+this),this._externalParametricVars.each(function(e){null!=this.rows.get(e)?t.trace&&console.log("Error: variable"+e+" in _externalParametricVars is basic"):e.value=0},this),this._externalRows.each(function(t){var e=this.rows.get(t);t.value!=e.constant&&(t.value=e.constant)},this),this._fNeedsSolving=!1,this.onsolved()},onsolved:function(){},insertErrorVar:function(e,n){t.trace&&t.fnenterprint("insertErrorVar:"+e+", "+n);var i=this._errorVars.get(n);i||(i=new t.HashSet,this._errorVars.set(e,i)),i.add(n)}})}(this.c||module.parent.exports||{}),function(t){"use strict";t.Timer=t.inherit({initialize:function(){this.isRunning=!1,this._elapsedMs=0},start:function(){return this.isRunning=!0,this._startReading=new Date,this},stop:function(){return this.isRunning=!1,this._elapsedMs+=new Date-this._startReading,this},reset:function(){return this.isRunning=!1,this._elapsedMs=0,this},elapsedTime:function(){return this.isRunning?(this._elapsedMs+(new Date-this._startReading))/1e3:this._elapsedMs/1e3}})}(this.c||module.parent.exports||{}),__cassowary_parser=function(){function t(t){return'"'+t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g,escape)+'"'}var e={parse:function(e,n){function i(t){H>T||(T>H&&(H=T,F=[]),F.push(t))}function r(){var t,e,n,i,r;if(i=T,r=T,t=g(),null!==t){if(n=s(),null!==n)for(e=[];null!==n;)e.push(n),n=s();else e=null;null!==e?(n=g(),null!==n?t=[t,e,n]:(t=null,T=r)):(t=null,T=r)}else t=null,T=r;return null!==t&&(t=function(t,e){return e}(i,t[1])),null===t&&(T=i),t}function s(){var t,e,n,i;return n=T,i=T,t=k(),null!==t?(e=h(),null!==e?t=[t,e]:(t=null,T=i)):(t=null,T=i),null!==t&&(t=function(t,e){return e}(n,t[0])),null===t&&(T=n),t}function a(){var t;return e.length>T?(t=e.charAt(T),T++):(t=null,0===L&&i("any character")),t}function l(){var t;return/^[a-zA-Z]/.test(e.charAt(T))?(t=e.charAt(T),T++):(t=null,0===L&&i("[a-zA-Z]")),null===t&&(36===e.charCodeAt(T)?(t="$",T++):(t=null,0===L&&i('"$"')),null===t&&(95===e.charCodeAt(T)?(t="_",T++):(t=null,0===L&&i('"_"')))),t}function o(){var t;return L++,/^[\t\x0B\f \xA0\uFEFF]/.test(e.charAt(T))?(t=e.charAt(T),T++):(t=null,0===L&&i("[\\t\\x0B\\f \\xA0\\uFEFF]")),L--,0===L&&null===t&&i("whitespace"),t}function u(){var t;return/^[\n\r\u2028\u2029]/.test(e.charAt(T))?(t=e.charAt(T),T++):(t=null,0===L&&i("[\\n\\r\\u2028\\u2029]")),t}function c(){var t;return L++,10===e.charCodeAt(T)?(t="\n",T++):(t=null,0===L&&i('"\\n"')),null===t&&("\r\n"===e.substr(T,2)?(t="\r\n",T+=2):(t=null,0===L&&i('"\\r\\n"')),null===t&&(13===e.charCodeAt(T)?(t="\r",T++):(t=null,0===L&&i('"\\r"')),null===t&&(8232===e.charCodeAt(T)?(t="\u2028",T++):(t=null,0===L&&i('"\\u2028"')),null===t&&(8233===e.charCodeAt(T)?(t="\u2029",T++):(t=null,0===L&&i('"\\u2029"')))))),L--,0===L&&null===t&&i("end of line"),t}function h(){var t,n,r;return r=T,t=g(),null!==t?(59===e.charCodeAt(T)?(n=";",T++):(n=null,0===L&&i('";"')),null!==n?t=[t,n]:(t=null,T=r)):(t=null,T=r),null===t&&(r=T,t=m(),null!==t?(n=c(),null!==n?t=[t,n]:(t=null,T=r)):(t=null,T=r),null===t&&(r=T,t=g(),null!==t?(n=f(),null!==n?t=[t,n]:(t=null,T=r)):(t=null,T=r))),t}function f(){var t,n;return n=T,L++,e.length>T?(t=e.charAt(T),T++):(t=null,0===L&&i("any character")),L--,null===t?t="":(t=null,T=n),t}function d(){var t;return L++,t=p(),null===t&&(t=b()),L--,0===L&&null===t&&i("comment"),t}function p(){var t,n,r,s,l,o,u;if(l=T,"/*"===e.substr(T,2)?(t="/*",T+=2):(t=null,0===L&&i('"/*"')),null!==t){for(n=[],o=T,u=T,L++,"*/"===e.substr(T,2)?(r="*/",T+=2):(r=null,0===L&&i('"*/"')),L--,null===r?r="":(r=null,T=u),null!==r?(s=a(),null!==s?r=[r,s]:(r=null,T=o)):(r=null,T=o);null!==r;)n.push(r),o=T,u=T,L++,"*/"===e.substr(T,2)?(r="*/",T+=2):(r=null,0===L&&i('"*/"')),L--,null===r?r="":(r=null,T=u),null!==r?(s=a(),null!==s?r=[r,s]:(r=null,T=o)):(r=null,T=o);null!==n?("*/"===e.substr(T,2)?(r="*/",T+=2):(r=null,0===L&&i('"*/"')),null!==r?t=[t,n,r]:(t=null,T=l)):(t=null,T=l)}else t=null,T=l;return t}function v(){var t,n,r,s,l,o,c;if(l=T,"/*"===e.substr(T,2)?(t="/*",T+=2):(t=null,0===L&&i('"/*"')),null!==t){for(n=[],o=T,c=T,L++,"*/"===e.substr(T,2)?(r="*/",T+=2):(r=null,0===L&&i('"*/"')),null===r&&(r=u()),L--,null===r?r="":(r=null,T=c),null!==r?(s=a(),null!==s?r=[r,s]:(r=null,T=o)):(r=null,T=o);null!==r;)n.push(r),o=T,c=T,L++,"*/"===e.substr(T,2)?(r="*/",T+=2):(r=null,0===L&&i('"*/"')),null===r&&(r=u()),L--,null===r?r="":(r=null,T=c),null!==r?(s=a(),null!==s?r=[r,s]:(r=null,T=o)):(r=null,T=o);null!==n?("*/"===e.substr(T,2)?(r="*/",T+=2):(r=null,0===L&&i('"*/"')),null!==r?t=[t,n,r]:(t=null,T=l)):(t=null,T=l)}else t=null,T=l;return t}function b(){var t,n,r,s,l,o,c;if(l=T,"//"===e.substr(T,2)?(t="//",T+=2):(t=null,0===L&&i('"//"')),null!==t){for(n=[],o=T,c=T,L++,r=u(),L--,null===r?r="":(r=null,T=c),null!==r?(s=a(),null!==s?r=[r,s]:(r=null,T=o)):(r=null,T=o);null!==r;)n.push(r),o=T,c=T,L++,r=u(),L--,null===r?r="":(r=null,T=c),null!==r?(s=a(),null!==s?r=[r,s]:(r=null,T=o)):(r=null,T=o);null!==n?t=[t,n]:(t=null,T=l)}else t=null,T=l;return t}function m(){var t,e;for(t=[],e=o(),null===e&&(e=v(),null===e&&(e=b()));null!==e;)t.push(e),e=o(),null===e&&(e=v(),null===e&&(e=b()));return t}function g(){var t,e;for(t=[],e=o(),null===e&&(e=c(),null===e&&(e=d()));null!==e;)t.push(e),e=o(),null===e&&(e=c(),null===e&&(e=d()));return t}function _(){var t,e;return e=T,t=x(),null===t&&(t=w()),null!==t&&(t=function(t,e){return{type:"NumericLiteral",value:e}}(e,t)),null===t&&(T=e),t}function w(){var t,n,r;if(r=T,/^[0-9]/.test(e.charAt(T))?(n=e.charAt(T),T++):(n=null,0===L&&i("[0-9]")),null!==n)for(t=[];null!==n;)t.push(n),/^[0-9]/.test(e.charAt(T))?(n=e.charAt(T),T++):(n=null,0===L&&i("[0-9]"));else t=null;return null!==t&&(t=function(t,e){return parseInt(e.join(""))}(r,t)),null===t&&(T=r),t}function x(){var t,n,r,s,a;return s=T,a=T,t=w(),null!==t?(46===e.charCodeAt(T)?(n=".",T++):(n=null,0===L&&i('"."')),null!==n?(r=w(),null!==r?t=[t,n,r]:(t=null,T=a)):(t=null,T=a)):(t=null,T=a),null!==t&&(t=function(t,e){return parseFloat(e.join(""))}(s,t)),null===t&&(T=s),t}function E(){var t,n,r,s;if(s=T,/^[\-+]/.test(e.charAt(T))?(t=e.charAt(T),T++):(t=null,0===L&&i("[\\-+]")),t=null!==t?t:"",null!==t){if(/^[0-9]/.test(e.charAt(T))?(r=e.charAt(T),T++):(r=null,0===L&&i("[0-9]")),null!==r)for(n=[];null!==r;)n.push(r),/^[0-9]/.test(e.charAt(T))?(r=e.charAt(T),T++):(r=null,0===L&&i("[0-9]"));else n=null;null!==n?t=[t,n]:(t=null,T=s)}else t=null,T=s;return t}function y(){var t,e;return L++,e=T,t=V(),null!==t&&(t=function(t,e){return e}(e,t)),null===t&&(T=e),L--,0===L&&null===t&&i("identifier"),t}function V(){var t,e,n,r,s;if(L++,r=T,s=T,t=l(),null!==t){for(e=[],n=l();null!==n;)e.push(n),n=l();null!==e?t=[t,e]:(t=null,T=s)}else t=null,T=s;return null!==t&&(t=function(t,e,n){return e+n.join("")}(r,t[0],t[1])),null===t&&(T=r),L--,0===L&&null===t&&i("identifier"),t}function C(){var t,n,r,s,a,l,o;return l=T,t=y(),null!==t&&(t=function(t,e){return{type:"Variable",name:e}}(l,t)),null===t&&(T=l),null===t&&(t=_(),null===t&&(l=T,o=T,40===e.charCodeAt(T)?(t="(",T++):(t=null,0===L&&i('"("')),null!==t?(n=g(),null!==n?(r=k(),null!==r?(s=g(),null!==s?(41===e.charCodeAt(T)?(a=")",T++):(a=null,0===L&&i('")"')),null!==a?t=[t,n,r,s,a]:(t=null,T=o)):(t=null,T=o)):(t=null,T=o)):(t=null,T=o)):(t=null,T=o),null!==t&&(t=function(t,e){return e}(l,t[2])),null===t&&(T=l))),t}function S(){var t,e,n,i,r;return t=C(),null===t&&(i=T,r=T,t=A(),null!==t?(e=g(),null!==e?(n=S(),null!==n?t=[t,e,n]:(t=null,T=r)):(t=null,T=r)):(t=null,T=r),null!==t&&(t=function(t,e,n){return{type:"UnaryExpression",operator:e,expression:n}}(i,t[0],t[2])),null===t&&(T=i)),t}function A(){var t;return 43===e.charCodeAt(T)?(t="+",T++):(t=null,0===L&&i('"+"')),null===t&&(45===e.charCodeAt(T)?(t="-",T++):(t=null,0===L&&i('"-"')),null===t&&(33===e.charCodeAt(T)?(t="!",T++):(t=null,0===L&&i('"!"')))),t}function z(){var t,e,n,i,r,s,a,l,o;if(a=T,l=T,t=S(),null!==t){for(e=[],o=T,n=g(),null!==n?(i=M(),null!==i?(r=g(),null!==r?(s=S(),null!==s?n=[n,i,r,s]:(n=null,T=o)):(n=null,T=o)):(n=null,T=o)):(n=null,T=o);null!==n;)e.push(n),o=T,n=g(),null!==n?(i=M(),null!==i?(r=g(),null!==r?(s=S(),null!==s?n=[n,i,r,s]:(n=null,T=o)):(n=null,T=o)):(n=null,T=o)):(n=null,T=o);null!==e?t=[t,e]:(t=null,T=l)}else t=null,T=l;return null!==t&&(t=function(t,e,n){for(var i=e,r=0;n.length>r;r++)i={type:"MultiplicativeExpression",operator:n[r][1],left:i,right:n[r][3]};return i}(a,t[0],t[1])),null===t&&(T=a),t}function M(){var t;return 42===e.charCodeAt(T)?(t="*",T++):(t=null,0===L&&i('"*"')),null===t&&(47===e.charCodeAt(T)?(t="/",T++):(t=null,0===L&&i('"/"'))),t}function O(){var t,e,n,i,r,s,a,l,o;if(a=T,l=T,t=z(),null!==t){for(e=[],o=T,n=g(),null!==n?(i=j(),null!==i?(r=g(),null!==r?(s=z(),null!==s?n=[n,i,r,s]:(n=null,T=o)):(n=null,T=o)):(n=null,T=o)):(n=null,T=o);null!==n;)e.push(n),o=T,n=g(),null!==n?(i=j(),null!==i?(r=g(),null!==r?(s=z(),null!==s?n=[n,i,r,s]:(n=null,T=o)):(n=null,T=o)):(n=null,T=o)):(n=null,T=o);null!==e?t=[t,e]:(t=null,T=l)}else t=null,T=l;return null!==t&&(t=function(t,e,n){for(var i=e,r=0;n.length>r;r++)i={type:"AdditiveExpression",operator:n[r][1],left:i,right:n[r][3]};return i}(a,t[0],t[1])),null===t&&(T=a),t}function j(){var t;return 43===e.charCodeAt(T)?(t="+",T++):(t=null,0===L&&i('"+"')),null===t&&(45===e.charCodeAt(T)?(t="-",T++):(t=null,0===L&&i('"-"'))),t}function R(){var t,e,n,i,r,s,a,l,o;if(a=T,l=T,t=O(),null!==t){for(e=[],o=T,n=g(),null!==n?(i=I(),null!==i?(r=g(),null!==r?(s=O(),null!==s?n=[n,i,r,s]:(n=null,T=o)):(n=null,T=o)):(n=null,T=o)):(n=null,T=o);null!==n;)e.push(n),o=T,n=g(),null!==n?(i=I(),null!==i?(r=g(),null!==r?(s=O(),null!==s?n=[n,i,r,s]:(n=null,T=o)):(n=null,T=o)):(n=null,T=o)):(n=null,T=o);null!==e?t=[t,e]:(t=null,T=l)}else t=null,T=l;return null!==t&&(t=function(t,e,n){for(var i=e,r=0;n.length>r;r++)i={type:"Inequality",operator:n[r][1],left:i,right:n[r][3]};return i}(a,t[0],t[1])),null===t&&(T=a),t}function I(){var t;return"<="===e.substr(T,2)?(t="<=",T+=2):(t=null,0===L&&i('"<="')),null===t&&(">="===e.substr(T,2)?(t=">=",T+=2):(t=null,0===L&&i('">="')),null===t&&(60===e.charCodeAt(T)?(t="<",T++):(t=null,0===L&&i('"<"')),null===t&&(62===e.charCodeAt(T)?(t=">",T++):(t=null,0===L&&i('">"'))))),t}function k(){var t,n,r,s,a,l,o,u,c;if(o=T,u=T,t=R(),null!==t){for(n=[],c=T,r=g(),null!==r?("=="===e.substr(T,2)?(s="==",T+=2):(s=null,0===L&&i('"=="')),null!==s?(a=g(),null!==a?(l=R(),null!==l?r=[r,s,a,l]:(r=null,T=c)):(r=null,T=c)):(r=null,T=c)):(r=null,T=c);null!==r;)n.push(r),c=T,r=g(),null!==r?("=="===e.substr(T,2)?(s="==",T+=2):(s=null,0===L&&i('"=="')),null!==s?(a=g(),null!==a?(l=R(),null!==l?r=[r,s,a,l]:(r=null,T=c)):(r=null,T=c)):(r=null,T=c)):(r=null,T=c);null!==n?t=[t,n]:(t=null,T=u)}else t=null,T=u;return null!==t&&(t=function(t,e,n){for(var i=e,r=0;n.length>r;r++)i={type:"Equality",operator:n[r][1],left:i,right:n[r][3]};return i}(o,t[0],t[1])),null===t&&(T=o),t}function N(t){t.sort();for(var e=null,n=[],i=0;t.length>i;i++)t[i]!==e&&(n.push(t[i]),e=t[i]);return n}function q(){for(var t=1,n=1,i=!1,r=0;Math.max(T,H)>r;r++){var s=e.charAt(r);"\n"===s?(i||t++,n=1,i=!1):"\r"===s||"\u2028"===s||"\u2029"===s?(t++,n=1,i=!0):(n++,i=!1)}return{line:t,column:n}}var P={start:r,Statement:s,SourceCharacter:a,IdentifierStart:l,WhiteSpace:o,LineTerminator:u,LineTerminatorSequence:c,EOS:h,EOF:f,Comment:d,MultiLineComment:p,MultiLineCommentNoLineTerminator:v,SingleLineComment:b,_:m,__:g,Literal:_,Integer:w,Real:x,SignedInteger:E,Identifier:y,IdentifierName:V,PrimaryExpression:C,UnaryExpression:S,UnaryOperator:A,MultiplicativeExpression:z,MultiplicativeOperator:M,AdditiveExpression:O,AdditiveOperator:j,InequalityExpression:R,InequalityOperator:I,LinearExpression:k};if(void 0!==n){if(void 0===P[n])throw Error("Invalid rule name: "+t(n)+".")}else n="start";var T=0,L=0,H=0,F=[],D=P[n]();if(null===D||T!==e.length){var Q=Math.max(T,H),W=e.length>Q?e.charAt(Q):null,G=q();throw new this.SyntaxError(N(F),W,Q,G.line,G.column)}return D},toSource:function(){return this._source}};return e.SyntaxError=function(e,n,i,r,s){function a(e,n){var i,r;switch(e.length){case 0:i="end of input";break;case 1:i=e[0];break;default:i=e.slice(0,e.length-1).join(", ")+" or "+e[e.length-1]}return r=n?t(n):"end of input","Expected "+i+" but "+r+" found."}this.name="SyntaxError",this.expected=e,this.found=n,this.message=a(e,n),this.offset=i,this.line=r,this.column=s},e.SyntaxError.prototype=Error.prototype,e}()}).call("undefined"!=typeof module?module.compiled=!0&&module:this); -},{}],2:[function(require,module,exports){ -"use strict";function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _processEqualSpacer(t,e){t.equalSpacerIndex=t.equalSpacerIndex||1;var r="_~"+t.lineIndex+":"+t.equalSpacerIndex+"~";switch(t.equalSpacerIndex>1&&t.constraints.push({view1:"_~"+t.lineIndex+":1~",attr1:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,relation:t.relation.relation||Relation.EQU,view2:r,attr2:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,priority:t.relation.priority}),t.equalSpacerIndex++,t.relation.view||t.relation.multiplier&&1!==t.relation.multiplier?(t.constraints.push({view1:r,attr1:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,relation:t.relation.relation||Relation.EQU,view2:t.relation.view,attr2:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,priority:t.relation.priority,multiplier:t.relation.multiplier}),t.relation.multiplier=void 0):t.relation.constant&&(t.constraints.push({view1:r,attr1:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,relation:Relation.EQU,view2:null,attr2:Attribute.CONST,priority:t.relation.priority,constant:t.relation.constant}),t.relation.constant=void 0),t.orientation){case Orientation.HORIZONTAL:t.attr1=t.view1!==e?Attribute.RIGHT:Attribute.LEFT,t.attr2=Attribute.LEFT;break;case Orientation.VERTICAL:t.attr1=t.view1!==e?Attribute.BOTTOM:Attribute.TOP,t.attr2=Attribute.TOP;break;case Orientation.ZINDEX:t.attr1=Attribute.ZINDEX,t.attr2=Attribute.ZINDEX,t.relation.constant=t.view1!==e?"default":0}t.constraints.push({view1:t.view1,attr1:t.attr1,relation:t.relation.relation,view2:r,attr2:t.attr2,priority:t.relation.priority}),t.view1=r}function _processProportionalSpacer(t,e){t.proportionalSpacerIndex=t.proportionalSpacerIndex||1;var r="_-"+t.lineIndex+":"+t.proportionalSpacerIndex+"-";switch(t.proportionalSpacerIndex++,t.constraints.push({view1:r,attr1:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,relation:t.relation.relation||Relation.EQU,view2:t.relation.view,attr2:t.horizontal?Attribute.WIDTH:Attribute.HEIGHT,priority:t.relation.priority,multiplier:t.relation.multiplier}),t.relation.multiplier=void 0,t.orientation){case Orientation.HORIZONTAL:t.attr1=t.view1!==e?Attribute.RIGHT:Attribute.LEFT,t.attr2=Attribute.LEFT;break;case Orientation.VERTICAL:t.attr1=t.view1!==e?Attribute.BOTTOM:Attribute.TOP,t.attr2=Attribute.TOP;break;case Orientation.ZINDEX:t.attr1=Attribute.ZINDEX,t.attr2=Attribute.ZINDEX,t.relation.constant=t.view1!==e?"default":0}t.constraints.push({view1:t.view1,attr1:t.attr1,relation:t.relation.relation,view2:r,attr2:t.attr2,priority:t.relation.priority}),t.view1=r}function _processStackView(t,e,r){for(var i=void 0,n=1;4>=n;n*=2)if(r.orientations&n&&r.stack.orientation!==n&&!(r.stack.processedOrientations&n)){r.stack.processedOrientations=r.stack.processedOrientations|n,i=i||{name:e,type:"stack"};for(var a=0,s=r.stack.subViews.length;s>a;a++)n===Orientation.ZINDEX?t.constraints.push({view1:i,attr1:Attribute.ZINDEX,relation:Relation.EQU,view2:r.stack.subViews[a],attr2:Attribute.ZINDEX}):(t.constraints.push({view1:i,attr1:n===Orientation.VERTICAL?Attribute.HEIGHT:Attribute.WIDTH,relation:Relation.EQU,view2:r.stack.subViews[a],attr2:n===Orientation.VERTICAL?Attribute.HEIGHT:Attribute.WIDTH}),t.constraints.push({view1:i,attr1:n===Orientation.VERTICAL?Attribute.TOP:Attribute.LEFT,relation:Relation.EQU,view2:r.stack.subViews[a],attr2:n===Orientation.VERTICAL?Attribute.TOP:Attribute.LEFT}))}}function _processCascade(t,e,r){var i=[],n=void 0;r&&e.push({view:r});for(var a=0;ar;r++)if(t[r]!==e[r])return!1;return!0}var _createClass=function(){function t(t,e){for(var r=0;rn;n++)a=t.charAt(n),"\n"===a?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===a||"\u2028"===a||"\u2029"===a?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}return kt!==e&&(kt>e&&(kt=0,Rt={line:1,column:1,seenCR:!1}),r(Rt,kt,e),kt=e),Rt}function n(t){Ft>St||(St>Ft&&(Ft=St,Nt=[]),Nt.push(t))}function a(r,n,a){function s(t){var e=1;for(t.sort(function(t,e){return t.descriptione.description?1:0});e1?s.slice(0,-1).join(", ")+" or "+s[t.length-1]:s[0],n=e?'"'+r(e)+'"':"end of input","Expected "+i+" but "+n+" found."}var u=i(a),c=a1?arguments[1]:{},E={},I={visualFormatString:s},T=s,V=E,O=null,H=":",S={type:"literal",value:":",description:'":"'},x=function(t,e,r,i,n){return{orientation:t?t[0]:"horizontal",cascade:(e||[]).concat([r],[].concat.apply([],i),n||[])}},k="H",R={type:"literal",value:"H",description:'"H"'},F="V",N={type:"literal",value:"V",description:'"V"'},L=function(t){return"H"==t?"horizontal":"vertical"},q="|",Z={type:"literal",value:"|",description:'"|"'},D=function(){return{view:null}},z="[",G={type:"literal",value:"[",description:'"["'},X="]",P={type:"literal",value:"]",description:'"]"'},W=function(t,e){return y(t,e?{constraints:e}:{})},Q="-",U={type:"literal",value:"-",description:'"-"'},$=function(t){return t},B=function(){return[{relation:"equ",constant:"default",$parserOffset:r()}]},j="",Y=function(){return[{relation:"equ",constant:0,$parserOffset:r()}]},M=function(t){return[{relation:"equ",constant:t,$parserOffset:r()}]},J="(",K={type:"literal",value:"(",description:'"("'},tt=",",et={type:"literal",value:",",description:'","'},rt=")",it={type:"literal",value:")",description:'")"'},nt=function(t,e){return[t].concat(e.map(function(t){return t[1]}))},at="@",st={type:"literal",value:"@",description:'"@"'},ot=function(t,e,r){return y({relation:"equ"},t||{},e,r?r[1]:{})},ut="==",ct={type:"literal",value:"==",description:'"=="'},lt=function(){return{relation:"equ",$parserOffset:r()}},ht="<=",pt={type:"literal",value:"<=",description:'"<="'},ft=function(){return{relation:"leq",$parserOffset:r()}},dt=">=",vt={type:"literal",value:">=",description:'">="'},At=function(){return{relation:"geq",$parserOffset:r()}},gt=/^[0-9]/,wt={type:"class",value:"[0-9]",description:"[0-9]"},bt=function(t){return{priority:parseInt(t.join(""),10)}},_t=function(t){return{constant:t}},yt=/^[a-zA-Z_]/,mt={type:"class",value:"[a-zA-Z_]",description:"[a-zA-Z_]"},Ct=/^[a-zA-Z0-9_]/,Et={type:"class",value:"[a-zA-Z0-9_]",description:"[a-zA-Z0-9_]"},It=function(t,e){return{view:t+e}},Tt=".",Vt={type:"literal",value:".",description:'"."'},Ot=function(t,e){return parseFloat(t.concat(".").concat(e).join(""),10)},Ht=function(t){return parseInt(t.join(""),10)},St=0,xt=0,kt=0,Rt={line:1,column:1,seenCR:!1},Ft=0,Nt=[],Lt=0;if("startRule"in C){if(!(C.startRule in I))throw new Error("Can't start parsing from rule \""+C.startRule+'".');T=I[C.startRule]}if(m=T(),m!==E&&St===t.length)return m;throw m!==E&&Stn;n++)a=t.charAt(n),"\n"===a?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===a||"\u2028"===a||"\u2029"===a?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}return Qe!==e&&(Qe>e&&(Qe=0,Ue={line:1,column:1,seenCR:!1}),r(Ue,Qe,e),Qe=e),Ue}function n(t){$e>Pe||(Pe>$e&&($e=Pe,Be=[]),Be.push(t))}function a(r,n,a){function s(t){var e=1;for(t.sort(function(t,e){return t.descriptione.description?1:0});e1?s.slice(0,-1).join(", ")+" or "+s[t.length-1]:s[0],n=e?'"'+r(e)+'"':"end of input","Expected "+i+" but "+n+" found."}var u=i(a),c=aPe?(s=t.charAt(Pe),Pe++):(s=R,0===je&&n(it));s!==R;)a.push(s),t.length>Pe?(s=t.charAt(Pe),Pe++):(s=R,0===je&&n(it));a!==R?(r=[r,i,a],e=r):(Pe=e,e=L)}else Pe=e,e=L;else Pe=e,e=L;return e}function c(){var e,r;return e=Pe,124===t.charCodeAt(Pe)?(r=nt,Pe++):(r=R,0===je&&n(at)),r!==R&&(We=e,r=st()),e=r}function l(){var e,r,i,a,s,o;return e=Pe,91===t.charCodeAt(Pe)?(r=ot,Pe++):(r=R,0===je&&n(ut)),r!==R?(i=O(),i!==R?(a=v(),a===R&&(a=q),a!==R?(s=h(),s===R&&(s=q),s!==R?(93===t.charCodeAt(Pe)?(o=ct,Pe++):(o=R,0===je&&n(lt)),o!==R?(We=e,r=ht(i,a,s),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e}function h(){var e,r,i,a,s,o;if(e=Pe,58===t.charCodeAt(Pe)?(r=Z,Pe++):(r=R,0===je&&n(D)),r!==R){if(i=[],a=Pe,s=p(),s!==R?(o=l(),o!==R?(s=[s,o],a=s):(Pe=a,a=L)):(Pe=a,a=L),a!==R)for(;a!==R;)i.push(a),a=Pe,s=p(),s!==R?(o=l(),o!==R?(s=[s,o],a=s):(Pe=a,a=L)):(Pe=a,a=L);else i=L;i!==R?(a=p(),a!==R?(We=e,r=pt(i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)}else Pe=e,e=L;return e}function p(){var e,r,i,a;return e=Pe,t.substr(Pe,2)===ft?(r=ft,Pe+=2):(r=R,0===je&&n(dt)),r!==R&&(We=e,r=vt()),e=r,e===R&&(e=Pe,45===t.charCodeAt(Pe)?(r=At,Pe++):(r=R,0===je&&n(gt)),r!==R?(i=f(),i!==R?(45===t.charCodeAt(Pe)?(a=At,Pe++):(a=R,0===je&&n(gt)),a!==R?(We=e,r=wt(i),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e===R&&(e=Pe,45===t.charCodeAt(Pe)?(r=At,Pe++):(r=R,0===je&&n(gt)),r!==R&&(We=e,r=bt()),e=r,e===R&&(e=Pe,126===t.charCodeAt(Pe)?(r=_t,Pe++):(r=R,0===je&&n(yt)),r!==R?(i=g(),i!==R?(126===t.charCodeAt(Pe)?(a=_t,Pe++):(a=R,0===je&&n(yt)),a!==R?(We=e,r=wt(i),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e===R&&(e=Pe,126===t.charCodeAt(Pe)?(r=_t,Pe++):(r=R,0===je&&n(yt)),r!==R&&(We=e,r=mt()),e=r,e===R&&(e=Pe,r=Ct,r!==R&&(We=e,r=Et()),e=r))))),e}function f(){var t;return t=d(),t===R&&(t=v()),t}function d(){var t,e;return t=Pe,e=C(),e!==R&&(We=t,e=It(e)),t=e,t===R&&(t=Pe,e=H(),e!==R&&(We=t,e=Tt(e)),t=e),t}function v(){var e,r,i,a,s,o,u;if(e=Pe,40===t.charCodeAt(Pe)?(r=Vt,Pe++):(r=R,0===je&&n(Ot)),r!==R)if(i=A(),i!==R){for(a=[],s=Pe,44===t.charCodeAt(Pe)?(o=Ht,Pe++):(o=R,0===je&&n(St)),o!==R?(u=A(),u!==R?(o=[o,u],s=o):(Pe=s,s=L)):(Pe=s,s=L);s!==R;)a.push(s),s=Pe,44===t.charCodeAt(Pe)?(o=Ht,Pe++):(o=R,0===je&&n(St)),o!==R?(u=A(),u!==R?(o=[o,u],s=o):(Pe=s,s=L)):(Pe=s,s=L);a!==R?(41===t.charCodeAt(Pe)?(s=xt,Pe++):(s=R,0===je&&n(kt)),s!==R?(We=e,r=Rt(i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)}else Pe=e,e=L;else Pe=e,e=L;return e}function A(){var e,r,i,a,s,o;return e=Pe,r=b(),r===R&&(r=q),r!==R?(i=_(),i!==R?(a=Pe,64===t.charCodeAt(Pe)?(s=Ft,Pe++):(s=R,0===je&&n(Nt)),s!==R?(o=y(),o!==R?(s=[s,o],a=s):(Pe=a,a=L)):(Pe=a,a=L),a===R&&(a=q),a!==R?(We=e,r=Lt(r,i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e}function g(){var e,r,i,a,s,o,u;if(e=Pe,40===t.charCodeAt(Pe)?(r=Vt,Pe++):(r=R,0===je&&n(Ot)),r!==R)if(i=w(),i!==R){for(a=[],s=Pe,44===t.charCodeAt(Pe)?(o=Ht,Pe++):(o=R,0===je&&n(St)),o!==R?(u=w(),u!==R?(o=[o,u],s=o):(Pe=s,s=L)):(Pe=s,s=L);s!==R;)a.push(s),s=Pe,44===t.charCodeAt(Pe)?(o=Ht,Pe++):(o=R,0===je&&n(St)),o!==R?(u=w(),u!==R?(o=[o,u],s=o):(Pe=s,s=L)):(Pe=s,s=L);a!==R?(41===t.charCodeAt(Pe)?(s=xt,Pe++):(s=R,0===je&&n(kt)),s!==R?(We=e,r=Rt(i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)}else Pe=e,e=L;else Pe=e,e=L;return e}function w(){var e,r,i,a,s,o;return e=Pe,r=b(),r===R&&(r=q),r!==R?(i=_(),i!==R?(a=Pe,64===t.charCodeAt(Pe)?(s=Ft,Pe++):(s=R,0===je&&n(Nt)),s!==R?(o=y(),o!==R?(s=[s,o],a=s):(Pe=a,a=L)):(Pe=a,a=L),a===R&&(a=q),a!==R?(We=e,r=qt(r,i,a),e=r):(Pe=e,e=L)):(Pe=e,e=L)):(Pe=e,e=L),e}function b(){var e,r;return e=Pe,t.substr(Pe,2)===Zt?(r=Zt,Pe+=2):(r=R,0===je&&n(Dt)),r!==R&&(We=e,r=zt()),e=r,e===R&&(e=Pe,t.substr(Pe,2)===Gt?(r=Gt,Pe+=2):(r=R,0===je&&n(Xt)),r!==R&&(We=e,r=Pt()),e=r,e===R&&(e=Pe,t.substr(Pe,2)===Wt?(r=Wt,Pe+=2):(r=R,0===je&&n(Qt)),r!==R&&(We=e,r=Ut()),e=r)),e}function _(){var t;return t=C(),t===R&&(t=m(),t===R&&(t=E())),t}function y(){var e,r,i;if(e=Pe,r=[],$t.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===je&&n(Bt)),i!==R)for(;i!==R;)r.push(i),$t.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===je&&n(Bt));else r=L;return r!==R&&(We=e,r=jt(r)),e=r}function m(){var t,e;return t=Pe,e=H(),e!==R&&(We=t,e=Yt(e)),t=e}function C(){var e,r,i;return e=Pe,r=H(),r!==R?(37===t.charCodeAt(Pe)?(i=Mt,Pe++):(i=R,0===je&&n(Jt)),i!==R?(We=e,r=Kt(r),e=r):(Pe=e,e=L)):(Pe=e,e=L),e}function E(){var t,e,r,i,n;return t=Pe,e=O(),e!==R?(r=I(),r===R&&(r=q),r!==R?(i=T(),i===R&&(i=q),i!==R?(n=V(),n===R&&(n=q),n!==R?(We=t,e=te(e,r,i,n),t=e):(Pe=t,t=L)):(Pe=t,t=L)):(Pe=t,t=L)):(Pe=t,t=L),t}function I(){var e,r;return e=Pe,t.substr(Pe,5)===ee?(r=ee,Pe+=5):(r=R,0===je&&n(re)),r!==R&&(We=e,r=ie()),e=r,e===R&&(e=Pe,t.substr(Pe,6)===ne?(r=ne,Pe+=6):(r=R,0===je&&n(ae)),r!==R&&(We=e,r=se()),e=r,e===R&&(e=Pe,t.substr(Pe,4)===oe?(r=oe,Pe+=4):(r=R,0===je&&n(ue)),r!==R&&(We=e,r=ce()),e=r,e===R&&(e=Pe,t.substr(Pe,7)===le?(r=le,Pe+=7):(r=R,0===je&&n(he)),r!==R&&(We=e,r=pe()),e=r,e===R&&(e=Pe,t.substr(Pe,6)===fe?(r=fe,Pe+=6):(r=R,0===je&&n(de)),r!==R&&(We=e,r=ve()),e=r,e===R&&(e=Pe,t.substr(Pe,7)===Ae?(r=Ae,Pe+=7):(r=R,0===je&&n(ge)),r!==R&&(We=e,r=we()),e=r,e===R&&(e=Pe,t.substr(Pe,8)===be?(r=be,Pe+=8):(r=R,0===je&&n(_e)),r!==R&&(We=e,r=ye()),e=r,e===R&&(e=Pe,t.substr(Pe,8)===me?(r=me,Pe+=8):(r=R,0===je&&n(Ce)),r!==R&&(We=e,r=Ee()),e=r))))))),e}function T(){var e,r,i;return e=Pe,47===t.charCodeAt(Pe)?(r=Ie,Pe++):(r=R,0===je&&n(Te)),r!==R?(i=H(),i!==R?(We=e,r=Ve(i),e=r):(Pe=e,e=L)):(Pe=e,e=L),e===R&&(e=Pe,42===t.charCodeAt(Pe)?(r=Oe,Pe++):(r=R,0===je&&n(He)),r!==R?(i=H(),i!==R?(We=e,r=Se(i),e=r):(Pe=e,e=L)):(Pe=e,e=L)),e}function V(){var e,r,i;return e=Pe,45===t.charCodeAt(Pe)?(r=At,Pe++):(r=R,0===je&&n(gt)),r!==R?(i=H(),i!==R?(We=e,r=xe(i),e=r):(Pe=e,e=L)):(Pe=e,e=L),e===R&&(e=Pe,43===t.charCodeAt(Pe)?(r=ke,Pe++):(r=R,0===je&&n(Re)),r!==R?(i=H(),i!==R?(We=e,r=Se(i),e=r):(Pe=e,e=L)):(Pe=e,e=L)),e}function O(){var e,r,i,a,s;if(e=Pe,r=Pe,i=[],Fe.test(t.charAt(Pe))?(a=t.charAt(Pe),Pe++):(a=R,0===je&&n(Ne)),a!==R)for(;a!==R;)i.push(a),Fe.test(t.charAt(Pe))?(a=t.charAt(Pe),Pe++):(a=R,0===je&&n(Ne));else i=L;if(i!==R&&(i=t.substring(r,Pe)),r=i,r!==R){for(i=Pe,a=[],Le.test(t.charAt(Pe))?(s=t.charAt(Pe),Pe++):(s=R,0===je&&n(qe));s!==R;)a.push(s),Le.test(t.charAt(Pe))?(s=t.charAt(Pe),Pe++):(s=R,0===je&&n(qe));a!==R&&(a=t.substring(i,Pe)),i=a,i!==R?(We=e,r=Ze(r,i),e=r):(Pe=e,e=L)}else Pe=e,e=L;return e}function H(){var e,r,i,a,s;if(e=Pe,r=[],$t.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===je&&n(Bt)),i!==R)for(;i!==R;)r.push(i),$t.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===je&&n(Bt));else r=L;if(r!==R)if(46===t.charCodeAt(Pe)?(i=De,Pe++):(i=R,0===je&&n(ze)),i!==R){if(a=[],$t.test(t.charAt(Pe))?(s=t.charAt(Pe),Pe++):(s=R,0===je&&n(Bt)),s!==R)for(;s!==R;)a.push(s),$t.test(t.charAt(Pe))?(s=t.charAt(Pe),Pe++):(s=R,0===je&&n(Bt));else a=L;a!==R?(We=e,r=Ge(r,a),e=r):(Pe=e,e=L)}else Pe=e,e=L;else Pe=e,e=L;if(e===R){if(e=Pe,r=[],$t.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===je&&n(Bt)),i!==R)for(;i!==R;)r.push(i),$t.test(t.charAt(Pe))?(i=t.charAt(Pe),Pe++):(i=R,0===je&&n(Bt));else r=L;r!==R&&(We=e,r=Xe(r)),e=r}return e}function S(t){for(var e=1;e1?arguments[1]:{},R={},F={visualFormatString:s},N=s,L=R,q=null,Z=":",D={type:"literal",value:":",description:'":"'},z=function(t,e,r,i,n,a){return{orientation:t?t[0]:"horizontal",cascade:(e||[]).concat([r],[].concat.apply([],i),n||[])}},G="HV",X={type:"literal",value:"HV",description:'"HV"'},P=function(){return"horzvert"},W="H",Q={type:"literal",value:"H",description:'"H"'},U=function(){return"horizontal"},$="V",B={type:"literal",value:"V",description:'"V"'},j=function(){return"vertical"},Y="Z",M={type:"literal",value:"Z",description:'"Z"'},J=function(){return"zIndex"},K=" ",tt={type:"literal",value:" ",description:'" "'},et="//",rt={type:"literal",value:"//",description:'"//"'},it={type:"any",description:"any character"},nt="|",at={type:"literal",value:"|",description:'"|"'},st=function(){return{view:null}},ot="[",ut={type:"literal",value:"[",description:'"["'},ct="]",lt={type:"literal",value:"]",description:'"]"'},ht=function(t,e,r){return S(S(t,e?{constraints:e}:{}),r?{cascade:r}:{})},pt=function(t,e){return[].concat([].concat.apply([],t),[e])},ft="->",dt={type:"literal",value:"->",description:'"->"'},vt=function(){return[{relation:"none",$parserOffset:r()}]},At="-",gt={type:"literal",value:"-",description:'"-"'},wt=function(t){return t},bt=function(){return[{relation:"equ",constant:"default",$parserOffset:r()}]},_t="~",yt={type:"literal",value:"~",description:'"~"'},mt=function(){return[{relation:"equ",equalSpacing:!0,$parserOffset:r()}]},Ct="",Et=function(){return[{relation:"equ",constant:0,$parserOffset:r()}]},It=function(t){return[{relation:"equ",multiplier:t.multiplier,$parserOffset:r()}]},Tt=function(t){return[{relation:"equ",constant:t,$parserOffset:r()}]},Vt="(",Ot={type:"literal",value:"(",description:'"("'},Ht=",",St={type:"literal",value:",",description:'","'},xt=")",kt={type:"literal",value:")",description:'")"'},Rt=function(t,e){return[t].concat(e.map(function(t){return t[1]}))},Ft="@",Nt={type:"literal",value:"@",description:'"@"'},Lt=function(t,e,r){return S({relation:"equ"},t||{},e,r?r[1]:{})},qt=function(t,e,r){return S({relation:"equ",equalSpacing:!0},t||{},e,r?r[1]:{})},Zt="==",Dt={type:"literal",value:"==",description:'"=="'},zt=function(){return{relation:"equ",$parserOffset:r()}},Gt="<=",Xt={type:"literal",value:"<=",description:'"<="'},Pt=function(){return{relation:"leq",$parserOffset:r()}},Wt=">=",Qt={type:"literal",value:">=",description:'">="'},Ut=function(){return{relation:"geq",$parserOffset:r()}},$t=/^[0-9]/,Bt={type:"class",value:"[0-9]",description:"[0-9]"},jt=function(t){return{priority:parseInt(t.join(""),10)}},Yt=function(t){return{constant:t}},Mt="%",Jt={type:"literal",value:"%",description:'"%"'},Kt=function(t){return{view:null,multiplier:t/100}},te=function(t,e,r,i){return{view:t.view,attribute:e?e:void 0,multiplier:r?r:1,constant:i?i:void 0}},ee=".left",re={type:"literal",value:".left",description:'".left"'},ie=function(){return"left"},ne=".right",ae={type:"literal",value:".right",description:'".right"'},se=function(){return"right"},oe=".top",ue={type:"literal",value:".top",description:'".top"'},ce=function(){return"top"},le=".bottom",he={type:"literal",value:".bottom",description:'".bottom"'},pe=function(){return"bottom"},fe=".width",de={type:"literal",value:".width",description:'".width"'},ve=function(){return"width"},Ae=".height",ge={type:"literal",value:".height",description:'".height"'},we=function(){return"height"},be=".centerX",_e={type:"literal",value:".centerX",description:'".centerX"'},ye=function(){return"centerX"},me=".centerY",Ce={type:"literal",value:".centerY",description:'".centerY"'},Ee=function(){return"centerY"},Ie="/",Te={type:"literal",value:"/",description:'"/"'},Ve=function(t){return 1/t},Oe="*",He={type:"literal",value:"*",description:'"*"'},Se=function(t){return t},xe=function(t){return-t},ke="+",Re={type:"literal",value:"+",description:'"+"'},Fe=/^[a-zA-Z_]/,Ne={type:"class",value:"[a-zA-Z_]",description:"[a-zA-Z_]"},Le=/^[a-zA-Z0-9_]/,qe={type:"class",value:"[a-zA-Z0-9_]",description:"[a-zA-Z0-9_]"},Ze=function(t,e){return{view:t+e}},De=".",ze={type:"literal",value:".",description:'"."'},Ge=function(t,e){return parseFloat(t.concat(".").concat(e).join(""),10)},Xe=function(t){return parseInt(t.join(""),10)},Pe=0,We=0,Qe=0,Ue={line:1,column:1,seenCR:!1},$e=0,Be=[],je=0;if("startRule"in k){if(!(k.startRule in F))throw new Error("Can't start parsing from rule \""+k.startRule+'".');N=F[k.startRule]}if(x=N(),x!==R&&Pe===t.length)return x;throw x!==R&&Peh;h++){var p=metaInfoCategories[l],f=(0===h?"":i)+p;if(0===c.indexOf("//"+f+" "))for(var d=c.substring(3+f.length).split(" "),v=0;v1?A[1]:""}else 0===c.indexOf("//"+f+":")&&(a[p]=c.substring(3+f.length))}if(a.viewport){var g=a.viewport,w=g["aspect-ratio"];w&&(w=w.split("/"),g["aspect-ratio"]=parseInt(w[0])/parseInt(w[1])),void 0!==g.height&&(g.height="intrinsic"===g.height?!0:parseInt(g.height)),void 0!==g.width&&(g.width="intrinsic"===g.width?!0:parseInt(g.width)),void 0!==g["max-height"]&&(g["max-height"]=parseInt(g["max-height"])),void 0!==g["max-width"]&&(g["max-width"]=parseInt(g["max-width"])),void 0!==g["min-height"]&&(g["min-height"]=parseInt(g["min-height"])),void 0!==g["min-width"]&&(g["min-width"]=parseInt(g["min-width"]))}if(a.widths)for(n in a.widths){var b="intrinsic"===a.widths[n]?!0:parseInt(a.widths[n]);a.widths[n]=b,(void 0===b||isNaN(b))&&delete a.widths[n]}if(a.heights)for(n in a.heights){var _="intrinsic"===a.heights[n]?!0:parseInt(a.heights[n]);a.heights[n]=_,(void 0===_||isNaN(_))&&delete a.heights[n]}if(a.spacing){var y=JSON.parse(a.spacing);a.spacing=y,(void 0===y||isNaN(y))&&delete a.spacing}return a}}]),t}(),SubView=function(){function t(e){_classCallCheck(this,t),this._name=e.name,this._type=e.type,this._solver=e.solver,this._attr={},e.name||(this._attr[Attribute.LEFT]=new c.Variable,this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.LEFT],c.Strength.required)),this._attr[Attribute.TOP]=new c.Variable,this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.TOP],c.Strength.required)),this._attr[Attribute.ZINDEX]=new c.Variable,this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.ZINDEX],c.Strength.required)))}return _createClass(t,[{key:"toJSON",value:function(){return{name:this.name,left:this.left,top:this.top,width:this.width,height:this.height}}},{key:"toString",value:function(){JSON.stringify(this.toJSON(),void 0,2)}},{key:"name",get:function(){return this._name}},{key:"left",get:function(){return this._getAttrValue(Attribute.LEFT)}},{key:"right",get:function(){return this._getAttrValue(Attribute.RIGHT)}},{key:"width",get:function(){return this._getAttrValue(Attribute.WIDTH)}},{key:"height",get:function(){return this._getAttrValue(Attribute.HEIGHT)}},{key:"intrinsicWidth",get:function(){return this._intrinsicWidth},set:function(t){if(void 0!==t&&t!==this._intrinsicWidth){var e=this._getAttr(Attribute.WIDTH);void 0===this._intrinsicWidth&&this._solver.addEditVar(e,new c.Strength("required",this._name?998:999,1e3,1e3)),this._intrinsicWidth=t,this._solver.suggestValue(e,t),this._solver.resolve()}}},{key:"intrinsicHeight",get:function(){return this._intrinsicHeight},set:function(t){if(void 0!==t&&t!==this._intrinsicHeight){var e=this._getAttr(Attribute.HEIGHT);void 0===this._intrinsicHeight&&this._solver.addEditVar(e,new c.Strength("required",this._name?998:999,1e3,1e3)),this._intrinsicHeight=t,this._solver.suggestValue(e,t),this._solver.resolve()}}},{key:"top",get:function(){return this._getAttrValue(Attribute.TOP)}},{key:"bottom",get:function(){return this._getAttrValue(Attribute.BOTTOM)}},{key:"centerX",get:function(){return this._getAttrValue(Attribute.CENTERX)}},{key:"centerY",get:function(){return this._getAttrValue(Attribute.CENTERY)}},{key:"zIndex",get:function(){return this._getAttrValue(Attribute.ZINDEX)}},{key:"type",get:function(){return this._type}},{key:"getValue",value:function(t){return this._attr[t]?this._attr[t].value():void 0}},{key:"_getAttr",value:function(t){if(this._attr[t])return this._attr[t];switch(this._attr[t]=new c.Variable,t){case Attribute.RIGHT:this._getAttr(Attribute.LEFT),this._getAttr(Attribute.WIDTH),this._solver.addConstraint(new c.Equation(this._attr[t],c.plus(this._attr[Attribute.LEFT],this._attr[Attribute.WIDTH])));break;case Attribute.BOTTOM:this._getAttr(Attribute.TOP),this._getAttr(Attribute.HEIGHT),this._solver.addConstraint(new c.Equation(this._attr[t],c.plus(this._attr[Attribute.TOP],this._attr[Attribute.HEIGHT])));break;case Attribute.CENTERX:this._getAttr(Attribute.LEFT),this._getAttr(Attribute.WIDTH),this._solver.addConstraint(new c.Equation(this._attr[t],c.plus(this._attr[Attribute.LEFT],c.divide(this._attr[Attribute.WIDTH],2))));break;case Attribute.CENTERY:this._getAttr(Attribute.TOP),this._getAttr(Attribute.HEIGHT),this._solver.addConstraint(new c.Equation(this._attr[t],c.plus(this._attr[Attribute.TOP],c.divide(this._attr[Attribute.HEIGHT],2))))}return this._attr[t]}},{key:"_getAttrValue",value:function(t){return this._getAttr(t).value}}]),t}(),defaultPriorityStrength=new c.Strength("defaultPriority",0,1e3,1e3),View=function(){function t(e){_classCallCheck(this,t),this._solver=new c.SimplexSolver,this._subViews={},this._parentSubView=new SubView({solver:this._solver}),this.setSpacing(e&&void 0!==e.spacing?e.spacing:8),e&&((void 0!==e.width||void 0!==e.height)&&this.setSize(e.width,e.height),e.constraints&&this.addConstraints(e.constraints))}return _createClass(t,[{key:"setSize",value:function(t,e){return this._parentSubView.intrinsicWidth=t,this._parentSubView.intrinsicHeight=e,this}},{key:"width",get:function(){return this._parentSubView.intrinsicWidth}},{key:"height",get:function(){return this._parentSubView.intrinsicHeight}},{key:"fittingWidth",get:function(){return this._parentSubView.width}},{key:"fittingHeight",get:function(){return this._parentSubView.height}},{key:"setSpacing",value:function(t){switch(Array.isArray(t)?t.length:-1){case-1:t=[t,t,t,t,t,t,1];break;case 1:t=[t[0],t[0],t[0],t[0],t[0],t[0],1];break;case 2:t=[t[1],t[0],t[1],t[0],t[0],t[1],1];break;case 3:t=[t[1],t[0],t[1],t[0],t[0],t[1],t[2]];break;case 6:t=[t[0],t[1],t[2],t[3],t[4],t[5],1];break;case 7:break;default:throw"Invalid spacing syntax"}if(!_compareSpacing(this._spacing,t)&&(this._spacing=t,this._spacingVars)){for(var e=0;e 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { visualFormatString: peg$parsevisualFormatString },\n peg$startRuleFunction = peg$parsevisualFormatString,\n\n peg$c0 = peg$FAILED,\n peg$c1 = null,\n peg$c2 = \":\",\n peg$c3 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c4 = [],\n peg$c5 = function(o, superto, view, views, tosuper) { return {\n orientation: o ? o[0] : 'horizontal',\n cascade: (superto || []).concat(\n [view],\n [].concat.apply([], views),\n (tosuper || [])\n )\n }\n },\n peg$c6 = \"H\",\n peg$c7 = { type: \"literal\", value: \"H\", description: \"\\\"H\\\"\" },\n peg$c8 = \"V\",\n peg$c9 = { type: \"literal\", value: \"V\", description: \"\\\"V\\\"\" },\n peg$c10 = function(orient) { return orient == 'H' ? 'horizontal' : 'vertical' },\n peg$c11 = \"|\",\n peg$c12 = { type: \"literal\", value: \"|\", description: \"\\\"|\\\"\" },\n peg$c13 = function() { return { view: null } },\n peg$c14 = \"[\",\n peg$c15 = { type: \"literal\", value: \"[\", description: \"\\\"[\\\"\" },\n peg$c16 = \"]\",\n peg$c17 = { type: \"literal\", value: \"]\", description: \"\\\"]\\\"\" },\n peg$c18 = function(view, predicates) { return extend(view, predicates ? { constraints: predicates } : {}) },\n peg$c19 = \"-\",\n peg$c20 = { type: \"literal\", value: \"-\", description: \"\\\"-\\\"\" },\n peg$c21 = function(predicateList) { return predicateList },\n peg$c22 = function() { return [{ relation: 'equ', constant: 'default', $parserOffset: offset() }] },\n peg$c23 = \"\",\n peg$c24 = function() { return [{ relation: 'equ', constant: 0, $parserOffset: offset() }] },\n peg$c25 = function(n) { return [{ relation: 'equ', constant: n, $parserOffset: offset() }] },\n peg$c26 = \"(\",\n peg$c27 = { type: \"literal\", value: \"(\", description: \"\\\"(\\\"\" },\n peg$c28 = \",\",\n peg$c29 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c30 = \")\",\n peg$c31 = { type: \"literal\", value: \")\", description: \"\\\")\\\"\" },\n peg$c32 = function(p, ps) { return [p].concat(ps.map(function(p){ return p[1] })) },\n peg$c33 = \"@\",\n peg$c34 = { type: \"literal\", value: \"@\", description: \"\\\"@\\\"\" },\n peg$c35 = function(r, o, p) { return extend({ relation: 'equ' }, (r || {}), o, (p ? p[1]: {})) },\n peg$c36 = \"==\",\n peg$c37 = { type: \"literal\", value: \"==\", description: \"\\\"==\\\"\" },\n peg$c38 = function() { return { relation: 'equ', $parserOffset: offset() } },\n peg$c39 = \"<=\",\n peg$c40 = { type: \"literal\", value: \"<=\", description: \"\\\"<=\\\"\" },\n peg$c41 = function() { return { relation: 'leq', $parserOffset: offset() } },\n peg$c42 = \">=\",\n peg$c43 = { type: \"literal\", value: \">=\", description: \"\\\">=\\\"\" },\n peg$c44 = function() { return { relation: 'geq', $parserOffset: offset() } },\n peg$c45 = /^[0-9]/,\n peg$c46 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c47 = function(digits) { return { priority: parseInt(digits.join(\"\"), 10) } },\n peg$c48 = function(n) { return { constant: n } },\n peg$c49 = /^[a-zA-Z_]/,\n peg$c50 = { type: \"class\", value: \"[a-zA-Z_]\", description: \"[a-zA-Z_]\" },\n peg$c51 = /^[a-zA-Z0-9_]/,\n peg$c52 = { type: \"class\", value: \"[a-zA-Z0-9_]\", description: \"[a-zA-Z0-9_]\" },\n peg$c53 = function(f, v) { return { view: f + v } },\n peg$c54 = \".\",\n peg$c55 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n peg$c56 = function(digits, decimals) { return parseFloat(digits.concat(\".\").concat(decimals).join(\"\"), 10); },\n peg$c57 = function(digits) { return parseInt(digits.join(\"\"), 10); },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsevisualFormatString() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseorientation();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c2;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$c0;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c0;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parsesuperview();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseconnection();\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c0;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c0;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseview();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsesuperview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n if (s5 === peg$FAILED) {\n s5 = peg$c1;\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c5(s1, s2, s3, s4, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseorientation() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 72) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 86) {\n s1 = peg$c8;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c10(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsesuperview() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 124) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c12); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseview() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseviewName();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsepredicateListWithParens();\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s4 = peg$c16;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c18(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseconnection() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c19;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicateList();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s3 = peg$c19;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c21(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c19;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c22();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$c23;\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24();\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parsepredicateList() {\n var s0;\n\n s0 = peg$parsesimplePredicate();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepredicateListWithParens();\n }\n\n return s0;\n }\n\n function peg$parsesimplePredicate() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsepredicateListWithParens() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c26;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c27); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicate();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c28;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c28;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s4 = peg$c30;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c32(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsepredicate() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parserelation();\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseobjectOfPredicate();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 64) {\n s4 = peg$c33;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c34); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepriority();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c35(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parserelation() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c36) {\n s1 = peg$c36;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c37); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c38();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c39) {\n s1 = peg$c39;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c41();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c42) {\n s1 = peg$c42;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c44();\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseobjectOfPredicate() {\n var s0;\n\n s0 = peg$parseconstant();\n if (s0 === peg$FAILED) {\n s0 = peg$parseviewName();\n }\n\n return s0;\n }\n\n function peg$parsepriority() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c47(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseconstant() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c48(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseviewName() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (peg$c49.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c50); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c49.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c50); }\n }\n }\n } else {\n s2 = peg$c0;\n }\n if (s2 !== peg$FAILED) {\n s2 = input.substring(s1, peg$currPos);\n }\n s1 = s2;\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n if (peg$c51.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c51.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n }\n if (s3 !== peg$FAILED) {\n s3 = input.substring(s2, peg$currPos);\n }\n s2 = s3;\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c53(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c54;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c55); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n }\n } else {\n s3 = peg$c0;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c56(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c57(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n\n function extend(dst) {\n for (var i = 1; i < arguments.length; i++) {\n for (var k in arguments[i]) {\n dst[k] = arguments[i][k];\n }\n }\n return dst;\n }\n\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n})();\n\nvar parserExt = (function() {\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { visualFormatString: peg$parsevisualFormatString },\n peg$startRuleFunction = peg$parsevisualFormatString,\n\n peg$c0 = peg$FAILED,\n peg$c1 = null,\n peg$c2 = \":\",\n peg$c3 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c4 = [],\n peg$c5 = function(o, superto, view, views, tosuper, comments) { return {\n orientation: o ? o[0] : 'horizontal',\n cascade: (superto || []).concat(\n [view],\n [].concat.apply([], views),\n (tosuper || [])\n )\n }\n },\n peg$c6 = \"HV\",\n peg$c7 = { type: \"literal\", value: \"HV\", description: \"\\\"HV\\\"\" },\n peg$c8 = function() { return 'horzvert' },\n peg$c9 = \"H\",\n peg$c10 = { type: \"literal\", value: \"H\", description: \"\\\"H\\\"\" },\n peg$c11 = function() { return 'horizontal' },\n peg$c12 = \"V\",\n peg$c13 = { type: \"literal\", value: \"V\", description: \"\\\"V\\\"\" },\n peg$c14 = function() { return 'vertical' },\n peg$c15 = \"Z\",\n peg$c16 = { type: \"literal\", value: \"Z\", description: \"\\\"Z\\\"\" },\n peg$c17 = function() { return 'zIndex' },\n peg$c18 = \" \",\n peg$c19 = { type: \"literal\", value: \" \", description: \"\\\" \\\"\" },\n peg$c20 = \"//\",\n peg$c21 = { type: \"literal\", value: \"//\", description: \"\\\"//\\\"\" },\n peg$c22 = { type: \"any\", description: \"any character\" },\n peg$c23 = \"|\",\n peg$c24 = { type: \"literal\", value: \"|\", description: \"\\\"|\\\"\" },\n peg$c25 = function() { return { view: null } },\n peg$c26 = \"[\",\n peg$c27 = { type: \"literal\", value: \"[\", description: \"\\\"[\\\"\" },\n peg$c28 = \"]\",\n peg$c29 = { type: \"literal\", value: \"]\", description: \"\\\"]\\\"\" },\n peg$c30 = function(view, predicates, cascadedViews) { return extend(extend(view, predicates ? { constraints: predicates } : {}), cascadedViews ? {\n cascade: cascadedViews\n } : {}) },\n peg$c31 = function(views, connection) { return [].concat([].concat.apply([], views),[connection]); },\n peg$c32 = \"->\",\n peg$c33 = { type: \"literal\", value: \"->\", description: \"\\\"->\\\"\" },\n peg$c34 = function() { return [{ relation: 'none', $parserOffset: offset() }] },\n peg$c35 = \"-\",\n peg$c36 = { type: \"literal\", value: \"-\", description: \"\\\"-\\\"\" },\n peg$c37 = function(predicateList) { return predicateList },\n peg$c38 = function() { return [{ relation: 'equ', constant: 'default', $parserOffset: offset() }] },\n peg$c39 = \"~\",\n peg$c40 = { type: \"literal\", value: \"~\", description: \"\\\"~\\\"\" },\n peg$c41 = function() { return [{ relation: 'equ', equalSpacing: true, $parserOffset: offset() }] },\n peg$c42 = \"\",\n peg$c43 = function() { return [{ relation: 'equ', constant: 0, $parserOffset: offset() }] },\n peg$c44 = function(p) { return [{ relation: 'equ', multiplier: p.multiplier, $parserOffset: offset() }] },\n peg$c45 = function(n) { return [{ relation: 'equ', constant: n, $parserOffset: offset() }] },\n peg$c46 = \"(\",\n peg$c47 = { type: \"literal\", value: \"(\", description: \"\\\"(\\\"\" },\n peg$c48 = \",\",\n peg$c49 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c50 = \")\",\n peg$c51 = { type: \"literal\", value: \")\", description: \"\\\")\\\"\" },\n peg$c52 = function(p, ps) { return [p].concat(ps.map(function(p){ return p[1] })) },\n peg$c53 = \"@\",\n peg$c54 = { type: \"literal\", value: \"@\", description: \"\\\"@\\\"\" },\n peg$c55 = function(r, o, p) { return extend({ relation: 'equ' }, (r || {}), o, (p ? p[1]: {})) },\n peg$c56 = function(r, o, p) { return extend({ relation: 'equ', equalSpacing: true }, (r || {}), o, (p ? p[1]: {})) },\n peg$c57 = \"==\",\n peg$c58 = { type: \"literal\", value: \"==\", description: \"\\\"==\\\"\" },\n peg$c59 = function() { return { relation: 'equ', $parserOffset: offset() } },\n peg$c60 = \"<=\",\n peg$c61 = { type: \"literal\", value: \"<=\", description: \"\\\"<=\\\"\" },\n peg$c62 = function() { return { relation: 'leq', $parserOffset: offset() } },\n peg$c63 = \">=\",\n peg$c64 = { type: \"literal\", value: \">=\", description: \"\\\">=\\\"\" },\n peg$c65 = function() { return { relation: 'geq', $parserOffset: offset() } },\n peg$c66 = /^[0-9]/,\n peg$c67 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c68 = function(digits) { return { priority: parseInt(digits.join(\"\"), 10) } },\n peg$c69 = function(n) { return { constant: n } },\n peg$c70 = \"%\",\n peg$c71 = { type: \"literal\", value: \"%\", description: \"\\\"%\\\"\" },\n peg$c72 = function(n) { return { view: null, multiplier: n / 100 } },\n peg$c73 = function(vn, a, m, c) { return { view: vn.view, attribute: a ? a : undefined, multiplier: m ? m : 1, constant: c ? c : undefined } },\n peg$c74 = \".left\",\n peg$c75 = { type: \"literal\", value: \".left\", description: \"\\\".left\\\"\" },\n peg$c76 = function() { return 'left'},\n peg$c77 = \".right\",\n peg$c78 = { type: \"literal\", value: \".right\", description: \"\\\".right\\\"\" },\n peg$c79 = function() { return 'right'},\n peg$c80 = \".top\",\n peg$c81 = { type: \"literal\", value: \".top\", description: \"\\\".top\\\"\" },\n peg$c82 = function() { return 'top'},\n peg$c83 = \".bottom\",\n peg$c84 = { type: \"literal\", value: \".bottom\", description: \"\\\".bottom\\\"\" },\n peg$c85 = function() { return 'bottom'},\n peg$c86 = \".width\",\n peg$c87 = { type: \"literal\", value: \".width\", description: \"\\\".width\\\"\" },\n peg$c88 = function() { return 'width'},\n peg$c89 = \".height\",\n peg$c90 = { type: \"literal\", value: \".height\", description: \"\\\".height\\\"\" },\n peg$c91 = function() { return 'height'},\n peg$c92 = \".centerX\",\n peg$c93 = { type: \"literal\", value: \".centerX\", description: \"\\\".centerX\\\"\" },\n peg$c94 = function() { return 'centerX'},\n peg$c95 = \".centerY\",\n peg$c96 = { type: \"literal\", value: \".centerY\", description: \"\\\".centerY\\\"\" },\n peg$c97 = function() { return 'centerY'},\n peg$c98 = \"/\",\n peg$c99 = { type: \"literal\", value: \"/\", description: \"\\\"/\\\"\" },\n peg$c100 = function(n) { return 1 / n; },\n peg$c101 = \"*\",\n peg$c102 = { type: \"literal\", value: \"*\", description: \"\\\"*\\\"\" },\n peg$c103 = function(n) { return n; },\n peg$c104 = function(n) { return -n; },\n peg$c105 = \"+\",\n peg$c106 = { type: \"literal\", value: \"+\", description: \"\\\"+\\\"\" },\n peg$c107 = /^[a-zA-Z_]/,\n peg$c108 = { type: \"class\", value: \"[a-zA-Z_]\", description: \"[a-zA-Z_]\" },\n peg$c109 = /^[a-zA-Z0-9_]/,\n peg$c110 = { type: \"class\", value: \"[a-zA-Z0-9_]\", description: \"[a-zA-Z0-9_]\" },\n peg$c111 = function(f, v) { return { view: f + v } },\n peg$c112 = \".\",\n peg$c113 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n peg$c114 = function(digits, decimals) { return parseFloat(digits.concat(\".\").concat(decimals).join(\"\"), 10); },\n peg$c115 = function(digits) { return parseInt(digits.join(\"\"), 10); },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsevisualFormatString() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseorientation();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c2;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$c0;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c0;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parsesuperview();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseconnection();\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c0;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c0;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseview();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsesuperview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n if (s5 === peg$FAILED) {\n s5 = peg$c1;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecomments();\n if (s6 === peg$FAILED) {\n s6 = peg$c1;\n }\n if (s6 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c5(s1, s2, s3, s4, s5, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseorientation() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s1 = peg$c6;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c8();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 72) {\n s1 = peg$c9;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c11();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 86) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c13); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c14();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 90) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c16); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c17();\n }\n s0 = s1;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsecomments() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 32) {\n s2 = peg$c18;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 32) {\n s2 = peg$c18;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c20) {\n s2 = peg$c20;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c22); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c22); }\n }\n }\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsesuperview() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 124) {\n s1 = peg$c23;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c24); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseview() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c26;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c27); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseviewName();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsepredicateListWithParens();\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsecascadedViews();\n if (s4 === peg$FAILED) {\n s4 = peg$c1;\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c28;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c30(s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsecascadedViews() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 58) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parseconnection();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseview();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parseconnection();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseview();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n }\n } else {\n s2 = peg$c0;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseconnection();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c31(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseconnection() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c32) {\n s1 = peg$c32;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c34();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicateList();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s3 = peg$c35;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c37(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c38();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 126) {\n s1 = peg$c39;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseequalSpacingPredicateList();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 126) {\n s3 = peg$c39;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c37(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 126) {\n s1 = peg$c39;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c41();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$c42;\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c43();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsepredicateList() {\n var s0;\n\n s0 = peg$parsesimplePredicate();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepredicateListWithParens();\n }\n\n return s0;\n }\n\n function peg$parsesimplePredicate() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsepercentage();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c44(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c45(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsepredicateListWithParens() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c46;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c47); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicate();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c48;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c48;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s4 = peg$c50;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c51); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c52(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsepredicate() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parserelation();\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseobjectOfPredicate();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 64) {\n s4 = peg$c53;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c54); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepriority();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c55(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseequalSpacingPredicateList() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c46;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c47); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseequalSpacingPredicate();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c48;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseequalSpacingPredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c48;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseequalSpacingPredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s4 = peg$c50;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c51); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c52(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseequalSpacingPredicate() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parserelation();\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseobjectOfPredicate();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 64) {\n s4 = peg$c53;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c54); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepriority();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c56(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parserelation() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c57) {\n s1 = peg$c57;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c59();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c60) {\n s1 = peg$c60;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c62();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c63) {\n s1 = peg$c63;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c64); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c65();\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseobjectOfPredicate() {\n var s0;\n\n s0 = peg$parsepercentage();\n if (s0 === peg$FAILED) {\n s0 = peg$parseconstant();\n if (s0 === peg$FAILED) {\n s0 = peg$parseviewPredicate();\n }\n }\n\n return s0;\n }\n\n function peg$parsepriority() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c68(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseconstant() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c69(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsepercentage() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s2 = peg$c70;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c71); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c72(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseviewPredicate() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parseviewName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseattribute();\n if (s2 === peg$FAILED) {\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemultiplier();\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseconstantExpr();\n if (s4 === peg$FAILED) {\n s4 = peg$c1;\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c73(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseattribute() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c74) {\n s1 = peg$c74;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c75); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c76();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c77) {\n s1 = peg$c77;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c78); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c79();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c80) {\n s1 = peg$c80;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c81); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c82();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c83) {\n s1 = peg$c83;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c84); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c85();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c86) {\n s1 = peg$c86;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c87); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c88();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c89) {\n s1 = peg$c89;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c91();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 8) === peg$c92) {\n s1 = peg$c92;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c93); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c94();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 8) === peg$c95) {\n s1 = peg$c95;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c96); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c97();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsemultiplier() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c98;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c99); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c100(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 42) {\n s1 = peg$c101;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c102); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c103(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n }\n\n return s0;\n }\n\n function peg$parseconstantExpr() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c104(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c105;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c106); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c103(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n }\n\n return s0;\n }\n\n function peg$parseviewName() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (peg$c107.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c108); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c107.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c108); }\n }\n }\n } else {\n s2 = peg$c0;\n }\n if (s2 !== peg$FAILED) {\n s2 = input.substring(s1, peg$currPos);\n }\n s1 = s2;\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n if (peg$c109.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c110); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c109.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c110); }\n }\n }\n if (s3 !== peg$FAILED) {\n s3 = input.substring(s2, peg$currPos);\n }\n s2 = s3;\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c111(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c112;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c113); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s3 = peg$c0;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c114(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c115(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n\n function extend(dst) {\n for (var i = 1; i < arguments.length; i++) {\n for (var k in arguments[i]) {\n dst[k] = arguments[i][k];\n }\n }\n return dst;\n }\n\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n})();\n\nconst Orientation = {\n HORIZONTAL: 1,\n VERTICAL: 2,\n ZINDEX: 4\n};\n\n/**\n * Helper function that inserts equal spacers (~).\n * @private\n */\nfunction _processEqualSpacer(context, stackView) {\n\n // Determine unique name for the spacer\n context.equalSpacerIndex = context.equalSpacerIndex || 1;\n const name = '_~' + context.lineIndex + ':' + context.equalSpacerIndex + '~';\n if (context.equalSpacerIndex > 1) {\n\n // Ensure that all spacers have the same width/height\n context.constraints.push({\n view1: '_~' + context.lineIndex + ':1~',\n attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n relation: context.relation.relation || Relation.EQU,\n view2: name,\n attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n priority: context.relation.priority\n });\n }\n context.equalSpacerIndex++;\n\n // Enforce view/proportional width/height\n if (context.relation.view || (context.relation.multiplier && (context.relation.multiplier !== 1))) {\n context.constraints.push({\n view1: name,\n attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n relation: context.relation.relation || Relation.EQU,\n view2: context.relation.view,\n attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n priority: context.relation.priority,\n multiplier: context.relation.multiplier\n });\n context.relation.multiplier = undefined;\n }\n else if (context.relation.constant) {\n context.constraints.push({\n view1: name,\n attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n relation: Relation.EQU,\n view2: null,\n attr2: Attribute.CONST,\n priority: context.relation.priority,\n constant: context.relation.constant\n });\n context.relation.constant = undefined;\n }\n\n // Add constraint\n switch (context.orientation) {\n case Orientation.HORIZONTAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.RIGHT : Attribute.LEFT;\n context.attr2 = Attribute.LEFT;\n break;\n case Orientation.VERTICAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.BOTTOM : Attribute.TOP;\n context.attr2 = Attribute.TOP;\n break;\n case Orientation.ZINDEX:\n context.attr1 = Attribute.ZINDEX;\n context.attr2 = Attribute.ZINDEX;\n context.relation.constant = (context.view1 !== stackView) ? 'default' : 0;\n break;\n }\n context.constraints.push({\n view1: context.view1,\n attr1: context.attr1,\n relation: context.relation.relation,\n view2: name,\n attr2: context.attr2,\n priority: context.relation.priority\n });\n context.view1 = name;\n}\n\n/**\n * Helper function that inserts proportional spacers (-12%-).\n * @private\n */\nfunction _processProportionalSpacer(context, stackView) {\n context.proportionalSpacerIndex = context.proportionalSpacerIndex || 1;\n const name = '_-' + context.lineIndex + ':' + context.proportionalSpacerIndex + '-';\n context.proportionalSpacerIndex++;\n context.constraints.push({\n view1: name,\n attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n relation: context.relation.relation || Relation.EQU,\n view2: context.relation.view, // or relative to the stackView... food for thought\n attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n priority: context.relation.priority,\n multiplier: context.relation.multiplier\n });\n context.relation.multiplier = undefined;\n\n // Add constraint\n switch (context.orientation) {\n case Orientation.HORIZONTAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.RIGHT : Attribute.LEFT;\n context.attr2 = Attribute.LEFT;\n break;\n case Orientation.VERTICAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.BOTTOM : Attribute.TOP;\n context.attr2 = Attribute.TOP;\n break;\n case Orientation.ZINDEX:\n context.attr1 = Attribute.ZINDEX;\n context.attr2 = Attribute.ZINDEX;\n context.relation.constant = (context.view1 !== stackView) ? 'default' : 0;\n break;\n }\n context.constraints.push({\n view1: context.view1,\n attr1: context.attr1,\n relation: context.relation.relation,\n view2: name,\n attr2: context.attr2,\n priority: context.relation.priority\n });\n context.view1 = name;\n}\n\n/**\n * In case of a stack-view, set constraints for opposite orientations\n * @private\n */\nfunction _processStackView(context, name, subView) {\n let viewName;\n for (var orientation = 1; orientation <= 4; orientation *= 2) {\n if ((subView.orientations & orientation) &&\n (subView.stack.orientation !== orientation) &&\n !(subView.stack.processedOrientations & orientation)) {\n subView.stack.processedOrientations = subView.stack.processedOrientations | orientation;\n viewName = viewName || {\n name: name,\n type: 'stack'\n };\n for (var i = 0, j = subView.stack.subViews.length; i < j; i++) {\n if (orientation === Orientation.ZINDEX) {\n context.constraints.push({\n view1: viewName,\n attr1: Attribute.ZINDEX,\n relation: Relation.EQU,\n view2: subView.stack.subViews[i],\n attr2: Attribute.ZINDEX\n });\n }\n else {\n context.constraints.push({\n view1: viewName,\n attr1: (orientation === Orientation.VERTICAL) ? Attribute.HEIGHT : Attribute.WIDTH,\n relation: Relation.EQU,\n view2: subView.stack.subViews[i],\n attr2: (orientation === Orientation.VERTICAL) ? Attribute.HEIGHT : Attribute.WIDTH\n });\n context.constraints.push({\n view1: viewName,\n attr1: (orientation === Orientation.VERTICAL) ? Attribute.TOP : Attribute.LEFT,\n relation: Relation.EQU,\n view2: subView.stack.subViews[i],\n attr2: (orientation === Orientation.VERTICAL) ? Attribute.TOP : Attribute.LEFT\n });\n }\n }\n }\n }\n}\n\n/**\n * Recursive helper function that processes the cascaded data.\n * @private\n */\nfunction _processCascade(context, cascade, stackView) {\n const subViews = [];\n let subView;\n if (stackView) {\n cascade.push({view: stackView});\n }\n for (var i = 0; i < cascade.length; i++) {\n context.item = cascade[i];\n if (!Array.isArray(context.item) && context.item.hasOwnProperty('view')) {\n context.view1 = context.view2;\n context.view2 = context.item.view;\n if ((context.view1 !== undefined) && (context.view2 !== undefined) && context.relation) {\n if (context.item.view !== stackView) {\n subViews.push(context.item.view);\n subView = context.subViews[context.item.view];\n if (!subView) {\n subView = {orientations: 0};\n context.subViews[context.item.view] = subView;\n }\n subView.orientations = subView.orientations | context.orientation;\n if (subView.stack) {\n _processStackView(context, context.item.view, subView);\n }\n }\n if (context.relation.equalSpacing) {\n _processEqualSpacer(context, stackView);\n }\n if (context.relation.multiplier) {\n _processProportionalSpacer(context, stackView);\n }\n if (context.relation.relation !== 'none') {\n switch (context.orientation) {\n case Orientation.HORIZONTAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.RIGHT : Attribute.LEFT;\n context.attr2 = (context.view2 !== stackView) ? Attribute.LEFT : Attribute.RIGHT;\n break;\n case Orientation.VERTICAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.BOTTOM : Attribute.TOP;\n context.attr2 = (context.view2 !== stackView) ? Attribute.TOP : Attribute.BOTTOM;\n break;\n case Orientation.ZINDEX:\n context.attr1 = Attribute.ZINDEX;\n context.attr2 = Attribute.ZINDEX;\n context.relation.constant = (context.view1 !== stackView) ? 'default' : 0;\n break;\n }\n context.constraints.push({\n view1: context.view1,\n attr1: context.attr1,\n relation: context.relation.relation,\n view2: context.view2,\n attr2: context.attr2,\n multiplier: context.relation.multiplier,\n constant: ((context.relation.constant === 'default') || !context.relation.constant) ? context.relation.constant : -context.relation.constant,\n priority: context.relation.priority\n //,variable: context.relation.variable\n });\n }\n }\n context.relation = undefined;\n\n // process view size constraints\n if (context.item.constraints) {\n for (var n = 0; n < context.item.constraints.length; n++) {\n context.attr1 = context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT;\n context.attr2 = (context.item.constraints[n].view || context.item.constraints[n].multiplier) ?\n (context.item.constraints[n].attribute || context.attr1) :\n (context.item.constraints[n].variable ? Attribute.VARIABLE : Attribute.CONST);\n context.constraints.push({\n view1: context.item.view,\n attr1: context.attr1,\n relation: context.item.constraints[n].relation,\n view2: context.item.constraints[n].view,\n attr2: context.attr2,\n multiplier: context.item.constraints[n].multiplier,\n constant: context.item.constraints[n].constant,\n priority: context.item.constraints[n].priority\n //,variable: context.item.constraints[n].variable\n });\n }\n }\n\n // Process cascaded data (child stack-views)\n if (context.item.cascade) {\n _processCascade(context, context.item.cascade, context.item.view);\n }\n }\n else {\n context.relation = context.item[0];\n }\n }\n\n if (stackView) {\n subView = context.subViews[stackView];\n if (!subView) {\n subView = {orientations: context.orientation};\n context.subViews[stackView] = subView;\n }\n else if (subView.stack) {\n throw new Error('A stack with name \"' + stackView + '\"\" already exists');\n }\n subView.stack = {\n orientation: context.orientation,\n processedOrientations: context.orientation,\n subViews: subViews\n };\n _processStackView(context, stackView, subView);\n }\n}\n\nconst metaInfoCategories = [\n 'viewport',\n 'spacing',\n 'colors',\n 'shapes',\n 'widths',\n 'heights'\n];\n\n/**\n * VisualFormat\n *\n * @namespace VisualFormat\n */\nclass VisualFormat {\n\n /**\n * Parses a single line of vfl into an array of constraint definitions.\n *\n * When the visual-format could not be succesfully parsed an exception is thrown containing\n * additional info about the parse error and column position.\n *\n * @param {String} visualFormat Visual format string (cannot contain line-endings!).\n * @param {Object} [options] Configuration options.\n * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false).\n * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`).\n * @param {Number} [options.lineIndex] Line-index used when auto generating equal-spacing constraints.\n * @return {Array} Array of constraint definitions.\n */\n static parseLine(visualFormat, options) {\n if ((visualFormat.length === 0) ||\n (options && options.extended && (visualFormat.indexOf('//') === 0))) {\n return [];\n }\n const res = (options && options.extended) ? parserExt.parse(visualFormat) : parser.parse(visualFormat);\n if (options && options.outFormat === 'raw') {\n return [res];\n }\n var context = {\n constraints: [],\n lineIndex: (options ? options.lineIndex : undefined) || 1,\n subViews: (options ? options.subViews : undefined) || {}\n };\n switch (res.orientation) {\n case 'horizontal':\n context.orientation = Orientation.HORIZONTAL;\n context.horizontal = true;\n _processCascade(context, res.cascade, null);\n break;\n case 'vertical':\n context.orientation = Orientation.VERTICAL;\n _processCascade(context, res.cascade, null);\n break;\n case 'horzvert':\n context.orientation = Orientation.HORIZONTAL;\n context.horizontal = true;\n _processCascade(context, res.cascade, null);\n context = {\n constraints: context.constraints,\n lineIndex: context.lineIndex,\n subViews: context.subViews,\n orientation: Orientation.VERTICAL\n };\n _processCascade(context, res.cascade, null);\n break;\n case 'zIndex':\n context.orientation = Orientation.ZINDEX;\n _processCascade(context, res.cascade, null);\n break;\n }\n return context.constraints;\n }\n\n /**\n * Parses one or more visual format strings into an array of constraint definitions.\n *\n * When the visual-format could not be succesfully parsed an exception is thrown containing\n * additional info about the parse error and column position.\n *\n * @param {String|Array} visualFormat One or more visual format strings.\n * @param {Object} [options] Configuration options.\n * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false).\n * @param {Boolean} [options.strict] When set to false trims any leading/trailing spaces and ignores empty lines (default: true).\n * @param {String} [options.lineSeperator] String that defines the end of a line (default `\\n`).\n * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`).\n * @return {Array} Array of constraint definitions.\n */\n static parse(visualFormat, options) {\n const lineSeperator = (options && options.lineSeperator) ? options.lineSeperator : '\\n';\n if (!Array.isArray(visualFormat) && (visualFormat.indexOf(lineSeperator) < 0)) {\n try {\n return this.parseLine(visualFormat, options);\n }\n catch (err) {\n err.source = visualFormat;\n throw err;\n }\n }\n\n // Decompose visual-format into an array of strings, and within those strings\n // search for line-endings, and treat each line as a seperate visual-format.\n visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat];\n let lines;\n let constraints = [];\n let lineIndex = 0;\n let line;\n const parseOptions = {\n lineIndex: lineIndex,\n extended: (options && options.extended),\n strict: (options && (options.strict !== undefined)) ? options.strict : true,\n outFormat: options ? options.outFormat : undefined,\n subViews: {}\n };\n try {\n for (var i = 0; i < visualFormat.length; i++) {\n lines = visualFormat[i].split(lineSeperator);\n for (var j = 0; j < lines.length; j++) {\n line = lines[j];\n lineIndex++;\n parseOptions.lineIndex = lineIndex;\n if (!parseOptions.strict) {\n line = line.trim();\n }\n if (parseOptions.strict || line.length) {\n constraints = constraints.concat(this.parseLine(line, parseOptions));\n }\n }\n }\n }\n catch (err) {\n err.source = line;\n err.line = lineIndex;\n throw err;\n }\n return constraints;\n }\n\n /**\n * Parses meta information from the comments in the VFL.\n *\n * Additional meta information can be specified in the comments\n * for previewing and rendering purposes. For instance, the view-port\n * aspect-ratio, sub-view widths and colors, can be specified. The\n * following example renders three colored circles in the visual-format editor:\n *\n * ```vfl\n * //viewport aspect-ratio:3/1 max-height:300\n * //colors red:#FF0000 green:#00FF00 blue:#0000FF\n * //shapes red:circle green:circle blue:circle\n * H:|-[row:[red(green,blue)]-[green]-[blue]]-|\n * V:|[row]|\n * ```\n *\n * Supported categories and properties:\n *\n * |Category|Property|Example|\n * |--------|--------|-------|\n * |`viewport`|`aspect-ratio:{width}/{height}`|`//viewport aspect-ratio:16/9`|\n * ||`width:[{number}/intrinsic]`|`//viewport width:10`|\n * ||`height:[{number}/intrinsic]`|`//viewport height:intrinsic`|\n * ||`min-width:{number}`|\n * ||`max-width:{number}`|\n * ||`min-height:{number}`|\n * ||`max-height:{number}`|\n * |`spacing`|`[{number}/array]`|`//spacing:8` or `//spacing:[10, 20, 5]`|\n * |`widths`|`{view-name}:[{number}/intrinsic]`|`//widths subview1:100`|\n * |`heights`|`{view-name}:[{number}/intrinsic]`|`//heights subview1:intrinsic`|\n * |`colors`|`{view-name}:{color}`|`//colors redview:#FF0000 blueview:#00FF00`|\n * |`shapes`|`{view-name}:[circle/square]`|`//shapes avatar:circle`|\n *\n * @param {String|Array} visualFormat One or more visual format strings.\n * @param {Object} [options] Configuration options.\n * @param {String} [options.lineSeperator] String that defines the end of a line (default `\\n`).\n * @param {String} [options.prefix] When specified, also processes the categories using that prefix (e.g. \"-dev-viewport max-height:10\").\n * @return {Object} meta-info\n */\n static parseMetaInfo(visualFormat, options) {\n const lineSeperator = (options && options.lineSeperator) ? options.lineSeperator : '\\n';\n const prefix = options ? options.prefix : undefined;\n visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat];\n const metaInfo = {};\n var key;\n for (var k = 0; k < visualFormat.length; k++) {\n const lines = visualFormat[k].split(lineSeperator);\n for (var i = 0; i < lines.length; i++) {\n const line = lines[i];\n for (var c = 0; c < metaInfoCategories.length; c++) {\n for (var s = 0; s < (prefix ? 2 : 1); s++) {\n const category = metaInfoCategories[c];\n const prefixedCategory = ((s === 0) ? '' : prefix) + category;\n if (line.indexOf('//' + prefixedCategory + ' ') === 0) {\n const items = line.substring(3 + prefixedCategory.length).split(' ');\n for (var j = 0; j < items.length; j++) {\n const item = items[j].split(':');\n metaInfo[category] = metaInfo[category] || {};\n metaInfo[category][item[0]] = (item.length > 1) ? item[1] : '';\n }\n }\n else if (line.indexOf('//' + prefixedCategory + ':') === 0) {\n metaInfo[category] = line.substring(3 + prefixedCategory.length);\n }\n }\n }\n }\n }\n if (metaInfo.viewport) {\n const viewport = metaInfo.viewport;\n var aspectRatio = viewport['aspect-ratio'];\n if (aspectRatio) {\n aspectRatio = aspectRatio.split('/');\n viewport['aspect-ratio'] = parseInt(aspectRatio[0]) / parseInt(aspectRatio[1]);\n }\n if (viewport.height !== undefined) {\n viewport.height = (viewport.height === 'intrinsic') ? true : parseInt(viewport.height);\n }\n if (viewport.width !== undefined) {\n viewport.width = (viewport.width === 'intrinsic') ? true : parseInt(viewport.width);\n }\n if (viewport['max-height'] !== undefined) {\n viewport['max-height'] = parseInt(viewport['max-height']);\n }\n if (viewport['max-width'] !== undefined) {\n viewport['max-width'] = parseInt(viewport['max-width']);\n }\n if (viewport['min-height'] !== undefined) {\n viewport['min-height'] = parseInt(viewport['min-height']);\n }\n if (viewport['min-width'] !== undefined) {\n viewport['min-width'] = parseInt(viewport['min-width']);\n }\n }\n if (metaInfo.widths) {\n for (key in metaInfo.widths) {\n const width = (metaInfo.widths[key] === 'intrinsic') ? true : parseInt(metaInfo.widths[key]);\n metaInfo.widths[key] = width;\n if ((width === undefined) || isNaN(width)) {\n delete metaInfo.widths[key];\n }\n }\n }\n if (metaInfo.heights) {\n for (key in metaInfo.heights) {\n const height = (metaInfo.heights[key] === 'intrinsic') ? true : parseInt(metaInfo.heights[key]);\n metaInfo.heights[key] = height;\n if ((height === undefined) || isNaN(height)) {\n delete metaInfo.heights[key];\n }\n }\n }\n if (metaInfo.spacing) {\n const value = JSON.parse(metaInfo.spacing);\n metaInfo.spacing = value;\n if ((value === undefined) || isNaN(value)) {\n delete metaInfo.spacing;\n }\n }\n return metaInfo;\n }\n}\n\nclass SubView {\n constructor(options) {\n this._name = options.name;\n this._type = options.type;\n this._solver = options.solver;\n this._attr = {};\n if (!options.name) {\n if (true) {\n this._attr[Attribute.LEFT] = new c.Variable();\n this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.LEFT], c.Strength.required));\n this._attr[Attribute.TOP] = new c.Variable();\n this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.TOP], c.Strength.required));\n this._attr[Attribute.ZINDEX] = new c.Variable();\n this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.ZINDEX], c.Strength.required));\n }\n else {\n this._attr[Attribute.LEFT] = new kiwi.Variable();\n this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.LEFT], kiwi.Operator.Eq, 0));\n this._attr[Attribute.TOP] = new kiwi.Variable();\n this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.TOP], kiwi.Operator.Eq, 0));\n this._attr[Attribute.ZINDEX] = new kiwi.Variable();\n this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.ZINDEX], kiwi.Operator.Eq, 0));\n }\n }\n }\n toJSON() {\n return {\n name: this.name,\n left: this.left,\n top: this.top,\n width: this.width,\n height: this.height\n };\n }\n toString() {\n JSON.stringify(this.toJSON(), undefined, 2);\n }\n\n /**\n * Name of the sub-view.\n * @readonly\n * @type {String}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Left value (`Attribute.LEFT`).\n * @readonly\n * @type {Number}\n */\n get left() {\n return this._getAttrValue(Attribute.LEFT);\n }\n\n /**\n * Right value (`Attribute.RIGHT`).\n * @readonly\n * @type {Number}\n */\n get right() {\n return this._getAttrValue(Attribute.RIGHT);\n }\n\n /**\n * Width value (`Attribute.WIDTH`).\n * @type {Number}\n */\n get width() {\n return this._getAttrValue(Attribute.WIDTH);\n }\n\n /**\n * Height value (`Attribute.HEIGHT`).\n * @readonly\n * @type {Number}\n */\n get height() {\n return this._getAttrValue(Attribute.HEIGHT);\n }\n\n /**\n * Intrinsic width of the sub-view.\n *\n * Use this property to explicitely set the width of the sub-view, e.g.:\n * ```javascript\n * var view = new AutoLayout.View(AutoLayout.VisualFormat.parse('|[child1][child2]|'), {\n * width: 500\n * });\n * view.subViews.child1.intrinsicWidth = 100;\n * console.log('child2 width: ' + view.subViews.child2.width); // 400\n * ```\n *\n * @type {Number}\n */\n get intrinsicWidth() {\n return this._intrinsicWidth;\n }\n set intrinsicWidth(value) {\n if ((value !== undefined) && (value !== this._intrinsicWidth)) {\n const attr = this._getAttr(Attribute.WIDTH);\n if (this._intrinsicWidth === undefined) {\n if (true) {\n this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000));\n }\n else {\n this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000));\n }\n }\n this._intrinsicWidth = value;\n this._solver.suggestValue(attr, value);\n if (true) {\n this._solver.resolve();\n }\n else {\n this._solver.updateVariables();\n }\n }\n }\n\n /**\n * Intrinsic height of the sub-view.\n *\n * See `intrinsicWidth`.\n *\n * @type {Number}\n */\n get intrinsicHeight() {\n return this._intrinsicHeight;\n }\n set intrinsicHeight(value) {\n if ((value !== undefined) && (value !== this._intrinsicHeight)) {\n const attr = this._getAttr(Attribute.HEIGHT);\n if (this._intrinsicHeight === undefined) {\n if (true) {\n this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000));\n }\n else {\n this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000));\n }\n }\n this._intrinsicHeight = value;\n this._solver.suggestValue(attr, value);\n if (true) {\n this._solver.resolve();\n }\n else {\n this._solver.updateVariables();\n }\n }\n }\n\n /**\n * Top value (`Attribute.TOP`).\n * @readonly\n * @type {Number}\n */\n get top() {\n return this._getAttrValue(Attribute.TOP);\n }\n\n /**\n * Bottom value (`Attribute.BOTTOM`).\n * @readonly\n * @type {Number}\n */\n get bottom() {\n return this._getAttrValue(Attribute.BOTTOM);\n }\n\n /**\n * Horizontal center (`Attribute.CENTERX`).\n * @readonly\n * @type {Number}\n */\n get centerX() {\n return this._getAttrValue(Attribute.CENTERX);\n }\n\n /**\n * Vertical center (`Attribute.CENTERY`).\n * @readonly\n * @type {Number}\n */\n get centerY() {\n return this._getAttrValue(Attribute.CENTERY);\n }\n\n /**\n * Z-index (`Attribute.ZINDEX`).\n * @readonly\n * @type {Number}\n */\n get zIndex() {\n return this._getAttrValue(Attribute.ZINDEX);\n }\n\n /**\n * Returns the type of the sub-view.\n * @readonly\n * @type {String}\n */\n get type() {\n return this._type;\n }\n\n /**\n * Gets the value of one of the attributes.\n *\n * @param {String|Attribute} attr Attribute name (e.g. 'right', 'centerY', Attribute.TOP).\n * @return {Number} value or `undefined`\n */\n getValue(attr) {\n return this._attr[attr] ? this._attr[attr].value() : undefined;\n }\n\n /**\n * @private\n */\n _getAttr(attr) {\n if (this._attr[attr]) {\n return this._attr[attr];\n }\n this._attr[attr] = true ? new c.Variable() : new kiwi.Variable();\n switch (attr) {\n case Attribute.RIGHT:\n this._getAttr(Attribute.LEFT);\n this._getAttr(Attribute.WIDTH);\n if (true) {\n this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], this._attr[Attribute.WIDTH])));\n }\n else {\n this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH])));\n }\n break;\n case Attribute.BOTTOM:\n this._getAttr(Attribute.TOP);\n this._getAttr(Attribute.HEIGHT);\n if (true) {\n this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], this._attr[Attribute.HEIGHT])));\n }\n else {\n this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT])));\n }\n break;\n case Attribute.CENTERX:\n this._getAttr(Attribute.LEFT);\n this._getAttr(Attribute.WIDTH);\n if (true) {\n this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], c.divide(this._attr[Attribute.WIDTH], 2))));\n }\n else {\n this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH].divide(2))));\n }\n break;\n case Attribute.CENTERY:\n this._getAttr(Attribute.TOP);\n this._getAttr(Attribute.HEIGHT);\n if (true) {\n this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], c.divide(this._attr[Attribute.HEIGHT], 2))));\n }\n else {\n this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT].divide(2))));\n }\n break;\n }\n if (!true) {\n this._solver.updateVariables();\n }\n return this._attr[attr];\n }\n\n /**\n * @private\n */\n _getAttrValue(attr) {\n if (true) {\n return this._getAttr(attr).value;\n }\n else {\n return this._getAttr(attr).value();\n }\n }\n}\n\nconst defaultPriorityStrength = true ? new c.Strength('defaultPriority', 0, 1000, 1000) : kiwi.Strength.create(0, 1000, 1000);\n\nfunction _getConst(name, value) {\n if (true) {\n const vr = new c.Variable({value: value});\n this._solver.addConstraint(new c.StayConstraint(vr, c.Strength.required, 0));\n return vr;\n }\n else {\n const vr = new kiwi.Variable();\n this._solver.addConstraint(new kiwi.Constraint(vr, kiwi.Operator.Eq, value));\n return vr;\n }\n}\n\nfunction _getSubView(viewName) {\n if (!viewName) {\n return this._parentSubView;\n }\n else if (viewName.name) {\n this._subViews[viewName.name] = this._subViews[viewName.name] || new SubView({\n name: viewName.name,\n solver: this._solver\n });\n this._subViews[viewName.name]._type = this._subViews[viewName.name]._type || viewName.type;\n return this._subViews[viewName.name];\n }\n else {\n this._subViews[viewName] = this._subViews[viewName] || new SubView({\n name: viewName,\n solver: this._solver\n });\n return this._subViews[viewName];\n }\n}\n\nfunction _getSpacing(constraint) {\n let index = 4;\n if (!constraint.view1 && (constraint.attr1 === 'left')) {\n index = 3;\n }\n else if (!constraint.view1 && (constraint.attr1 === 'top')) {\n index = 0;\n }\n else if (!constraint.view2 && (constraint.attr2 === 'right')) {\n index = 1;\n }\n else if (!constraint.view2 && (constraint.attr2 === 'bottom')) {\n index = 2;\n }\n else {\n switch (constraint.attr1) {\n case 'left':\n case 'right':\n case 'centerX':\n case 'leading':\n case 'trailing':\n index = 4;\n break;\n case 'zIndex':\n index = 6;\n break;\n default:\n index = 5;\n }\n }\n this._spacingVars = this._spacingVars || new Array(7);\n this._spacingExpr = this._spacingExpr || new Array(7);\n if (!this._spacingVars[index]) {\n if (true) {\n this._spacingVars[index] = new c.Variable();\n this._solver.addEditVar(this._spacingVars[index]);\n this._spacingExpr[index] = c.minus(0, this._spacingVars[index]);\n }\n else {\n this._spacingVars[index] = new kiwi.Variable();\n this._solver.addEditVariable(this._spacingVars[index], kiwi.Strength.create(999, 1000, 1000));\n this._spacingExpr[index] = this._spacingVars[index].multiply(-1);\n }\n this._solver.suggestValue(this._spacingVars[index], this._spacing[index]);\n }\n return this._spacingExpr[index];\n}\n\nfunction _addConstraint(constraint) {\n //this.constraints.push(constraint);\n let relation;\n const multiplier = (constraint.multiplier !== undefined) ? constraint.multiplier : 1;\n let constant = (constraint.constant !== undefined) ? constraint.constant : 0;\n if (constant === 'default') {\n constant = _getSpacing.call(this, constraint);\n }\n const attr1 = _getSubView.call(this, constraint.view1)._getAttr(constraint.attr1);\n let attr2;\n if (true) {\n if (constraint.attr2 === Attribute.CONST) {\n attr2 = _getConst.call(this, undefined, constraint.constant);\n }\n else {\n attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2);\n if ((multiplier !== 1) && constant) {\n attr2 = c.plus(c.times(attr2, multiplier), constant);\n }\n else if (constant) {\n attr2 = c.plus(attr2, constant);\n }\n else if (multiplier !== 1) {\n attr2 = c.times(attr2, multiplier);\n }\n }\n const strength = ((constraint.priority !== undefined) && (constraint.priority < 1000)) ? new c.Strength('priority', 0, constraint.priority, 1000) : defaultPriorityStrength;\n switch (constraint.relation) {\n case Relation.EQU:\n relation = new c.Equation(attr1, attr2, strength);\n break;\n case Relation.GEQ:\n relation = new c.Inequality(attr1, c.GEQ, attr2, strength);\n break;\n case Relation.LEQ:\n relation = new c.Inequality(attr1, c.LEQ, attr2, strength);\n break;\n default:\n throw 'Invalid relation specified: ' + constraint.relation;\n }\n }\n else {\n if (constraint.attr2 === Attribute.CONST) {\n attr2 = _getConst.call(this, undefined, constraint.constant);\n }\n else {\n attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2);\n if ((multiplier !== 1) && constant) {\n attr2 = attr2.multiply(multiplier).plus(constant);\n }\n else if (constant) {\n attr2 = attr2.plus(constant);\n }\n else if (multiplier !== 1) {\n attr2 = attr2.multiply(multiplier);\n }\n }\n const strength = ((constraint.priority !== undefined) && (constraint.priority < 1000)) ? kiwi.Strength.create(0, constraint.priority, 1000) : defaultPriorityStrength;\n switch (constraint.relation) {\n case Relation.EQU:\n relation = new kiwi.Constraint(attr1, kiwi.Operator.Eq, attr2, strength);\n break;\n case Relation.GEQ:\n relation = new kiwi.Constraint(attr1, kiwi.Operator.Ge, attr2, strength);\n break;\n case Relation.LEQ:\n relation = new kiwi.Constraint(attr1, kiwi.Operator.Le, attr2, strength);\n break;\n default:\n throw 'Invalid relation specified: ' + constraint.relation;\n }\n }\n this._solver.addConstraint(relation);\n}\n\nfunction _compareSpacing(old, newz) {\n if (old === newz) {\n return true;\n }\n if (!old || !newz) {\n return false;\n }\n for (var i = 0; i < 7; i++) {\n if (old[i] !== newz[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * AutoLayoutJS API reference.\n *\n * ### Index\n *\n * |Entity|Type|Description|\n * |---|---|---|\n * |[AutoLayout](#autolayout)|`namespace`|Top level AutoLayout object.|\n * |[VisualFormat](#autolayoutvisualformat--object)|`namespace`|Parses VFL into constraints.|\n * |[View](#autolayoutview)|`class`|Main entity for adding & evaluating constraints.|\n * |[SubView](#autolayoutsubview--object)|`class`|SubView's are automatically created when constraints are added to views. They give access to the evaluated results.|\n * |[Attribute](#autolayoutattribute--enum)|`enum`|Attribute types that are supported when adding constraints.|\n * |[Relation](#autolayoutrelation--enum)|`enum`|Relationship types that are supported when adding constraints.|\n * |[Priority](#autolayoutpriority--enum)|`enum`|Default priority values for when adding constraints.|\n *\n * ### AutoLayout\n *\n * @module AutoLayout\n */\nclass View {\n\n /**\n * @class View\n * @param {Object} [options] Configuration options.\n * @param {Number} [options.width] Initial width of the view.\n * @param {Number} [options.height] Initial height of the view.\n * @param {Number|Object} [options.spacing] Spacing for the view (default: 8) (see `setSpacing`).\n * @param {Array} [options.constraints] One or more constraint definitions (see `addConstraints`).\n */\n constructor(options) {\n this._solver = true ? new c.SimplexSolver() : new kiwi.Solver();\n this._subViews = {};\n //this._spacing = undefined;\n this._parentSubView = new SubView({\n solver: this._solver\n });\n this.setSpacing((options && (options.spacing !== undefined)) ? options.spacing : 8);\n //this.constraints = [];\n if (options) {\n if ((options.width !== undefined) || (options.height !== undefined)) {\n this.setSize(options.width, options.height);\n }\n if (options.constraints) {\n this.addConstraints(options.constraints);\n }\n }\n }\n\n /**\n * Sets the width and height of the view.\n *\n * @param {Number} width Width of the view.\n * @param {Number} height Height of the view.\n * @return {View} this\n */\n setSize(width, height /*, depth*/) {\n this._parentSubView.intrinsicWidth = width;\n this._parentSubView.intrinsicHeight = height;\n return this;\n }\n\n /**\n * Width that was set using `setSize`.\n * @readonly\n * @type {Number}\n */\n get width() {\n return this._parentSubView.intrinsicWidth;\n }\n\n /**\n * Height that was set using `setSize`.\n * @readonly\n * @type {Number}\n */\n get height() {\n return this._parentSubView.intrinsicHeight;\n }\n\n /**\n * Width that is calculated from the constraints and the `.intrinsicWidth` of\n * the sub-views.\n *\n * When the width has been explicitely set using `setSize`, the fittingWidth\n * will **always** be the same as the explicitely set width. To calculate the size\n * based on the content, use:\n * ```javascript\n * var view = new AutoLayout.View({\n * constraints: VisualFormat.parse('|-[view1]-[view2]-'),\n * spacing: 20\n * });\n * view.subViews.view1.intrinsicWidth = 100;\n * view.subViews.view2.intrinsicWidth = 100;\n * console.log('fittingWidth: ' + view.fittingWidth); // 260\n * ```\n *\n * @readonly\n * @type {Number}\n */\n get fittingWidth() {\n return this._parentSubView.width;\n }\n\n /**\n * Height that is calculated from the constraints and the `.intrinsicHeight` of\n * the sub-views.\n *\n * See `.fittingWidth`.\n *\n * @readonly\n * @type {Number}\n */\n get fittingHeight() {\n return this._parentSubView.height;\n }\n\n /**\n * Sets the spacing for the view.\n *\n * The spacing can be set for 7 different variables:\n * `top`, `right`, `bottom`, `left`, `width`, `height` and `zIndex`. The `left`-spacing is\n * used when a spacer is used between the parent-view and a sub-view (e.g. `|-[subView]`).\n * The same is true for the `right`, `top` and `bottom` spacers. The `width` and `height` are\n * used for spacers in between sub-views (e.g. `[view1]-[view2]`).\n *\n * Instead of using the full spacing syntax, it is also possible to use shorthand notations:\n *\n * |Syntax|Type|Description|\n * |---|---|---|\n * |`[top, right, bottom, left, width, height, zIndex]`|Array(7)|Full syntax including z-index **(clockwise order)**.|\n * |`[top, right, bottom, left, width, height]`|Array(6)|Full horizontal & vertical spacing syntax (no z-index) **(clockwise order)**.|\n * |`[horizontal, vertical, zIndex]`|Array(3)|Horizontal = left, right, width, vertical = top, bottom, height.|\n * |`[horizontal, vertical]`|Array(2)|Horizontal = left, right, width, vertical = top, bottom, height, z-index = 1.|\n * |`spacing`|Number|Horizontal & vertical spacing are all the same, z-index = 1.|\n *\n * Examples:\n * ```javascript\n * view.setSpacing(10); // horizontal & vertical spacing 10\n * view.setSpacing([10, 15, 2]); // horizontal spacing 10, vertical spacing 15, z-axis spacing 2\n * view.setSpacing([10, 20, 10, 20, 5, 5]); // top, right, bottom, left, horizontal, vertical\n * view.setSpacing([10, 20, 10, 20, 5, 5, 1]); // top, right, bottom, left, horizontal, vertical, z\n * ```\n *\n * @param {Number|Array} spacing\n * @return {View} this\n */\n setSpacing(spacing) {\n // convert spacing into array: [top, right, bottom, left, horz, vert, z-index]\n switch (Array.isArray(spacing) ? spacing.length : -1) {\n case -1: spacing = [spacing, spacing, spacing, spacing, spacing, spacing, 1]; break;\n case 1: spacing = [spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], 1]; break;\n case 2: spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], 1]; break;\n case 3: spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], spacing[2]]; break;\n case 6: spacing = [spacing[0], spacing[1], spacing[2], spacing[3], spacing[4], spacing[5], 1]; break;\n case 7: break;\n default: throw 'Invalid spacing syntax';\n }\n if (!_compareSpacing(this._spacing, spacing)) {\n this._spacing = spacing;\n // update spacing variables\n if (this._spacingVars) {\n for (var i = 0; i < this._spacingVars.length; i++) {\n if (this._spacingVars[i]) {\n this._solver.suggestValue(this._spacingVars[i], this._spacing[i]);\n }\n }\n if (true) {\n this._solver.resolve();\n }\n else {\n this._solver.updateVariables();\n }\n }\n }\n return this;\n }\n\n /**\n * Adds a constraint definition.\n *\n * A constraint definition has the following format:\n *\n * ```javascript\n * constraint: {\n * view1: {String},\n * attr1: {AutoLayout.Attribute},\n * relation: {AutoLayout.Relation},\n * view2: {String},\n * attr2: {AutoLayout.Attribute},\n * multiplier: {Number},\n * constant: {Number},\n * priority: {Number}(0..1000)\n * }\n * ```\n * @param {Object} constraint Constraint definition.\n * @return {View} this\n */\n addConstraint(constraint) {\n _addConstraint.call(this, constraint);\n if (!true) {\n this._solver.updateVariables();\n }\n return this;\n }\n\n /**\n * Adds one or more constraint definitions.\n *\n * A constraint definition has the following format:\n *\n * ```javascript\n * constraint: {\n * view1: {String},\n * attr1: {AutoLayout.Attribute},\n * relation: {AutoLayout.Relation},\n * view2: {String},\n * attr2: {AutoLayout.Attribute},\n * multiplier: {Number},\n * constant: {Number},\n * priority: {Number}(0..1000)\n * }\n * ```\n * @param {Array} constraints One or more constraint definitions.\n * @return {View} this\n */\n addConstraints(constraints) {\n for (var j = 0; j < constraints.length; j++) {\n _addConstraint.call(this, constraints[j]);\n }\n if (!true) {\n this._solver.updateVariables();\n }\n return this;\n }\n\n /**\n * Dictionary of `SubView` objects that have been created when adding constraints.\n * @readonly\n * @type {Object.SubView}\n */\n get subViews() {\n return this._subViews;\n }\n\n /**\n * Checks whether the constraints incompletely specify the location\n * of the subViews.\n * @private\n */\n //get hasAmbiguousLayout() {\n // Todo\n //}\n}\n\nvar AutoLayout = {\n Attribute: Attribute,\n Relation: Relation,\n Priority: Priority,\n VisualFormat: VisualFormat,\n View: View,\n SubView: SubView\n //DOM: DOM\n};\n\nmodule.exports = AutoLayout;","/**\n * Parts Copyright (C) 2011-2012, Alex Russell (slightlyoff@chromium.org)\n * Parts Copyright (C) Copyright (C) 1998-2000 Greg J. Badros\n *\n * Use of this source code is governed by the LGPL, which can be found in the\n * COPYING.LGPL file.\n *\n * This is a compiled version of Cassowary/JS. For source versions or to\n * contribute, see the github project:\n *\n * https://github.com/slightlyoff/cassowary-js-refactor\n *\n */\n\n(function() {\n(function(a){\"use strict\";try{(function(){}).bind(a)}catch(b){Object.defineProperty(Function.prototype,\"bind\",{value:function(a){var b=this;return function(){return b.apply(a,arguments)}},enumerable:!1,configurable:!0,writable:!0})}var c=a.HTMLElement!==void 0,d=function(a){for(var b=null;a&&a!=Object.prototype;){if(a.tagName){b=a.tagName;break}a=a.prototype}return b||\"div\"},e=1e-8,f={},g=function(a,b){if(a&&b){if(\"function\"==typeof a[b])return a[b];var c=a.prototype;if(c&&\"function\"==typeof c[b])return c[b];if(c!==Object.prototype&&c!==Function.prototype)return\"function\"==typeof a.__super__?g(a.__super__,b):void 0}},h=a.c={debug:!1,trace:!1,verbose:!1,traceAdded:!1,GC:!1,GEQ:1,LEQ:2,inherit:function(b){var e=null,g=null;b[\"extends\"]&&(g=b[\"extends\"],delete b[\"extends\"]),b.initialize&&(e=b.initialize,delete b.initialize);var h=e||function(){};Object.defineProperty(h,\"__super__\",{value:g?g:Object,enumerable:!1,configurable:!0,writable:!1}),b._t&&(f[b._t]=h);var i=h.prototype=Object.create(g?g.prototype:Object.prototype);if(this.extend(i,b),c&&g&&g.prototype instanceof a.HTMLElement){var j=h,k=d(i),l=function(a){return a.__proto__=i,j.apply(a,arguments),i.created&&a.created(),i.decorate&&a.decorate(),a};this.extend(i,{upgrade:l}),h=function(){return l(a.document.createElement(k))},h.prototype=i,this.extend(h,{ctor:j})}return h},extend:function(a,b){return this.own(b,function(c){var d=Object.getOwnPropertyDescriptor(b,c);try{\"function\"==typeof d.get||\"function\"==typeof d.set?Object.defineProperty(a,c,d):\"function\"==typeof d.value||\"_\"===c.charAt(0)?(d.writable=!0,d.configurable=!0,d.enumerable=!1,Object.defineProperty(a,c,d)):a[c]=b[c]}catch(e){}}),a},own:function(b,c,d){return Object.getOwnPropertyNames(b).forEach(c,d||a),b},traceprint:function(a){h.verbose&&console.log(a)},fnenterprint:function(a){console.log(\"* \"+a)},fnexitprint:function(a){console.log(\"- \"+a)},assert:function(a,b){if(!a)throw new h.InternalError(\"Assertion failed: \"+b)},plus:function(a,b){return a instanceof h.Expression||(a=new h.Expression(a)),b instanceof h.Expression||(b=new h.Expression(b)),a.plus(b)},minus:function(a,b){return a instanceof h.Expression||(a=new h.Expression(a)),b instanceof h.Expression||(b=new h.Expression(b)),a.minus(b)},times:function(a,b){return(\"number\"==typeof a||a instanceof h.Variable)&&(a=new h.Expression(a)),(\"number\"==typeof b||b instanceof h.Variable)&&(b=new h.Expression(b)),a.times(b)},divide:function(a,b){return(\"number\"==typeof a||a instanceof h.Variable)&&(a=new h.Expression(a)),(\"number\"==typeof b||b instanceof h.Variable)&&(b=new h.Expression(b)),a.divide(b)},approx:function(a,b){if(a===b)return!0;var c,d;return c=a instanceof h.Variable?a.value:a,d=b instanceof h.Variable?b.value:b,0==c?e>Math.abs(d):0==d?e>Math.abs(c):Math.abs(c-d)64||this._deleted>this._compactThreshold&&(this._compact(),this._deleted=0)},\"delete\":function(a){a=b(a),this._store.hasOwnProperty(a)&&(this._deleted++,delete this._store[a],this.size>0&&this.size--)},each:function(a,b){if(this.size){this._perhapsCompact();var c=this._store,d=this._keyStrMap;Object.keys(this._store).forEach(function(e){a.call(b||null,d[e],c[e])},this)}},escapingEach:function(a,b){if(this.size){this._perhapsCompact();for(var c=this,e=this._store,f=this._keyStrMap,g=d,h=Object.keys(e),i=0;h.length>i;i++)if(function(d){c._store.hasOwnProperty(d)&&(g=a.call(b||null,f[d],e[d]))}(h[i]),g){if(void 0!==g.retval)return g;if(g.brk)break}}},clone:function(){var b=new a.HashTable;return this.size&&(b.size=this.size,c(this._store,b._store),c(this._keyStrMap,b._keyStrMap)),b},equals:function(b){if(b===this)return!0;if(!(b instanceof a.HashTable)||b._size!==this._size)return!1;for(var c=Object.keys(this._store),d=0;c.length>d;d++){var e=c[d];if(this._keyStrMap[e]!==b._keyStrMap[e]||this._store[e]!==b._store[e])return!1}return!0},toString:function(){var b=\"\";return this.each(function(a,c){b+=a+\" => \"+c+\"\\n\"}),b}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.HashSet=a.inherit({_t:\"c.HashSet\",initialize:function(){this.storage=[],this.size=0},add:function(a){var b=this.storage;b.indexOf(a),-1==b.indexOf(a)&&b.push(a),this.size=this.storage.length},values:function(){return this.storage},has:function(a){var b=this.storage;return-1!=b.indexOf(a)},\"delete\":function(a){var b=this.storage.indexOf(a);return-1==b?null:(this.storage.splice(b,1)[0],this.size=this.storage.length,void 0)},clear:function(){this.storage.length=0},each:function(a,b){this.size&&this.storage.forEach(a,b)},escapingEach:function(a,b){this.size&&this.storage.forEach(a,b)},toString:function(){var a=this.size+\" {\",b=!0;return this.each(function(c){b?b=!1:a+=\", \",a+=c}),a+=\"}\\n\"},toJSON:function(){var a=[];return this.each(function(b){a.push(b.toJSON())}),{_t:\"c.HashSet\",data:a}},fromJSON:function(b){var c=new a.HashSet;return b.data&&(c.size=b.data.length,c.storage=b.data),c}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Error=a.inherit({initialize:function(a){a&&(this._description=a)},_name:\"c.Error\",_description:\"An error has occured in Cassowary\",set description(a){this._description=a},get description(){return\"(\"+this._name+\") \"+this._description},get message(){return this.description},toString:function(){return this.description}});var b=function(b,c){return a.inherit({\"extends\":a.Error,initialize:function(){a.Error.apply(this,arguments)},_name:b||\"\",_description:c||\"\"})};a.ConstraintNotFound=b(\"c.ConstraintNotFound\",\"Tried to remove a constraint never added to the tableu\"),a.InternalError=b(\"c.InternalError\"),a.NonExpression=b(\"c.NonExpression\",\"The resulting expression would be non\"),a.NotEnoughStays=b(\"c.NotEnoughStays\",\"There are not enough stays to give specific values to every variable\"),a.RequiredFailure=b(\"c.RequiredFailure\",\"A required constraint cannot be satisfied\"),a.TooDifficult=b(\"c.TooDifficult\",\"The constraints are too difficult to solve\")}(this.c||module.parent.exports||{}),function(a){\"use strict\";var b=1e3;a.SymbolicWeight=a.inherit({_t:\"c.SymbolicWeight\",initialize:function(){this.value=0;for(var a=1,c=arguments.length-1;c>=0;--c)this.value+=arguments[c]*a,a*=b},toJSON:function(){return{_t:this._t,value:this.value}}})}(this.c||module.parent.exports||{}),function(a){a.Strength=a.inherit({initialize:function(b,c,d,e){this.name=b,this.symbolicWeight=c instanceof a.SymbolicWeight?c:new a.SymbolicWeight(c,d,e)},get required(){return this===a.Strength.required},toString:function(){return this.name+(this.isRequired?\"\":\":\"+this.symbolicWeight)}}),a.Strength.required=new a.Strength(\"\",1e3,1e3,1e3),a.Strength.strong=new a.Strength(\"strong\",1,0,0),a.Strength.medium=new a.Strength(\"medium\",0,1,0),a.Strength.weak=new a.Strength(\"weak\",0,0,1)}(this.c||(\"undefined\"!=typeof module?module.parent.exports.c:{})),function(a){\"use strict\";a.AbstractVariable=a.inherit({isDummy:!1,isExternal:!1,isPivotable:!1,isRestricted:!1,_init:function(b,c){this.hashCode=a._inc(),this.name=(c||\"\")+this.hashCode,b&&(b.name!==void 0&&(this.name=b.name),b.value!==void 0&&(this.value=b.value),b.prefix!==void 0&&(this._prefix=b.prefix))},_prefix:\"\",name:\"\",value:0,toJSON:function(){var a={};return this._t&&(a._t=this._t),this.name&&(a.name=this.name),this.value!==void 0&&(a.value=this.value),this._prefix&&(a._prefix=this._prefix),this._t&&(a._t=this._t),a},fromJSON:function(b,c){var d=new c;return a.extend(d,b),d},toString:function(){return this._prefix+\"[\"+this.name+\":\"+this.value+\"]\"}}),a.Variable=a.inherit({_t:\"c.Variable\",\"extends\":a.AbstractVariable,initialize:function(b){this._init(b,\"v\");var c=a.Variable._map;c&&(c[this.name]=this)},isExternal:!0}),a.DummyVariable=a.inherit({_t:\"c.DummyVariable\",\"extends\":a.AbstractVariable,initialize:function(a){this._init(a,\"d\")},isDummy:!0,isRestricted:!0,value:\"dummy\"}),a.ObjectiveVariable=a.inherit({_t:\"c.ObjectiveVariable\",\"extends\":a.AbstractVariable,initialize:function(a){this._init(a,\"o\")},value:\"obj\"}),a.SlackVariable=a.inherit({_t:\"c.SlackVariable\",\"extends\":a.AbstractVariable,initialize:function(a){this._init(a,\"s\")},isPivotable:!0,isRestricted:!0,value:\"slack\"})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Point=a.inherit({initialize:function(b,c,d){if(b instanceof a.Variable)this._x=b;else{var e={value:b};d&&(e.name=\"x\"+d),this._x=new a.Variable(e)}if(c instanceof a.Variable)this._y=c;else{var f={value:c};d&&(f.name=\"y\"+d),this._y=new a.Variable(f)}},get x(){return this._x},set x(b){b instanceof a.Variable?this._x=b:this._x.value=b},get y(){return this._y},set y(b){b instanceof a.Variable?this._y=b:this._y.value=b},toString:function(){return\"(\"+this.x+\", \"+this.y+\")\"}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Expression=a.inherit({initialize:function(b,c,d){a.GC&&console.log(\"new c.Expression\"),this.constant=\"number\"!=typeof d||isNaN(d)?0:d,this.terms=new a.HashTable,b instanceof a.AbstractVariable?this.setVariable(b,\"number\"==typeof c?c:1):\"number\"==typeof b&&(isNaN(b)?console.trace():this.constant=b)},initializeFromHash:function(b,c){return a.verbose&&(console.log(\"*******************************\"),console.log(\"clone c.initializeFromHash\"),console.log(\"*******************************\")),a.GC&&console.log(\"clone c.Expression\"),this.constant=b,this.terms=c.clone(),this},multiplyMe:function(a){this.constant*=a;var b=this.terms;return b.each(function(c,d){b.set(c,d*a)}),this},clone:function(){a.verbose&&(console.log(\"*******************************\"),console.log(\"clone c.Expression\"),console.log(\"*******************************\"));var b=new a.Expression;return b.initializeFromHash(this.constant,this.terms),b},times:function(b){if(\"number\"==typeof b)return this.clone().multiplyMe(b);if(this.isConstant)return b.times(this.constant);if(b.isConstant)return this.times(b.constant);throw new a.NonExpression},plus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,1):b instanceof a.Variable?this.clone().addVariable(b,1):void 0},minus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,-1):b instanceof a.Variable?this.clone().addVariable(b,-1):void 0},divide:function(b){if(\"number\"==typeof b){if(a.approx(b,0))throw new a.NonExpression;return this.times(1/b)}if(b instanceof a.Expression){if(!b.isConstant)throw new a.NonExpression;return this.times(1/b.constant)}},addExpression:function(b,c,d,e){return b instanceof a.AbstractVariable&&(b=new a.Expression(b),a.trace&&console.log(\"addExpression: Had to cast a var to an expression\")),c=c||1,this.constant+=c*b.constant,b.terms.each(function(a,b){this.addVariable(a,b*c,d,e)},this),this},addVariable:function(b,c,d,e){null==c&&(c=1),a.trace&&console.log(\"c.Expression::addVariable():\",b,c);var f=this.terms.get(b);if(f){var g=f+c;0==g||a.approx(g,0)?(e&&e.noteRemovedVariable(b,d),this.terms.delete(b)):this.setVariable(b,g)}else a.approx(c,0)||(this.setVariable(b,c),e&&e.noteAddedVariable(b,d));return this},setVariable:function(a,b){return this.terms.set(a,b),this},anyPivotableVariable:function(){if(this.isConstant)throw new a.InternalError(\"anyPivotableVariable called on a constant\");var b=this.terms.escapingEach(function(a){return a.isPivotable?{retval:a}:void 0});return b&&void 0!==b.retval?b.retval:null},substituteOut:function(b,c,d,e){a.trace&&(a.fnenterprint(\"CLE:substituteOut: \"+b+\", \"+c+\", \"+d+\", ...\"),a.traceprint(\"this = \"+this));var f=this.setVariable.bind(this),g=this.terms,h=g.get(b);g.delete(b),this.constant+=h*c.constant,c.terms.each(function(b,c){var i=g.get(b);if(i){var j=i+h*c;a.approx(j,0)?(e.noteRemovedVariable(b,d),g.delete(b)):f(b,j)}else f(b,h*c),e&&e.noteAddedVariable(b,d)}),a.trace&&a.traceprint(\"Now this is \"+this)},changeSubject:function(a,b){this.setVariable(a,this.newSubject(b))},newSubject:function(b){a.trace&&a.fnenterprint(\"newSubject:\"+b);var c=1/this.terms.get(b);return this.terms.delete(b),this.multiplyMe(-c),c},coefficientFor:function(a){return this.terms.get(a)||0},get isConstant(){return 0==this.terms.size},toString:function(){var b=\"\",c=!1;if(!a.approx(this.constant,0)||this.isConstant){if(b+=this.constant,this.isConstant)return b;c=!0}return this.terms.each(function(a,d){c&&(b+=\" + \"),b+=d+\"*\"+a,c=!0}),b},equals:function(b){return b===this?!0:b instanceof a.Expression&&b.constant===this.constant&&b.terms.equals(this.terms)},Plus:function(a,b){return a.plus(b)},Minus:function(a,b){return a.minus(b)},Times:function(a,b){return a.times(b)},Divide:function(a,b){return a.divide(b)}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.AbstractConstraint=a.inherit({initialize:function(b,c){this.hashCode=a._inc(),this.strength=b||a.Strength.required,this.weight=c||1},isEditConstraint:!1,isInequality:!1,isStayConstraint:!1,get required(){return this.strength===a.Strength.required},toString:function(){return this.strength+\" {\"+this.weight+\"} (\"+this.expression+\")\"}});var b=a.AbstractConstraint.prototype.toString,c=function(b,c,d){a.AbstractConstraint.call(this,c||a.Strength.strong,d),this.variable=b,this.expression=new a.Expression(b,-1,b.value)};a.EditConstraint=a.inherit({\"extends\":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isEditConstraint:!0,toString:function(){return\"edit:\"+b.call(this)}}),a.StayConstraint=a.inherit({\"extends\":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isStayConstraint:!0,toString:function(){return\"stay:\"+b.call(this)}});var d=a.Constraint=a.inherit({\"extends\":a.AbstractConstraint,initialize:function(b,c,d){a.AbstractConstraint.call(this,c,d),this.expression=b}});a.Inequality=a.inherit({\"extends\":a.Constraint,_cloneOrNewCle:function(b){return b.clone?b.clone():new a.Expression(b)},initialize:function(b,c,e,f,g){var h=b instanceof a.Expression,i=e instanceof a.Expression,j=b instanceof a.AbstractVariable,k=e instanceof a.AbstractVariable,l=\"number\"==typeof b,m=\"number\"==typeof e;if((h||l)&&k){var n=b,o=c,p=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.GEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addVariable(p,-1)}}else if(j&&(i||m)){var n=e,o=c,p=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addVariable(p,-1)}}else{if(h&&m){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.GEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(l&&i){var s=e,o=c,t=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(h&&i){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(t),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(s));else{if(o!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addExpression(this._cloneOrNewCle(s),-1)}}else{if(h)return d.call(this,b,c,e);if(c==a.GEQ)d.call(this,new a.Expression(e),f,g),this.expression.multiplyMe(-1),this.expression.addVariable(b);else{if(c!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");d.call(this,new a.Expression(e),f,g),this.expression.addVariable(b,-1)}}}},isInequality:!0,toString:function(){return d.prototype.toString.call(this)+\" >= 0) id: \"+this.hashCode}}),a.Equation=a.inherit({\"extends\":a.Constraint,initialize:function(b,c,e,f){if(b instanceof a.Expression&&!c||c instanceof a.Strength)d.call(this,b,c,e);else if(b instanceof a.AbstractVariable&&c instanceof a.Expression){var g=b,h=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.AbstractVariable&&\"number\"==typeof c){var g=b,k=c,i=e,j=f;d.call(this,new a.Expression(k),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.Expression&&c instanceof a.AbstractVariable){var h=b,g=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else{if(!(b instanceof a.Expression||b instanceof a.AbstractVariable||\"number\"==typeof b)||!(c instanceof a.Expression||c instanceof a.AbstractVariable||\"number\"==typeof c))throw\"Bad initializer to c.Equation\";b=b instanceof a.Expression?b.clone():new a.Expression(b),c=c instanceof a.Expression?c.clone():new a.Expression(c),d.call(this,b,e,f),this.expression.addExpression(c,-1)}a.assert(this.strength instanceof a.Strength,\"_strength not set\")},toString:function(){return d.prototype.toString.call(this)+\" = 0)\"}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.EditInfo=a.inherit({initialize:function(a,b,c,d,e){this.constraint=a,this.editPlus=b,this.editMinus=c,this.prevEditConstant=d,this.index=e},toString:function(){return\"\"}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Tableau=a.inherit({initialize:function(){this.columns=new a.HashTable,this.rows=new a.HashTable,this._infeasibleRows=new a.HashSet,this._externalRows=new a.HashSet,this._externalParametricVars=new a.HashSet},noteRemovedVariable:function(b,c){a.trace&&console.log(\"c.Tableau::noteRemovedVariable: \",b,c);var d=this.columns.get(b);c&&d&&d.delete(c)},noteAddedVariable:function(a,b){b&&this.insertColVar(a,b)},getInternalInfo:function(){var a=\"Tableau Information:\\n\";return a+=\"Rows: \"+this.rows.size,a+=\" (= \"+(this.rows.size-1)+\" constraints)\",a+=\"\\nColumns: \"+this.columns.size,a+=\"\\nInfeasible Rows: \"+this._infeasibleRows.size,a+=\"\\nExternal basic variables: \"+this._externalRows.size,a+=\"\\nExternal parametric variables: \",a+=this._externalParametricVars.size,a+=\"\\n\"},toString:function(){var a=\"Tableau:\\n\";return this.rows.each(function(b,c){a+=b,a+=\" <==> \",a+=c,a+=\"\\n\"}),a+=\"\\nColumns:\\n\",a+=this.columns,a+=\"\\nInfeasible rows: \",a+=this._infeasibleRows,a+=\"External basic variables: \",a+=this._externalRows,a+=\"External parametric variables: \",a+=this._externalParametricVars},insertColVar:function(b,c){var d=this.columns.get(b);d||(d=new a.HashSet,this.columns.set(b,d)),d.add(c)},addRow:function(b,c){a.trace&&a.fnenterprint(\"addRow: \"+b+\", \"+c),this.rows.set(b,c),c.terms.each(function(a){this.insertColVar(a,b),a.isExternal&&this._externalParametricVars.add(a)},this),b.isExternal&&this._externalRows.add(b),a.trace&&a.traceprint(\"\"+this)},removeColumn:function(b){a.trace&&a.fnenterprint(\"removeColumn:\"+b);var c=this.columns.get(b);c?(this.columns.delete(b),c.each(function(a){var c=this.rows.get(a);c.terms.delete(b)},this)):a.trace&&console.log(\"Could not find var\",b,\"in columns\"),b.isExternal&&(this._externalRows.delete(b),this._externalParametricVars.delete(b))},removeRow:function(b){a.trace&&a.fnenterprint(\"removeRow:\"+b);var c=this.rows.get(b);return a.assert(null!=c),c.terms.each(function(c){var e=this.columns.get(c);null!=e&&(a.trace&&console.log(\"removing from varset:\",b),e.delete(b))},this),this._infeasibleRows.delete(b),b.isExternal&&this._externalRows.delete(b),this.rows.delete(b),a.trace&&a.fnexitprint(\"returning \"+c),c},substituteOut:function(b,c){a.trace&&a.fnenterprint(\"substituteOut:\"+b+\", \"+c),a.trace&&a.traceprint(\"\"+this);var d=this.columns.get(b);d.each(function(a){var d=this.rows.get(a);d.substituteOut(b,c,a,this),a.isRestricted&&0>d.constant&&this._infeasibleRows.add(a)},this),b.isExternal&&(this._externalRows.add(b),this._externalParametricVars.delete(b)),this.columns.delete(b)},columnsHasKey:function(a){return!!this.columns.get(a)}})}(this.c||module.parent.exports||{}),function(a){var b=a.Tableau,c=b.prototype,d=1e-8,e=a.Strength.weak;a.SimplexSolver=a.inherit({\"extends\":a.Tableau,initialize:function(){a.Tableau.call(this),this._stayMinusErrorVars=[],this._stayPlusErrorVars=[],this._errorVars=new a.HashTable,this._markerVars=new a.HashTable,this._objective=new a.ObjectiveVariable({name:\"Z\"}),this._editVarMap=new a.HashTable,this._editVarList=[],this._slackCounter=0,this._artificialCounter=0,this._dummyCounter=0,this.autoSolve=!0,this._fNeedsSolving=!1,this._optimizeCount=0,this.rows.set(this._objective,new a.Expression),this._stkCedcns=[0],a.trace&&a.traceprint(\"objective expr == \"+this.rows.get(this._objective))},addLowerBound:function(b,c){var d=new a.Inequality(b,a.GEQ,new a.Expression(c));return this.addConstraint(d)},addUpperBound:function(b,c){var d=new a.Inequality(b,a.LEQ,new a.Expression(c));return this.addConstraint(d)},addBounds:function(a,b,c){return this.addLowerBound(a,b),this.addUpperBound(a,c),this},add:function(){for(var a=0;arguments.length>a;a++)this.addConstraint(arguments[a]);return this},addConstraint:function(b){a.trace&&a.fnenterprint(\"addConstraint: \"+b);var c=Array(2),d=Array(1),e=this.newExpression(b,c,d);if(d=d[0],this.tryAddingDirectly(e)||this.addWithArtificialVariable(e),this._fNeedsSolving=!0,b.isEditConstraint){var f=this._editVarMap.size,g=c[0],h=c[1];!g instanceof a.SlackVariable&&console.warn(\"cvEplus not a slack variable =\",g),!h instanceof a.SlackVariable&&console.warn(\"cvEminus not a slack variable =\",h),a.debug&&console.log(\"new c.EditInfo(\"+b+\", \"+g+\", \"+h+\", \"+d+\", \"+f+\")\");var i=new a.EditInfo(b,g,h,d,f);this._editVarMap.set(b.variable,i),this._editVarList[f]={v:b.variable,info:i}}return this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},addConstraintNoException:function(b){a.trace&&a.fnenterprint(\"addConstraintNoException: \"+b);try{return this.addConstraint(b),!0}catch(c){return!1}},addEditVar:function(b,c){return a.trace&&a.fnenterprint(\"addEditVar: \"+b+\" @ \"+c),this.addConstraint(new a.EditConstraint(b,c||a.Strength.strong))},beginEdit:function(){return a.assert(this._editVarMap.size>0,\"_editVarMap.size > 0\"),this._infeasibleRows.clear(),this._resetStayConstants(),this._stkCedcns.push(this._editVarMap.size),this},endEdit:function(){return a.assert(this._editVarMap.size>0,\"_editVarMap.size > 0\"),this.resolve(),this._stkCedcns.pop(),this.removeEditVarsTo(this._stkCedcns[this._stkCedcns.length-1]),this},removeAllEditVars:function(){return this.removeEditVarsTo(0)},removeEditVarsTo:function(b){try{for(var c=this._editVarList.length,d=b;c>d;d++)this._editVarList[d]&&this.removeConstraint(this._editVarMap.get(this._editVarList[d].v).constraint);return this._editVarList.length=b,a.assert(this._editVarMap.size==b,\"_editVarMap.size == n\"),this}catch(e){throw new a.InternalError(\"Constraint not found in removeEditVarsTo\")}},addPointStays:function(b){return a.trace&&console.log(\"addPointStays\",b),b.forEach(function(a,b){this.addStay(a.x,e,Math.pow(2,b)),this.addStay(a.y,e,Math.pow(2,b))},this),this},addStay:function(b,c,d){var f=new a.StayConstraint(b,c||e,d||1);return this.addConstraint(f)},removeConstraint:function(a){return this.removeConstraintInternal(a),this},removeConstraintInternal:function(b){a.trace&&a.fnenterprint(\"removeConstraintInternal: \"+b),a.trace&&a.traceprint(\"\"+this),this._fNeedsSolving=!0,this._resetStayConstants();var c=this.rows.get(this._objective),d=this._errorVars.get(b);a.trace&&a.traceprint(\"eVars == \"+d),null!=d&&d.each(function(e){var f=this.rows.get(e);null==f?c.addVariable(e,-b.weight*b.strength.symbolicWeight.value,this._objective,this):c.addExpression(f,-b.weight*b.strength.symbolicWeight.value,this._objective,this),a.trace&&a.traceprint(\"now eVars == \"+d)},this);var e=this._markerVars.get(b);if(this._markerVars.delete(b),null==e)throw new a.InternalError(\"Constraint not found in removeConstraintInternal\");if(a.trace&&a.traceprint(\"Looking to remove var \"+e),null==this.rows.get(e)){var f=this.columns.get(e);a.trace&&a.traceprint(\"Must pivot -- columns are \"+f);var g=null,h=0;f.each(function(b){if(b.isRestricted){var c=this.rows.get(b),d=c.coefficientFor(e);if(a.trace&&a.traceprint(\"Marker \"+e+\"'s coefficient in \"+c+\" is \"+d),0>d){var f=-c.constant/d;(null==g||h>f||a.approx(f,h)&&b.hashCoded)&&(h=d,g=a)}},this)),null==g&&(0==f.size?this.removeColumn(e):f.escapingEach(function(a){return a!=this._objective?(g=a,{brk:!0}):void 0},this)),null!=g&&this.pivot(e,g)}if(null!=this.rows.get(e)&&this.removeRow(e),null!=d&&d.each(function(a){a!=e&&this.removeColumn(a)},this),b.isStayConstraint){if(null!=d)for(var j=0;this._stayPlusErrorVars.length>j;j++)d.delete(this._stayPlusErrorVars[j]),d.delete(this._stayMinusErrorVars[j])}else if(b.isEditConstraint){a.assert(null!=d,\"eVars != null\");var k=this._editVarMap.get(b.variable);this.removeColumn(k.editMinus),this._editVarMap.delete(b.variable)}return null!=d&&this._errorVars.delete(d),this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},reset:function(){throw a.trace&&a.fnenterprint(\"reset\"),new a.InternalError(\"reset not implemented\")},resolveArray:function(b){a.trace&&a.fnenterprint(\"resolveArray\"+b);var c=b.length;this._editVarMap.each(function(a,d){var e=d.index;c>e&&this.suggestValue(a,b[e])},this),this.resolve()},resolvePair:function(a,b){this.suggestValue(this._editVarList[0].v,a),this.suggestValue(this._editVarList[1].v,b),this.resolve()},resolve:function(){a.trace&&a.fnenterprint(\"resolve()\"),this.dualOptimize(),this._setExternalVariables(),this._infeasibleRows.clear(),this._resetStayConstants()},suggestValue:function(b,c){a.trace&&console.log(\"suggestValue(\"+b+\", \"+c+\")\");var d=this._editVarMap.get(b);if(!d)throw new a.Error(\"suggestValue for variable \"+b+\", but var is not an edit variable\");var e=c-d.prevEditConstant;return d.prevEditConstant=c,this.deltaEditConstant(e,d.editPlus,d.editMinus),this},solve:function(){return this._fNeedsSolving&&(this.optimize(this._objective),this._setExternalVariables()),this},setEditedValue:function(b,c){if(!this.columnsHasKey(b)&&null==this.rows.get(b))return b.value=c,this;if(!a.approx(c,b.value)){this.addEditVar(b),this.beginEdit();try{this.suggestValue(b,c)}catch(d){throw new a.InternalError(\"Error in setEditedValue\")}this.endEdit()}return this},addVar:function(b){if(!this.columnsHasKey(b)&&null==this.rows.get(b)){try{this.addStay(b)}catch(c){throw new a.InternalError(\"Error in addVar -- required failure is impossible\")}a.trace&&a.traceprint(\"added initial stay on \"+b)}return this},getInternalInfo:function(){var a=c.getInternalInfo.call(this);return a+=\"\\nSolver info:\\n\",a+=\"Stay Error Variables: \",a+=this._stayPlusErrorVars.length+this._stayMinusErrorVars.length,a+=\" (\"+this._stayPlusErrorVars.length+\" +, \",a+=this._stayMinusErrorVars.length+\" -)\\n\",a+=\"Edit Variables: \"+this._editVarMap.size,a+=\"\\n\"},getDebugInfo:function(){return\"\"+this+this.getInternalInfo()+\"\\n\"},toString:function(){var a=c.getInternalInfo.call(this);return a+=\"\\n_stayPlusErrorVars: \",a+=\"[\"+this._stayPlusErrorVars+\"]\",a+=\"\\n_stayMinusErrorVars: \",a+=\"[\"+this._stayMinusErrorVars+\"]\",a+=\"\\n\",a+=\"_editVarMap:\\n\"+this._editVarMap,a+=\"\\n\"},getConstraintMap:function(){return this._markerVars},addWithArtificialVariable:function(b){a.trace&&a.fnenterprint(\"addWithArtificialVariable: \"+b);var c=new a.SlackVariable({value:++this._artificialCounter,prefix:\"a\"}),d=new a.ObjectiveVariable({name:\"az\"}),e=b.clone();a.trace&&a.traceprint(\"before addRows:\\n\"+this),this.addRow(d,e),this.addRow(c,b),a.trace&&a.traceprint(\"after addRows:\\n\"+this),this.optimize(d);var f=this.rows.get(d);if(a.trace&&a.traceprint(\"azTableauRow.constant == \"+f.constant),!a.approx(f.constant,0))throw this.removeRow(d),this.removeColumn(c),new a.RequiredFailure;var g=this.rows.get(c);if(null!=g){if(g.isConstant)return this.removeRow(c),this.removeRow(d),void 0;var h=g.anyPivotableVariable();this.pivot(h,c)}a.assert(null==this.rows.get(c),\"rowExpression(av) == null\"),this.removeColumn(c),this.removeRow(d)},tryAddingDirectly:function(b){a.trace&&a.fnenterprint(\"tryAddingDirectly: \"+b);var c=this.chooseSubject(b);return null==c?(a.trace&&a.fnexitprint(\"returning false\"),!1):(b.newSubject(c),this.columnsHasKey(c)&&this.substituteOut(c,b),this.addRow(c,b),a.trace&&a.fnexitprint(\"returning true\"),!0)},chooseSubject:function(b){a.trace&&a.fnenterprint(\"chooseSubject: \"+b);var c=null,d=!1,e=!1,f=b.terms,g=f.escapingEach(function(a,b){if(d){if(!a.isRestricted&&!this.columnsHasKey(a))return{retval:a}}else if(a.isRestricted){if(!e&&!a.isDummy&&0>b){var f=this.columns.get(a);(null==f||1==f.size&&this.columnsHasKey(this._objective))&&(c=a,e=!0)}}else c=a,d=!0},this);if(g&&void 0!==g.retval)return g.retval;if(null!=c)return c;var h=0,g=f.escapingEach(function(a,b){return a.isDummy?(this.columnsHasKey(a)||(c=a,h=b),void 0):{retval:null}},this);if(g&&void 0!==g.retval)return g.retval;if(!a.approx(b.constant,0))throw new a.RequiredFailure;return h>0&&b.multiplyMe(-1),c},deltaEditConstant:function(b,c,d){a.trace&&a.fnenterprint(\"deltaEditConstant :\"+b+\", \"+c+\", \"+d);var e=this.rows.get(c);if(null!=e)return e.constant+=b,0>e.constant&&this._infeasibleRows.add(c),void 0;var f=this.rows.get(d);if(null!=f)return f.constant+=-b,0>f.constant&&this._infeasibleRows.add(d),void 0;var g=this.columns.get(d);g||console.log(\"columnVars is null -- tableau is:\\n\"+this),g.each(function(a){var c=this.rows.get(a),e=c.coefficientFor(d);c.constant+=e*b,a.isRestricted&&0>c.constant&&this._infeasibleRows.add(a)},this)},dualOptimize:function(){a.trace&&a.fnenterprint(\"dualOptimize:\");for(var b=this.rows.get(this._objective);this._infeasibleRows.size;){var c=this._infeasibleRows.values()[0];this._infeasibleRows.delete(c);var d=null,e=this.rows.get(c);if(e&&0>e.constant){var g,f=Number.MAX_VALUE,h=e.terms;if(h.each(function(c,e){if(e>0&&c.isPivotable){var h=b.coefficientFor(c);g=h/e,(f>g||a.approx(g,f)&&c.hashCodef.constant&&f.multiplyMe(-1),a.trace&&a.fnexitprint(\"returning \"+f),f},optimize:function(b){a.trace&&a.fnenterprint(\"optimize: \"+b),a.trace&&a.traceprint(\"\"+this),this._optimizeCount++;var c=this.rows.get(b);a.assert(null!=c,\"zRow != null\");for(var g,h,e=null,f=null;;){if(g=0,h=c.terms,h.escapingEach(function(a,b){return a.isPivotable&&g>b?(g=b,e=a,{brk:1}):void 0},this),g>=-d)return;a.trace&&console.log(\"entryVar:\",e,\"objectiveCoeff:\",g);var i=Number.MAX_VALUE,j=this.columns.get(e),k=0;if(j.each(function(b){if(a.trace&&a.traceprint(\"Checking \"+b),b.isPivotable){var c=this.rows.get(b),d=c.coefficientFor(e);a.trace&&a.traceprint(\"pivotable, coeff = \"+d),0>d&&(k=-c.constant/d,(i>k||a.approx(k,i)&&b.hashCodeb;b++){var c=this.rows.get(this._stayPlusErrorVars[b]);null==c&&(c=this.rows.get(this._stayMinusErrorVars[b])),null!=c&&(c.constant=0)}},_setExternalVariables:function(){a.trace&&a.fnenterprint(\"_setExternalVariables:\"),a.trace&&a.traceprint(\"\"+this),this._externalParametricVars.each(function(b){null!=this.rows.get(b)?a.trace&&console.log(\"Error: variable\"+b+\" in _externalParametricVars is basic\"):b.value=0},this),this._externalRows.each(function(a){var b=this.rows.get(a);a.value!=b.constant&&(a.value=b.constant)},this),this._fNeedsSolving=!1,this.onsolved()},onsolved:function(){},insertErrorVar:function(b,c){a.trace&&a.fnenterprint(\"insertErrorVar:\"+b+\", \"+c);var d=this._errorVars.get(c);d||(d=new a.HashSet,this._errorVars.set(b,d)),d.add(c)}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Timer=a.inherit({initialize:function(){this.isRunning=!1,this._elapsedMs=0},start:function(){return this.isRunning=!0,this._startReading=new Date,this},stop:function(){return this.isRunning=!1,this._elapsedMs+=new Date-this._startReading,this},reset:function(){return this.isRunning=!1,this._elapsedMs=0,this},elapsedTime:function(){return this.isRunning?(this._elapsedMs+(new Date-this._startReading))/1e3:this._elapsedMs/1e3}})}(this.c||module.parent.exports||{}),__cassowary_parser=function(){function a(a){return'\"'+a.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\x08/g,\"\\\\b\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\f/g,\"\\\\f\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x07\\x0B\\x0E-\\x1F\\x80-\\uFFFF]/g,escape)+'\"'}var b={parse:function(b,c){function k(a){g>e||(e>g&&(g=e,h=[]),h.push(a))}function l(){var a,b,c,d,f;if(d=e,f=e,a=z(),null!==a){if(c=m(),null!==c)for(b=[];null!==c;)b.push(c),c=m();else b=null;null!==b?(c=z(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)}else a=null,e=f;return null!==a&&(a=function(a,b){return b}(d,a[1])),null===a&&(e=d),a}function m(){var a,b,c,d;return c=e,d=e,a=P(),null!==a?(b=s(),null!==b?a=[a,b]:(a=null,e=d)):(a=null,e=d),null!==a&&(a=function(a,b){return b}(c,a[0])),null===a&&(e=c),a}function n(){var a;return b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k(\"any character\")),a}function o(){var a;return/^[a-zA-Z]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[a-zA-Z]\")),null===a&&(36===b.charCodeAt(e)?(a=\"$\",e++):(a=null,0===f&&k('\"$\"')),null===a&&(95===b.charCodeAt(e)?(a=\"_\",e++):(a=null,0===f&&k('\"_\"')))),a}function p(){var a;return f++,/^[\\t\\x0B\\f \\xA0\\uFEFF]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[\\\\t\\\\x0B\\\\f \\\\xA0\\\\uFEFF]\")),f--,0===f&&null===a&&k(\"whitespace\"),a}function q(){var a;return/^[\\n\\r\\u2028\\u2029]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[\\\\n\\\\r\\\\u2028\\\\u2029]\")),a}function r(){var a;return f++,10===b.charCodeAt(e)?(a=\"\\n\",e++):(a=null,0===f&&k('\"\\\\n\"')),null===a&&(\"\\r\\n\"===b.substr(e,2)?(a=\"\\r\\n\",e+=2):(a=null,0===f&&k('\"\\\\r\\\\n\"')),null===a&&(13===b.charCodeAt(e)?(a=\"\\r\",e++):(a=null,0===f&&k('\"\\\\r\"')),null===a&&(8232===b.charCodeAt(e)?(a=\"\\u2028\",e++):(a=null,0===f&&k('\"\\\\u2028\"')),null===a&&(8233===b.charCodeAt(e)?(a=\"\\u2029\",e++):(a=null,0===f&&k('\"\\\\u2029\"')))))),f--,0===f&&null===a&&k(\"end of line\"),a}function s(){var a,c,d;return d=e,a=z(),null!==a?(59===b.charCodeAt(e)?(c=\";\",e++):(c=null,0===f&&k('\";\"')),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=y(),null!==a?(c=r(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=z(),null!==a?(c=t(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d))),a}function t(){var a,c;return c=e,f++,b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k(\"any character\")),f--,null===a?a=\"\":(a=null,e=c),a}function u(){var a;return f++,a=v(),null===a&&(a=x()),f--,0===f&&null===a&&k(\"comment\"),a}function v(){var a,c,d,g,h,i,j;if(h=e,\"/*\"===b.substr(e,2)?(a=\"/*\",e+=2):(a=null,0===f&&k('\"/*\"')),null!==a){for(c=[],i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?(\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function w(){var a,c,d,g,h,i,j;if(h=e,\"/*\"===b.substr(e,2)?(a=\"/*\",e+=2):(a=null,0===f&&k('\"/*\"')),null!==a){for(c=[],i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null===d&&(d=q()),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null===d&&(d=q()),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?(\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function x(){var a,c,d,g,h,i,j;if(h=e,\"//\"===b.substr(e,2)?(a=\"//\",e+=2):(a=null,0===f&&k('\"//\"')),null!==a){for(c=[],i=e,j=e,f++,d=q(),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,d=q(),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?a=[a,c]:(a=null,e=h)}else a=null,e=h;return a}function y(){var a,b;for(a=[],b=p(),null===b&&(b=w(),null===b&&(b=x()));null!==b;)a.push(b),b=p(),null===b&&(b=w(),null===b&&(b=x()));return a}function z(){var a,b;for(a=[],b=p(),null===b&&(b=r(),null===b&&(b=u()));null!==b;)a.push(b),b=p(),null===b&&(b=r(),null===b&&(b=u()));return a}function A(){var a,b;return b=e,a=C(),null===a&&(a=B()),null!==a&&(a=function(a,b){return{type:\"NumericLiteral\",value:b}}(b,a)),null===a&&(e=b),a}function B(){var a,c,d;if(d=e,/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k(\"[0-9]\")),null!==c)for(a=[];null!==c;)a.push(c),/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k(\"[0-9]\"));else a=null;return null!==a&&(a=function(a,b){return parseInt(b.join(\"\"))}(d,a)),null===a&&(e=d),a}function C(){var a,c,d,g,h;return g=e,h=e,a=B(),null!==a?(46===b.charCodeAt(e)?(c=\".\",e++):(c=null,0===f&&k('\".\"')),null!==c?(d=B(),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)):(a=null,e=h),null!==a&&(a=function(a,b){return parseFloat(b.join(\"\"))}(g,a)),null===a&&(e=g),a}function D(){var a,c,d,g;if(g=e,/^[\\-+]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[\\\\-+]\")),a=null!==a?a:\"\",null!==a){if(/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k(\"[0-9]\")),null!==d)for(c=[];null!==d;)c.push(d),/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k(\"[0-9]\"));else c=null;null!==c?a=[a,c]:(a=null,e=g)}else a=null,e=g;return a}function E(){var a,b;return f++,b=e,a=F(),null!==a&&(a=function(a,b){return b}(b,a)),null===a&&(e=b),f--,0===f&&null===a&&k(\"identifier\"),a}function F(){var a,b,c,d,g;if(f++,d=e,g=e,a=o(),null!==a){for(b=[],c=o();null!==c;)b.push(c),c=o();null!==b?a=[a,b]:(a=null,e=g)}else a=null,e=g;return null!==a&&(a=function(a,b,c){return b+c.join(\"\")}(d,a[0],a[1])),null===a&&(e=d),f--,0===f&&null===a&&k(\"identifier\"),a}function G(){var a,c,d,g,h,i,j;return i=e,a=E(),null!==a&&(a=function(a,b){return{type:\"Variable\",name:b}}(i,a)),null===a&&(e=i),null===a&&(a=A(),null===a&&(i=e,j=e,40===b.charCodeAt(e)?(a=\"(\",e++):(a=null,0===f&&k('\"(\"')),null!==a?(c=z(),null!==c?(d=P(),null!==d?(g=z(),null!==g?(41===b.charCodeAt(e)?(h=\")\",e++):(h=null,0===f&&k('\")\"')),null!==h?a=[a,c,d,g,h]:(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j),null!==a&&(a=function(a,b){return b}(i,a[2])),null===a&&(e=i))),a}function H(){var a,b,c,d,f;return a=G(),null===a&&(d=e,f=e,a=I(),null!==a?(b=z(),null!==b?(c=H(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)):(a=null,e=f),null!==a&&(a=function(a,b,c){return{type:\"UnaryExpression\",operator:b,expression:c}}(d,a[0],a[2])),null===a&&(e=d)),a}function I(){var a;return 43===b.charCodeAt(e)?(a=\"+\",e++):(a=null,0===f&&k('\"+\"')),null===a&&(45===b.charCodeAt(e)?(a=\"-\",e++):(a=null,0===f&&k('\"-\"')),null===a&&(33===b.charCodeAt(e)?(a=\"!\",e++):(a=null,0===f&&k('\"!\"')))),a}function J(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=H(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"MultiplicativeExpression\",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function K(){var a;return 42===b.charCodeAt(e)?(a=\"*\",e++):(a=null,0===f&&k('\"*\"')),null===a&&(47===b.charCodeAt(e)?(a=\"/\",e++):(a=null,0===f&&k('\"/\"'))),a}function L(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=J(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"AdditiveExpression\",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function M(){var a;return 43===b.charCodeAt(e)?(a=\"+\",e++):(a=null,0===f&&k('\"+\"')),null===a&&(45===b.charCodeAt(e)?(a=\"-\",e++):(a=null,0===f&&k('\"-\"'))),a}function N(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=L(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"Inequality\",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function O(){var a;return\"<=\"===b.substr(e,2)?(a=\"<=\",e+=2):(a=null,0===f&&k('\"<=\"')),null===a&&(\">=\"===b.substr(e,2)?(a=\">=\",e+=2):(a=null,0===f&&k('\">=\"')),null===a&&(60===b.charCodeAt(e)?(a=\"<\",e++):(a=null,0===f&&k('\"<\"')),null===a&&(62===b.charCodeAt(e)?(a=\">\",e++):(a=null,0===f&&k('\">\"'))))),a}function P(){var a,c,d,g,h,i,j,l,m;if(j=e,l=e,a=N(),null!==a){for(c=[],m=e,d=z(),null!==d?(\"==\"===b.substr(e,2)?(g=\"==\",e+=2):(g=null,0===f&&k('\"==\"')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==d;)c.push(d),m=e,d=z(),null!==d?(\"==\"===b.substr(e,2)?(g=\"==\",e+=2):(g=null,0===f&&k('\"==\"')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==c?a=[a,c]:(a=null,e=l)}else a=null,e=l;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"Equality\",operator:c[e][1],left:d,right:c[e][3]};return d}(j,a[0],a[1])),null===a&&(e=j),a}function Q(a){a.sort();for(var b=null,c=[],d=0;a.length>d;d++)a[d]!==b&&(c.push(a[d]),b=a[d]);return c}function R(){for(var a=1,c=1,d=!1,f=0;Math.max(e,g)>f;f++){var h=b.charAt(f);\"\\n\"===h?(d||a++,c=1,d=!1):\"\\r\"===h||\"\\u2028\"===h||\"\\u2029\"===h?(a++,c=1,d=!0):(c++,d=!1)}return{line:a,column:c}}var d={start:l,Statement:m,SourceCharacter:n,IdentifierStart:o,WhiteSpace:p,LineTerminator:q,LineTerminatorSequence:r,EOS:s,EOF:t,Comment:u,MultiLineComment:v,MultiLineCommentNoLineTerminator:w,SingleLineComment:x,_:y,__:z,Literal:A,Integer:B,Real:C,SignedInteger:D,Identifier:E,IdentifierName:F,PrimaryExpression:G,UnaryExpression:H,UnaryOperator:I,MultiplicativeExpression:J,MultiplicativeOperator:K,AdditiveExpression:L,AdditiveOperator:M,InequalityExpression:N,InequalityOperator:O,LinearExpression:P};if(void 0!==c){if(void 0===d[c])throw Error(\"Invalid rule name: \"+a(c)+\".\")}else c=\"start\";var e=0,f=0,g=0,h=[],S=d[c]();if(null===S||e!==b.length){var T=Math.max(e,g),U=b.length>T?b.charAt(T):null,V=R();throw new this.SyntaxError(Q(h),U,T,V.line,V.column)}return S},toSource:function(){return this._source}};return b.SyntaxError=function(b,c,d,e,f){function g(b,c){var d,e;switch(b.length){case 0:d=\"end of input\";break;case 1:d=b[0];break;default:d=b.slice(0,b.length-1).join(\", \")+\" or \"+b[b.length-1]}return e=c?a(c):\"end of input\",\"Expected \"+d+\" but \"+e+\" found.\"}this.name=\"SyntaxError\",this.expected=b,this.found=c,this.message=g(b,c),this.offset=d,this.line=e,this.column=f},b.SyntaxError.prototype=Error.prototype,b}();\n}).call(\n (typeof module != \"undefined\") ?\n (module.compiled = true && module) : this\n);\n"]} \ No newline at end of file +{"version":3,"sources":["../node_modules/browserify/node_modules/browser-pack/_prelude.js","../_stream_0.js","../node_modules/cassowary/bin/c.js"],"names":["_processEqualSpacer","context","stackView","equalSpacerIndex","name","lineIndex","constraints","push","view1","attr1","horizontal","Attribute","WIDTH","HEIGHT","relation","Relation","EQU","view2","attr2","priority","view","multiplier","undefined","constant","CONST","orientation","Orientation","HORIZONTAL","RIGHT","LEFT","VERTICAL","BOTTOM","TOP","ZINDEX","_processProportionalSpacer","proportionalSpacerIndex","_processStackView","subView","viewName","orientations","stack","processedOrientations","type","i","j","subViews","length","_processCascade","cascade","parentItem","item","Array","isArray","hasOwnProperty","equalSpacing","n","attribute","variable","VARIABLE","err","Error","column","$parserOffset","_getConst","value","vr","c","Variable","this","_solver","addConstraint","StayConstraint","Strength","required","_getSubView","_subViews","SubView","solver","_type","_parentSubView","_getSpacing","constraint","index","_spacingVars","_spacingExpr","addEditVar","minus","suggestValue","_spacing","_addConstraint","call","strength","_getAttr","plus","times","defaultPriorityStrength","Equation","GEQ","Inequality","LEQ","_compareSpacing","old","newz","require","NOTANATTRIBUTE","CENTERX","CENTERY","Priority","REQUIRED","DEFAULTHIGH","DEFAULTLOW","parser","peg$subclass","child","parent","ctor","constructor","prototype","SyntaxError","message","expected","found","offset","line","parse","input","peg$reportedPos","peg$computePosDetails","pos","advance","details","startPos","endPos","p","ch","charAt","seenCR","peg$cachedPos","peg$cachedPosDetails","peg$fail","peg$maxFailPos","peg$currPos","peg$maxFailExpected","peg$buildException","cleanupExpected","sort","a","b","description","splice","buildMessage","stringEscape","s","hex","charCodeAt","toString","toUpperCase","replace","expectedDesc","foundDesc","expectedDescs","slice","join","posDetails","peg$parsevisualFormatString","s0","s1","s2","s3","s4","s5","s6","s7","peg$parseorientation","peg$FAILED","peg$c2","peg$silentFails","peg$c3","peg$c0","peg$c1","peg$parsesuperview","peg$parseconnection","peg$parseview","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$parseviewName","peg$parsepredicateListWithParens","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$parsepredicateList","peg$c21","peg$c22","peg$c23","peg$c24","peg$parsesimplePredicate","peg$parsenumber","peg$c25","peg$c26","peg$c27","peg$parsepredicate","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$parserelation","peg$parseobjectOfPredicate","peg$c33","peg$c34","peg$parsepriority","peg$c35","substr","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$parseconstant","peg$c45","test","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","substring","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","extend","dst","arguments","k","peg$result","options","peg$startRuleFunctions","visualFormatString","peg$startRuleFunction","o","superto","views","tosuper","concat","apply","orient","predicates","predicateList","ps","map","r","digits","parseInt","f","v","decimals","parseFloat","startRule","parserExt","peg$parsecomments","peg$parsecascadedViews","peg$parseequalSpacingPredicateList","peg$parsepercentage","peg$parseequalSpacingPredicate","peg$c58","peg$c59","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","peg$parseviewPredicate","peg$c66","peg$c67","peg$c68","peg$c69","peg$c70","peg$c71","peg$c72","peg$parseattribute","peg$parsemultiplier","peg$parseconstantExpr","peg$c73","peg$c74","peg$c75","peg$c76","peg$c77","peg$c78","peg$c79","peg$c80","peg$c81","peg$c82","peg$c83","peg$c84","peg$c85","peg$c86","peg$c87","peg$c88","peg$c89","peg$c90","peg$c91","peg$c92","peg$c93","peg$c94","peg$c95","peg$c96","peg$c97","peg$c98","peg$c99","peg$c100","peg$c101","peg$c102","peg$c103","peg$c104","peg$c105","peg$c106","peg$c107","peg$c108","peg$c109","peg$c110","peg$c111","peg$c112","peg$c113","peg$c114","peg$c115","comments","cascadedViews","connection","vn","m","metaInfoCategories","VisualFormat","visualFormat","extended","indexOf","res","outFormat","lineSeperator","parseLine","source","lines","parseOptions","strict","split","trim","prefix","key","metaInfo","category","prefixedCategory","items","viewport","aspectRatio","height","width","widths","isNaN","heights","spacing","JSON","_name","_attr","left","top","stringify","toJSON","attr","divide","_getAttrValue","_intrinsicWidth","resolve","_intrinsicHeight","View","SimplexSolver","setSpacing","setSize","addConstraints","intrinsicWidth","intrinsicHeight","AutoLayout","module","exports","bind","Object","defineProperty","Function","enumerable","configurable","writable","HTMLElement","d","tagName","e","g","__super__","h","debug","trace","verbose","traceAdded","GC","inherit","initialize","_t","create","l","__proto__","created","decorate","upgrade","document","createElement","own","getOwnPropertyDescriptor","get","set","getOwnPropertyNames","forEach","traceprint","console","log","fnenterprint","fnexitprint","assert","InternalError","Expression","approx","Math","abs","_inc","parseJSON","load","hashCode","keys","HashTable","size","_store","_keyStrMap","_deleted","clear","_compact","_compactThreshold","_perhapsCompact","_size","delete","each","escapingEach","retval","brk","clone","equals","HashSet","storage","add","values","has","data","fromJSON","_description",{"end":{"file":"?","comments_before":[],"nlb":false,"endpos":6565,"endcol":6125,"endline":16,"pos":6554,"col":6114,"line":16,"value":"description","type":"name"},"start":{"file":"?","comments_before":[],"nlb":false,"endpos":6565,"endcol":6125,"endline":16,"pos":6554,"col":6114,"line":16,"value":"description","type":"name"},"name":"description"},"extends","ConstraintNotFound","NonExpression","NotEnoughStays","RequiredFailure","TooDifficult","SymbolicWeight","symbolicWeight","isRequired","strong","medium","weak","AbstractVariable","isDummy","isExternal","isPivotable","isRestricted","_init","_prefix","_map","DummyVariable","ObjectiveVariable","SlackVariable","Point","_x","_y","x","y","terms","setVariable","initializeFromHash","multiplyMe","isConstant","addExpression","addVariable","noteRemovedVariable","noteAddedVariable","anyPivotableVariable","substituteOut","changeSubject","newSubject","coefficientFor","Plus","Minus","Times","Divide","AbstractConstraint","weight","isEditConstraint","isInequality","isStayConstraint","expression","EditConstraint","Constraint","_cloneOrNewCle","q","t","EditInfo","editPlus","editMinus","prevEditConstant","Tableau","columns","rows","_infeasibleRows","_externalRows","_externalParametricVars","insertColVar","getInternalInfo","addRow","removeColumn","removeRow","columnsHasKey","_stayMinusErrorVars","_stayPlusErrorVars","_errorVars","_markerVars","_objective","_editVarMap","_editVarList","_slackCounter","_artificialCounter","_dummyCounter","autoSolve","_fNeedsSolving","_optimizeCount","_stkCedcns","addLowerBound","addUpperBound","addBounds","newExpression","tryAddingDirectly","addWithArtificialVariable","warn","info","optimize","_setExternalVariables","addConstraintNoException","beginEdit","_resetStayConstants","endEdit","pop","removeEditVarsTo","removeAllEditVars","removeConstraint","addPointStays","addStay","pow","removeConstraintInternal","pivot","reset","resolveArray","resolvePair","dualOptimize","deltaEditConstant","solve","setEditedValue","addVar","getDebugInfo","getConstraintMap","chooseSubject","Number","MAX_VALUE","insertErrorVar","time","timeEnd","onsolved","Timer","isRunning","_elapsedMs","start","_startReading","Date","stop","elapsedTime","__cassowary_parser","escape","z","P","u","w","A","C","B","D","E","F","G","H","I","operator","J","K","right","L","M","N","O","Q","R","max","Statement","SourceCharacter","IdentifierStart","WhiteSpace","LineTerminator","LineTerminatorSequence","EOS","EOF","Comment","MultiLineComment","MultiLineCommentNoLineTerminator","SingleLineComment","_","__","Literal","Integer","Real","SignedInteger","Identifier","IdentifierName","PrimaryExpression","UnaryExpression","UnaryOperator","MultiplicativeExpression","MultiplicativeOperator","AdditiveExpression","AdditiveOperator","InequalityExpression","InequalityOperator","LinearExpression","S","T","U","V","toSource","_source","compiled"],"mappings":"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","file":"bundle.js","sourcesContent":["(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 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { visualFormatString: peg$parsevisualFormatString },\n peg$startRuleFunction = peg$parsevisualFormatString,\n\n peg$c0 = peg$FAILED,\n peg$c1 = null,\n peg$c2 = \":\",\n peg$c3 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c4 = [],\n peg$c5 = function(o, superto, view, views, tosuper) { return {\n orientation: o ? o[0] : 'horizontal',\n cascade: (superto || []).concat(\n [view],\n [].concat.apply([], views),\n (tosuper || [])\n )\n }\n },\n peg$c6 = \"H\",\n peg$c7 = { type: \"literal\", value: \"H\", description: \"\\\"H\\\"\" },\n peg$c8 = \"V\",\n peg$c9 = { type: \"literal\", value: \"V\", description: \"\\\"V\\\"\" },\n peg$c10 = function(orient) { return orient == 'H' ? 'horizontal' : 'vertical' },\n peg$c11 = \"|\",\n peg$c12 = { type: \"literal\", value: \"|\", description: \"\\\"|\\\"\" },\n peg$c13 = function() { return { view: null } },\n peg$c14 = \"[\",\n peg$c15 = { type: \"literal\", value: \"[\", description: \"\\\"[\\\"\" },\n peg$c16 = \"]\",\n peg$c17 = { type: \"literal\", value: \"]\", description: \"\\\"]\\\"\" },\n peg$c18 = function(view, predicates) { return extend(view, predicates ? { constraints: predicates } : {}) },\n peg$c19 = \"-\",\n peg$c20 = { type: \"literal\", value: \"-\", description: \"\\\"-\\\"\" },\n peg$c21 = function(predicateList) { return predicateList },\n peg$c22 = function() { return [{ relation: 'equ', constant: 'default', $parserOffset: offset() }] },\n peg$c23 = \"\",\n peg$c24 = function() { return [{ relation: 'equ', constant: 0, $parserOffset: offset() }] },\n peg$c25 = function(n) { return [{ relation: 'equ', constant: n, $parserOffset: offset() }] },\n peg$c26 = \"(\",\n peg$c27 = { type: \"literal\", value: \"(\", description: \"\\\"(\\\"\" },\n peg$c28 = \",\",\n peg$c29 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c30 = \")\",\n peg$c31 = { type: \"literal\", value: \")\", description: \"\\\")\\\"\" },\n peg$c32 = function(p, ps) { return [p].concat(ps.map(function(p){ return p[1] })) },\n peg$c33 = \"@\",\n peg$c34 = { type: \"literal\", value: \"@\", description: \"\\\"@\\\"\" },\n peg$c35 = function(r, o, p) { return extend({ relation: 'equ' }, (r || {}), o, (p ? p[1]: {})) },\n peg$c36 = \"==\",\n peg$c37 = { type: \"literal\", value: \"==\", description: \"\\\"==\\\"\" },\n peg$c38 = function() { return { relation: 'equ', $parserOffset: offset() } },\n peg$c39 = \"<=\",\n peg$c40 = { type: \"literal\", value: \"<=\", description: \"\\\"<=\\\"\" },\n peg$c41 = function() { return { relation: 'leq', $parserOffset: offset() } },\n peg$c42 = \">=\",\n peg$c43 = { type: \"literal\", value: \">=\", description: \"\\\">=\\\"\" },\n peg$c44 = function() { return { relation: 'geq', $parserOffset: offset() } },\n peg$c45 = /^[0-9]/,\n peg$c46 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c47 = function(digits) { return { priority: parseInt(digits.join(\"\"), 10) } },\n peg$c48 = function(n) { return { constant: n } },\n peg$c49 = /^[a-zA-Z_]/,\n peg$c50 = { type: \"class\", value: \"[a-zA-Z_]\", description: \"[a-zA-Z_]\" },\n peg$c51 = /^[a-zA-Z0-9_]/,\n peg$c52 = { type: \"class\", value: \"[a-zA-Z0-9_]\", description: \"[a-zA-Z0-9_]\" },\n peg$c53 = function(f, v) { return { view: f + v } },\n peg$c54 = \".\",\n peg$c55 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n peg$c56 = function(digits, decimals) { return parseFloat(digits.concat(\".\").concat(decimals).join(\"\"), 10); },\n peg$c57 = function(digits) { return parseInt(digits.join(\"\"), 10); },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsevisualFormatString() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseorientation();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c2;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$c0;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c0;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parsesuperview();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseconnection();\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c0;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c0;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseview();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsesuperview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n if (s5 === peg$FAILED) {\n s5 = peg$c1;\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c5(s1, s2, s3, s4, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseorientation() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 72) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 86) {\n s1 = peg$c8;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c10(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsesuperview() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 124) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c12); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseview() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseviewName();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsepredicateListWithParens();\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s4 = peg$c16;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c18(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseconnection() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c19;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicateList();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s3 = peg$c19;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c21(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c19;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c22();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$c23;\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24();\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parsepredicateList() {\n var s0;\n\n s0 = peg$parsesimplePredicate();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepredicateListWithParens();\n }\n\n return s0;\n }\n\n function peg$parsesimplePredicate() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsepredicateListWithParens() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c26;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c27); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicate();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c28;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c28;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s4 = peg$c30;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c32(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsepredicate() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parserelation();\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseobjectOfPredicate();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 64) {\n s4 = peg$c33;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c34); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepriority();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c35(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parserelation() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c36) {\n s1 = peg$c36;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c37); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c38();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c39) {\n s1 = peg$c39;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c41();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c42) {\n s1 = peg$c42;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c44();\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseobjectOfPredicate() {\n var s0;\n\n s0 = peg$parseconstant();\n if (s0 === peg$FAILED) {\n s0 = peg$parseviewName();\n }\n\n return s0;\n }\n\n function peg$parsepriority() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c47(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseconstant() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c48(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseviewName() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (peg$c49.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c50); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c49.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c50); }\n }\n }\n } else {\n s2 = peg$c0;\n }\n if (s2 !== peg$FAILED) {\n s2 = input.substring(s1, peg$currPos);\n }\n s1 = s2;\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n if (peg$c51.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c51.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n }\n if (s3 !== peg$FAILED) {\n s3 = input.substring(s2, peg$currPos);\n }\n s2 = s3;\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c53(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c54;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c55); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n }\n } else {\n s3 = peg$c0;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c56(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c57(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n\n function extend(dst) {\n for (var i = 1; i < arguments.length; i++) {\n for (var k in arguments[i]) {\n dst[k] = arguments[i][k];\n }\n }\n return dst;\n }\n\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n})();\n\nvar parserExt = (function() {\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { visualFormatString: peg$parsevisualFormatString },\n peg$startRuleFunction = peg$parsevisualFormatString,\n\n peg$c0 = peg$FAILED,\n peg$c1 = null,\n peg$c2 = \":\",\n peg$c3 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c4 = [],\n peg$c5 = function(o, superto, view, views, tosuper, comments) { return {\n orientation: o ? o[0] : 'horizontal',\n cascade: (superto || []).concat(\n [view],\n [].concat.apply([], views),\n (tosuper || [])\n )\n }\n },\n peg$c6 = \"HV\",\n peg$c7 = { type: \"literal\", value: \"HV\", description: \"\\\"HV\\\"\" },\n peg$c8 = function() { return 'horzvert' },\n peg$c9 = \"H\",\n peg$c10 = { type: \"literal\", value: \"H\", description: \"\\\"H\\\"\" },\n peg$c11 = function() { return 'horizontal' },\n peg$c12 = \"V\",\n peg$c13 = { type: \"literal\", value: \"V\", description: \"\\\"V\\\"\" },\n peg$c14 = function() { return 'vertical' },\n peg$c15 = \"Z\",\n peg$c16 = { type: \"literal\", value: \"Z\", description: \"\\\"Z\\\"\" },\n peg$c17 = function() { return 'zIndex' },\n peg$c18 = \" \",\n peg$c19 = { type: \"literal\", value: \" \", description: \"\\\" \\\"\" },\n peg$c20 = \"//\",\n peg$c21 = { type: \"literal\", value: \"//\", description: \"\\\"//\\\"\" },\n peg$c22 = { type: \"any\", description: \"any character\" },\n peg$c23 = \"|\",\n peg$c24 = { type: \"literal\", value: \"|\", description: \"\\\"|\\\"\" },\n peg$c25 = function() { return { view: null } },\n peg$c26 = \"[\",\n peg$c27 = { type: \"literal\", value: \"[\", description: \"\\\"[\\\"\" },\n peg$c28 = \"]\",\n peg$c29 = { type: \"literal\", value: \"]\", description: \"\\\"]\\\"\" },\n peg$c30 = function(view, predicates, cascadedViews) { return extend(extend(view, predicates ? { constraints: predicates } : {}), cascadedViews ? {\n cascade: cascadedViews\n } : {}) },\n peg$c31 = function(views, connection) { return [].concat([].concat.apply([], views),[connection]); },\n peg$c32 = \"->\",\n peg$c33 = { type: \"literal\", value: \"->\", description: \"\\\"->\\\"\" },\n peg$c34 = function() { return [{ relation: 'none' }] },\n peg$c35 = \"-\",\n peg$c36 = { type: \"literal\", value: \"-\", description: \"\\\"-\\\"\" },\n peg$c37 = function(predicateList) { return predicateList },\n peg$c38 = function() { return [{ relation: 'equ', constant: 'default' }] },\n peg$c39 = \"~\",\n peg$c40 = { type: \"literal\", value: \"~\", description: \"\\\"~\\\"\" },\n peg$c41 = function() { return [{ relation: 'equ', equalSpacing: true }] },\n peg$c42 = \"\",\n peg$c43 = function() { return [{ relation: 'equ', constant: 0 }] },\n peg$c44 = function(p) { return [{ relation: 'equ', multiplier: p.multiplier }] },\n peg$c45 = function(n) { return [{ relation: 'equ', constant: n }] },\n peg$c46 = \"(\",\n peg$c47 = { type: \"literal\", value: \"(\", description: \"\\\"(\\\"\" },\n peg$c48 = \",\",\n peg$c49 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c50 = \")\",\n peg$c51 = { type: \"literal\", value: \")\", description: \"\\\")\\\"\" },\n peg$c52 = function(p, ps) { return [p].concat(ps.map(function(p){ return p[1] })) },\n peg$c53 = \"@\",\n peg$c54 = { type: \"literal\", value: \"@\", description: \"\\\"@\\\"\" },\n peg$c55 = function(r, o, p) { return extend({ relation: 'equ' }, (r || {}), o, (p ? p[1]: {})) },\n peg$c56 = function(r, o, p) { return extend({ relation: 'equ', equalSpacing: true }, (r || {}), o, (p ? p[1]: {})) },\n peg$c57 = \"==\",\n peg$c58 = { type: \"literal\", value: \"==\", description: \"\\\"==\\\"\" },\n peg$c59 = function() { return { relation: 'equ' } },\n peg$c60 = \"<=\",\n peg$c61 = { type: \"literal\", value: \"<=\", description: \"\\\"<=\\\"\" },\n peg$c62 = function() { return { relation: 'leq' } },\n peg$c63 = \">=\",\n peg$c64 = { type: \"literal\", value: \">=\", description: \"\\\">=\\\"\" },\n peg$c65 = function() { return { relation: 'geq' } },\n peg$c66 = /^[0-9]/,\n peg$c67 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c68 = function(digits) { return { priority: parseInt(digits.join(\"\"), 10) } },\n peg$c69 = function(n) { return { constant: n } },\n peg$c70 = \"%\",\n peg$c71 = { type: \"literal\", value: \"%\", description: \"\\\"%\\\"\" },\n peg$c72 = function(n) { return { view: null, multiplier: n / 100 } },\n peg$c73 = function(vn, a, m, c) { return { view: vn.view, attribute: a ? a : undefined, multiplier: m ? m : 1, constant: c ? c : undefined } },\n peg$c74 = \".left\",\n peg$c75 = { type: \"literal\", value: \".left\", description: \"\\\".left\\\"\" },\n peg$c76 = function() { return 'left'},\n peg$c77 = \".right\",\n peg$c78 = { type: \"literal\", value: \".right\", description: \"\\\".right\\\"\" },\n peg$c79 = function() { return 'right'},\n peg$c80 = \".top\",\n peg$c81 = { type: \"literal\", value: \".top\", description: \"\\\".top\\\"\" },\n peg$c82 = function() { return 'top'},\n peg$c83 = \".bottom\",\n peg$c84 = { type: \"literal\", value: \".bottom\", description: \"\\\".bottom\\\"\" },\n peg$c85 = function() { return 'bottom'},\n peg$c86 = \".width\",\n peg$c87 = { type: \"literal\", value: \".width\", description: \"\\\".width\\\"\" },\n peg$c88 = function() { return 'width'},\n peg$c89 = \".height\",\n peg$c90 = { type: \"literal\", value: \".height\", description: \"\\\".height\\\"\" },\n peg$c91 = function() { return 'height'},\n peg$c92 = \".centerX\",\n peg$c93 = { type: \"literal\", value: \".centerX\", description: \"\\\".centerX\\\"\" },\n peg$c94 = function() { return 'centerX'},\n peg$c95 = \".centerY\",\n peg$c96 = { type: \"literal\", value: \".centerY\", description: \"\\\".centerY\\\"\" },\n peg$c97 = function() { return 'centerY'},\n peg$c98 = \"/\",\n peg$c99 = { type: \"literal\", value: \"/\", description: \"\\\"/\\\"\" },\n peg$c100 = function(n) { return 1 / n; },\n peg$c101 = \"*\",\n peg$c102 = { type: \"literal\", value: \"*\", description: \"\\\"*\\\"\" },\n peg$c103 = function(n) { return n; },\n peg$c104 = function(n) { return -n; },\n peg$c105 = \"+\",\n peg$c106 = { type: \"literal\", value: \"+\", description: \"\\\"+\\\"\" },\n peg$c107 = /^[a-zA-Z_]/,\n peg$c108 = { type: \"class\", value: \"[a-zA-Z_]\", description: \"[a-zA-Z_]\" },\n peg$c109 = /^[a-zA-Z0-9_]/,\n peg$c110 = { type: \"class\", value: \"[a-zA-Z0-9_]\", description: \"[a-zA-Z0-9_]\" },\n peg$c111 = function(f, v) { return { view: f + v, $parserOffset: offset() } },\n peg$c112 = \".\",\n peg$c113 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n peg$c114 = function(digits, decimals) { return parseFloat(digits.concat(\".\").concat(decimals).join(\"\"), 10); },\n peg$c115 = function(digits) { return parseInt(digits.join(\"\"), 10); },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsevisualFormatString() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseorientation();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c2;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$c0;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c0;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parsesuperview();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseconnection();\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c0;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c0;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseview();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n s6 = peg$parseconnection();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsesuperview();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c0;\n }\n if (s5 === peg$FAILED) {\n s5 = peg$c1;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecomments();\n if (s6 === peg$FAILED) {\n s6 = peg$c1;\n }\n if (s6 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c5(s1, s2, s3, s4, s5, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseorientation() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s1 = peg$c6;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c8();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 72) {\n s1 = peg$c9;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c11();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 86) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c13); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c14();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 90) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c16); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c17();\n }\n s0 = s1;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsecomments() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 32) {\n s2 = peg$c18;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 32) {\n s2 = peg$c18;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c20) {\n s2 = peg$c20;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c22); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c22); }\n }\n }\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsesuperview() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 124) {\n s1 = peg$c23;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c24); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseview() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c26;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c27); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseviewName();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsepredicateListWithParens();\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsecascadedViews();\n if (s4 === peg$FAILED) {\n s4 = peg$c1;\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c28;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c30(s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsecascadedViews() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 58) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parseconnection();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseview();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parseconnection();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseview();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n }\n } else {\n s2 = peg$c0;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseconnection();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c31(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseconnection() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c32) {\n s1 = peg$c32;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c34();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicateList();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s3 = peg$c35;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c37(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c38();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 126) {\n s1 = peg$c39;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseequalSpacingPredicateList();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 126) {\n s3 = peg$c39;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c37(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 126) {\n s1 = peg$c39;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c41();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$c42;\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c43();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsepredicateList() {\n var s0;\n\n s0 = peg$parsesimplePredicate();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepredicateListWithParens();\n }\n\n return s0;\n }\n\n function peg$parsesimplePredicate() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsepercentage();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c44(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c45(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsepredicateListWithParens() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c46;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c47); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicate();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c48;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c48;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s4 = peg$c50;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c51); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c52(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsepredicate() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parserelation();\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseobjectOfPredicate();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 64) {\n s4 = peg$c53;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c54); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepriority();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c55(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseequalSpacingPredicateList() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c46;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c47); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseequalSpacingPredicate();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c48;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseequalSpacingPredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c48;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseequalSpacingPredicate();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c0;\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s4 = peg$c50;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c51); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c52(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseequalSpacingPredicate() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parserelation();\n if (s1 === peg$FAILED) {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseobjectOfPredicate();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 64) {\n s4 = peg$c53;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c54); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepriority();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c0;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c56(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parserelation() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c57) {\n s1 = peg$c57;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c59();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c60) {\n s1 = peg$c60;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c62();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c63) {\n s1 = peg$c63;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c64); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c65();\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseobjectOfPredicate() {\n var s0;\n\n s0 = peg$parsepercentage();\n if (s0 === peg$FAILED) {\n s0 = peg$parseconstant();\n if (s0 === peg$FAILED) {\n s0 = peg$parseviewPredicate();\n }\n }\n\n return s0;\n }\n\n function peg$parsepriority() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c68(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseconstant() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c69(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsepercentage() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s2 = peg$c70;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c71); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c72(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseviewPredicate() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parseviewName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseattribute();\n if (s2 === peg$FAILED) {\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemultiplier();\n if (s3 === peg$FAILED) {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseconstantExpr();\n if (s4 === peg$FAILED) {\n s4 = peg$c1;\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c73(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parseattribute() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c74) {\n s1 = peg$c74;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c75); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c76();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c77) {\n s1 = peg$c77;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c78); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c79();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c80) {\n s1 = peg$c80;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c81); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c82();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c83) {\n s1 = peg$c83;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c84); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c85();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c86) {\n s1 = peg$c86;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c87); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c88();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c89) {\n s1 = peg$c89;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c91();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 8) === peg$c92) {\n s1 = peg$c92;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c93); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c94();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 8) === peg$c95) {\n s1 = peg$c95;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c96); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c97();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsemultiplier() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c98;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c99); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c100(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 42) {\n s1 = peg$c101;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c102); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c103(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n }\n\n return s0;\n }\n\n function peg$parseconstantExpr() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c104(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c105;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c106); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c103(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n }\n\n return s0;\n }\n\n function peg$parseviewName() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (peg$c107.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c108); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c107.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c108); }\n }\n }\n } else {\n s2 = peg$c0;\n }\n if (s2 !== peg$FAILED) {\n s2 = input.substring(s1, peg$currPos);\n }\n s1 = s2;\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n if (peg$c109.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c110); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c109.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c110); }\n }\n }\n if (s3 !== peg$FAILED) {\n s3 = input.substring(s2, peg$currPos);\n }\n s2 = s3;\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c111(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c112;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c113); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s3 = peg$c0;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c114(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c0;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s1 = peg$c0;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c115(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n\n function extend(dst) {\n for (var i = 1; i < arguments.length; i++) {\n for (var k in arguments[i]) {\n dst[k] = arguments[i][k];\n }\n }\n return dst;\n }\n\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n})();\n\nconst Orientation = {\n HORIZONTAL: 1,\n VERTICAL: 2,\n ZINDEX: 4\n};\n\n/**\n * Helper function that inserts equal spacers (~).\n * @private\n */\nfunction _processEqualSpacer(context, stackView) {\n\n // Determine unique name for the spacer\n context.equalSpacerIndex = context.equalSpacerIndex || 1;\n const name = '_~' + context.lineIndex + ':' + context.equalSpacerIndex + '~';\n if (context.equalSpacerIndex > 1) {\n\n // Ensure that all spacers have the same width/height\n context.constraints.push({\n view1: '_~' + context.lineIndex + ':1~',\n attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n relation: context.relation.relation || Relation.EQU,\n view2: name,\n attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n priority: context.relation.priority\n });\n }\n context.equalSpacerIndex++;\n\n // Enforce view/proportional width/height\n if (context.relation.view || (context.relation.multiplier && (context.relation.multiplier !== 1))) {\n context.constraints.push({\n view1: name,\n attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n relation: context.relation.relation || Relation.EQU,\n view2: context.relation.view,\n attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n priority: context.relation.priority,\n multiplier: context.relation.multiplier\n });\n context.relation.multiplier = undefined;\n }\n else if (context.relation.constant) {\n context.constraints.push({\n view1: name,\n attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n relation: Relation.EQU,\n view2: null,\n attr2: Attribute.CONST,\n priority: context.relation.priority,\n constant: context.relation.constant\n });\n context.relation.constant = undefined;\n }\n\n // Add constraint\n switch (context.orientation) {\n case Orientation.HORIZONTAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.RIGHT : Attribute.LEFT;\n context.attr2 = Attribute.LEFT;\n break;\n case Orientation.VERTICAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.BOTTOM : Attribute.TOP;\n context.attr2 = Attribute.TOP;\n break;\n case Orientation.ZINDEX:\n context.attr1 = Attribute.ZINDEX;\n context.attr2 = Attribute.ZINDEX;\n context.relation.constant = (context.view1 !== stackView) ? 'default' : 0;\n break;\n }\n context.constraints.push({\n view1: context.view1,\n attr1: context.attr1,\n relation: context.relation.relation,\n view2: name,\n attr2: context.attr2,\n priority: context.relation.priority\n });\n context.view1 = name;\n}\n\n/**\n * Helper function that inserts proportional spacers (-12%-).\n * @private\n */\nfunction _processProportionalSpacer(context, stackView) {\n context.proportionalSpacerIndex = context.proportionalSpacerIndex || 1;\n const name = '_-' + context.lineIndex + ':' + context.proportionalSpacerIndex + '-';\n context.proportionalSpacerIndex++;\n context.constraints.push({\n view1: name,\n attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n relation: context.relation.relation || Relation.EQU,\n view2: context.relation.view, // or relative to the stackView... food for thought\n attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n priority: context.relation.priority,\n multiplier: context.relation.multiplier\n });\n context.relation.multiplier = undefined;\n\n // Add constraint\n switch (context.orientation) {\n case Orientation.HORIZONTAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.RIGHT : Attribute.LEFT;\n context.attr2 = Attribute.LEFT;\n break;\n case Orientation.VERTICAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.BOTTOM : Attribute.TOP;\n context.attr2 = Attribute.TOP;\n break;\n case Orientation.ZINDEX:\n context.attr1 = Attribute.ZINDEX;\n context.attr2 = Attribute.ZINDEX;\n context.relation.constant = (context.view1 !== stackView) ? 'default' : 0;\n break;\n }\n context.constraints.push({\n view1: context.view1,\n attr1: context.attr1,\n relation: context.relation.relation,\n view2: name,\n attr2: context.attr2,\n priority: context.relation.priority\n });\n context.view1 = name;\n}\n\n/**\n * In case of a stack-view, set constraints for opposite orientations\n * @private\n */\nfunction _processStackView(context, name, subView) {\n let viewName;\n for (var orientation = 1; orientation <= 4; orientation *= 2) {\n if ((subView.orientations & orientation) &&\n (subView.stack.orientation !== orientation) &&\n !(subView.stack.processedOrientations & orientation)) {\n subView.stack.processedOrientations = subView.stack.processedOrientations | orientation;\n viewName = viewName || {\n name: name,\n type: 'stack'\n };\n for (var i = 0, j = subView.stack.subViews.length; i < j; i++) {\n if (orientation === Orientation.ZINDEX) {\n context.constraints.push({\n view1: viewName,\n attr1: Attribute.ZINDEX,\n relation: Relation.EQU,\n view2: subView.stack.subViews[i],\n attr2: Attribute.ZINDEX\n });\n }\n else {\n context.constraints.push({\n view1: viewName,\n attr1: (orientation === Orientation.VERTICAL) ? Attribute.HEIGHT : Attribute.WIDTH,\n relation: Relation.EQU,\n view2: subView.stack.subViews[i],\n attr2: (orientation === Orientation.VERTICAL) ? Attribute.HEIGHT : Attribute.WIDTH\n });\n context.constraints.push({\n view1: viewName,\n attr1: (orientation === Orientation.VERTICAL) ? Attribute.TOP : Attribute.LEFT,\n relation: Relation.EQU,\n view2: subView.stack.subViews[i],\n attr2: (orientation === Orientation.VERTICAL) ? Attribute.TOP : Attribute.LEFT\n });\n }\n }\n }\n }\n}\n\n/**\n * Recursive helper function that processes the cascaded data.\n * @private\n */\nfunction _processCascade(context, cascade, parentItem) {\n const stackView = parentItem ? parentItem.view : null;\n const subViews = [];\n let subView;\n if (stackView) {\n cascade.push({view: stackView});\n }\n for (var i = 0; i < cascade.length; i++) {\n context.item = cascade[i];\n if (!Array.isArray(context.item) && context.item.hasOwnProperty('view')) {\n if (context.item.view !== stackView) {\n subViews.push(context.item.view);\n subView = context.subViews[context.item.view];\n if (!subView) {\n subView = {orientations: 0};\n context.subViews[context.item.view] = subView;\n }\n subView.orientations = subView.orientations | context.orientation;\n if (subView.stack) {\n _processStackView(context, context.item.view, subView);\n }\n }\n context.view1 = context.view2;\n context.view2 = context.item.view;\n if ((context.view1 !== undefined) && (context.view2 !== undefined) && context.relation) {\n if (context.relation.equalSpacing) {\n _processEqualSpacer(context, stackView);\n }\n if (context.relation.multiplier) {\n _processProportionalSpacer(context, stackView);\n }\n if (context.relation.relation !== 'none') {\n switch (context.orientation) {\n case Orientation.HORIZONTAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.RIGHT : Attribute.LEFT;\n context.attr2 = (context.view2 !== stackView) ? Attribute.LEFT : Attribute.RIGHT;\n break;\n case Orientation.VERTICAL:\n context.attr1 = (context.view1 !== stackView) ? Attribute.BOTTOM : Attribute.TOP;\n context.attr2 = (context.view2 !== stackView) ? Attribute.TOP : Attribute.BOTTOM;\n break;\n case Orientation.ZINDEX:\n context.attr1 = Attribute.ZINDEX;\n context.attr2 = Attribute.ZINDEX;\n context.relation.constant = (context.view1 !== stackView) ? 'default' : 0;\n break;\n }\n context.constraints.push({\n view1: context.view1,\n attr1: context.attr1,\n relation: context.relation.relation,\n view2: context.view2,\n attr2: context.attr2,\n multiplier: context.relation.multiplier,\n constant: ((context.relation.constant === 'default') || !context.relation.constant) ? context.relation.constant : -context.relation.constant,\n priority: context.relation.priority\n //,variable: context.relation.variable\n });\n }\n }\n context.relation = undefined;\n\n // process view size constraints\n if (context.item.constraints) {\n for (var n = 0; n < context.item.constraints.length; n++) {\n context.attr1 = context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT;\n context.attr2 = (context.item.constraints[n].view || context.item.constraints[n].multiplier) ?\n (context.item.constraints[n].attribute || context.attr1) :\n (context.item.constraints[n].variable ? Attribute.VARIABLE : Attribute.CONST);\n context.constraints.push({\n view1: context.item.view,\n attr1: context.attr1,\n relation: context.item.constraints[n].relation,\n view2: context.item.constraints[n].view,\n attr2: context.attr2,\n multiplier: context.item.constraints[n].multiplier,\n constant: context.item.constraints[n].constant,\n priority: context.item.constraints[n].priority\n //,variable: context.item.constraints[n].variable\n });\n }\n }\n\n // Process cascaded data (child stack-views)\n if (context.item.cascade) {\n _processCascade(context, context.item.cascade, context.item);\n }\n }\n else {\n context.relation = context.item[0];\n }\n }\n\n if (stackView) {\n subView = context.subViews[stackView];\n if (!subView) {\n subView = {orientations: context.orientation};\n context.subViews[stackView] = subView;\n }\n else if (subView.stack) {\n const err = new Error('A stack named \"' + stackView + '\" has already been created');\n err.column = parentItem.$parserOffset + 1;\n throw err;\n }\n subView.stack = {\n orientation: context.orientation,\n processedOrientations: context.orientation,\n subViews: subViews\n };\n _processStackView(context, stackView, subView);\n }\n}\n\nconst metaInfoCategories = [\n 'viewport',\n 'spacing',\n 'colors',\n 'shapes',\n 'widths',\n 'heights'\n];\n\n/**\n * VisualFormat\n *\n * @namespace VisualFormat\n */\nclass VisualFormat {\n\n /**\n * Parses a single line of vfl into an array of constraint definitions.\n *\n * When the visual-format could not be succesfully parsed an exception is thrown containing\n * additional info about the parse error and column position.\n *\n * @param {String} visualFormat Visual format string (cannot contain line-endings!).\n * @param {Object} [options] Configuration options.\n * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false).\n * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`).\n * @param {Number} [options.lineIndex] Line-index used when auto generating equal-spacing constraints.\n * @return {Array} Array of constraint definitions.\n */\n static parseLine(visualFormat, options) {\n if ((visualFormat.length === 0) ||\n (options && options.extended && (visualFormat.indexOf('//') === 0))) {\n return [];\n }\n const res = (options && options.extended) ? parserExt.parse(visualFormat) : parser.parse(visualFormat);\n if (options && options.outFormat === 'raw') {\n return [res];\n }\n var context = {\n constraints: [],\n lineIndex: (options ? options.lineIndex : undefined) || 1,\n subViews: (options ? options.subViews : undefined) || {}\n };\n switch (res.orientation) {\n case 'horizontal':\n context.orientation = Orientation.HORIZONTAL;\n context.horizontal = true;\n _processCascade(context, res.cascade, null);\n break;\n case 'vertical':\n context.orientation = Orientation.VERTICAL;\n _processCascade(context, res.cascade, null);\n break;\n case 'horzvert':\n context.orientation = Orientation.HORIZONTAL;\n context.horizontal = true;\n _processCascade(context, res.cascade, null);\n context = {\n constraints: context.constraints,\n lineIndex: context.lineIndex,\n subViews: context.subViews,\n orientation: Orientation.VERTICAL\n };\n _processCascade(context, res.cascade, null);\n break;\n case 'zIndex':\n context.orientation = Orientation.ZINDEX;\n _processCascade(context, res.cascade, null);\n break;\n }\n return context.constraints;\n }\n\n /**\n * Parses one or more visual format strings into an array of constraint definitions.\n *\n * When the visual-format could not be succesfully parsed an exception is thrown containing\n * additional info about the parse error and column position.\n *\n * @param {String|Array} visualFormat One or more visual format strings.\n * @param {Object} [options] Configuration options.\n * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false).\n * @param {Boolean} [options.strict] When set to false trims any leading/trailing spaces and ignores empty lines (default: true).\n * @param {String} [options.lineSeperator] String that defines the end of a line (default `\\n`).\n * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`).\n * @return {Array} Array of constraint definitions.\n */\n static parse(visualFormat, options) {\n const lineSeperator = (options && options.lineSeperator) ? options.lineSeperator : '\\n';\n if (!Array.isArray(visualFormat) && (visualFormat.indexOf(lineSeperator) < 0)) {\n try {\n return this.parseLine(visualFormat, options);\n }\n catch (err) {\n err.source = visualFormat;\n throw err;\n }\n }\n\n // Decompose visual-format into an array of strings, and within those strings\n // search for line-endings, and treat each line as a seperate visual-format.\n visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat];\n let lines;\n let constraints = [];\n let lineIndex = 0;\n let line;\n const parseOptions = {\n lineIndex: lineIndex,\n extended: (options && options.extended),\n strict: (options && (options.strict !== undefined)) ? options.strict : true,\n outFormat: options ? options.outFormat : undefined,\n subViews: {}\n };\n try {\n for (var i = 0; i < visualFormat.length; i++) {\n lines = visualFormat[i].split(lineSeperator);\n for (var j = 0; j < lines.length; j++) {\n line = lines[j];\n lineIndex++;\n parseOptions.lineIndex = lineIndex;\n if (!parseOptions.strict) {\n line = line.trim();\n }\n if (parseOptions.strict || line.length) {\n constraints = constraints.concat(this.parseLine(line, parseOptions));\n }\n }\n }\n }\n catch (err) {\n err.source = line;\n err.line = lineIndex;\n throw err;\n }\n return constraints;\n }\n\n /**\n * Parses meta information from the comments in the VFL.\n *\n * Additional meta information can be specified in the comments\n * for previewing and rendering purposes. For instance, the view-port\n * aspect-ratio, sub-view widths and colors, can be specified. The\n * following example renders three colored circles in the visual-format editor:\n *\n * ```vfl\n * //viewport aspect-ratio:3/1 max-height:300\n * //colors red:#FF0000 green:#00FF00 blue:#0000FF\n * //shapes red:circle green:circle blue:circle\n * H:|-[row:[red(green,blue)]-[green]-[blue]]-|\n * V:|[row]|\n * ```\n *\n * Supported categories and properties:\n *\n * |Category|Property|Example|\n * |--------|--------|-------|\n * |`viewport`|`aspect-ratio:{width}/{height}`|`//viewport aspect-ratio:16/9`|\n * ||`width:[{number}/intrinsic]`|`//viewport width:10`|\n * ||`height:[{number}/intrinsic]`|`//viewport height:intrinsic`|\n * ||`min-width:{number}`|\n * ||`max-width:{number}`|\n * ||`min-height:{number}`|\n * ||`max-height:{number}`|\n * |`spacing`|`[{number}/array]`|`//spacing:8` or `//spacing:[10, 20, 5]`|\n * |`widths`|`{view-name}:[{number}/intrinsic]`|`//widths subview1:100`|\n * |`heights`|`{view-name}:[{number}/intrinsic]`|`//heights subview1:intrinsic`|\n * |`colors`|`{view-name}:{color}`|`//colors redview:#FF0000 blueview:#00FF00`|\n * |`shapes`|`{view-name}:[circle/square]`|`//shapes avatar:circle`|\n *\n * @param {String|Array} visualFormat One or more visual format strings.\n * @param {Object} [options] Configuration options.\n * @param {String} [options.lineSeperator] String that defines the end of a line (default `\\n`).\n * @param {String} [options.prefix] When specified, also processes the categories using that prefix (e.g. \"-dev-viewport max-height:10\").\n * @return {Object} meta-info\n */\n static parseMetaInfo(visualFormat, options) {\n const lineSeperator = (options && options.lineSeperator) ? options.lineSeperator : '\\n';\n const prefix = options ? options.prefix : undefined;\n visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat];\n const metaInfo = {};\n var key;\n for (var k = 0; k < visualFormat.length; k++) {\n const lines = visualFormat[k].split(lineSeperator);\n for (var i = 0; i < lines.length; i++) {\n const line = lines[i];\n for (var c = 0; c < metaInfoCategories.length; c++) {\n for (var s = 0; s < (prefix ? 2 : 1); s++) {\n const category = metaInfoCategories[c];\n const prefixedCategory = ((s === 0) ? '' : prefix) + category;\n if (line.indexOf('//' + prefixedCategory + ' ') === 0) {\n const items = line.substring(3 + prefixedCategory.length).split(' ');\n for (var j = 0; j < items.length; j++) {\n const item = items[j].split(':');\n metaInfo[category] = metaInfo[category] || {};\n metaInfo[category][item[0]] = (item.length > 1) ? item[1] : '';\n }\n }\n else if (line.indexOf('//' + prefixedCategory + ':') === 0) {\n metaInfo[category] = line.substring(3 + prefixedCategory.length);\n }\n }\n }\n }\n }\n if (metaInfo.viewport) {\n const viewport = metaInfo.viewport;\n var aspectRatio = viewport['aspect-ratio'];\n if (aspectRatio) {\n aspectRatio = aspectRatio.split('/');\n viewport['aspect-ratio'] = parseInt(aspectRatio[0]) / parseInt(aspectRatio[1]);\n }\n if (viewport.height !== undefined) {\n viewport.height = (viewport.height === 'intrinsic') ? true : parseInt(viewport.height);\n }\n if (viewport.width !== undefined) {\n viewport.width = (viewport.width === 'intrinsic') ? true : parseInt(viewport.width);\n }\n if (viewport['max-height'] !== undefined) {\n viewport['max-height'] = parseInt(viewport['max-height']);\n }\n if (viewport['max-width'] !== undefined) {\n viewport['max-width'] = parseInt(viewport['max-width']);\n }\n if (viewport['min-height'] !== undefined) {\n viewport['min-height'] = parseInt(viewport['min-height']);\n }\n if (viewport['min-width'] !== undefined) {\n viewport['min-width'] = parseInt(viewport['min-width']);\n }\n }\n if (metaInfo.widths) {\n for (key in metaInfo.widths) {\n const width = (metaInfo.widths[key] === 'intrinsic') ? true : parseInt(metaInfo.widths[key]);\n metaInfo.widths[key] = width;\n if ((width === undefined) || isNaN(width)) {\n delete metaInfo.widths[key];\n }\n }\n }\n if (metaInfo.heights) {\n for (key in metaInfo.heights) {\n const height = (metaInfo.heights[key] === 'intrinsic') ? true : parseInt(metaInfo.heights[key]);\n metaInfo.heights[key] = height;\n if ((height === undefined) || isNaN(height)) {\n delete metaInfo.heights[key];\n }\n }\n }\n if (metaInfo.spacing) {\n const value = JSON.parse(metaInfo.spacing);\n metaInfo.spacing = value;\n if ((value === undefined) || isNaN(value)) {\n delete metaInfo.spacing;\n }\n }\n return metaInfo;\n }\n}\n\nclass SubView {\n constructor(options) {\n this._name = options.name;\n this._type = options.type;\n this._solver = options.solver;\n this._attr = {};\n if (!options.name) {\n if (process.env.CASSOWARYJS) {\n this._attr[Attribute.LEFT] = new c.Variable();\n this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.LEFT], c.Strength.required));\n this._attr[Attribute.TOP] = new c.Variable();\n this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.TOP], c.Strength.required));\n this._attr[Attribute.ZINDEX] = new c.Variable();\n this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.ZINDEX], c.Strength.required));\n }\n else {\n this._attr[Attribute.LEFT] = new kiwi.Variable();\n this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.LEFT], kiwi.Operator.Eq, 0));\n this._attr[Attribute.TOP] = new kiwi.Variable();\n this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.TOP], kiwi.Operator.Eq, 0));\n this._attr[Attribute.ZINDEX] = new kiwi.Variable();\n this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.ZINDEX], kiwi.Operator.Eq, 0));\n }\n }\n }\n toJSON() {\n return {\n name: this.name,\n left: this.left,\n top: this.top,\n width: this.width,\n height: this.height\n };\n }\n toString() {\n JSON.stringify(this.toJSON(), undefined, 2);\n }\n\n /**\n * Name of the sub-view.\n * @readonly\n * @type {String}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Left value (`Attribute.LEFT`).\n * @readonly\n * @type {Number}\n */\n get left() {\n return this._getAttrValue(Attribute.LEFT);\n }\n\n /**\n * Right value (`Attribute.RIGHT`).\n * @readonly\n * @type {Number}\n */\n get right() {\n return this._getAttrValue(Attribute.RIGHT);\n }\n\n /**\n * Width value (`Attribute.WIDTH`).\n * @type {Number}\n */\n get width() {\n return this._getAttrValue(Attribute.WIDTH);\n }\n\n /**\n * Height value (`Attribute.HEIGHT`).\n * @readonly\n * @type {Number}\n */\n get height() {\n return this._getAttrValue(Attribute.HEIGHT);\n }\n\n /**\n * Intrinsic width of the sub-view.\n *\n * Use this property to explicitely set the width of the sub-view, e.g.:\n * ```javascript\n * var view = new AutoLayout.View(AutoLayout.VisualFormat.parse('|[child1][child2]|'), {\n * width: 500\n * });\n * view.subViews.child1.intrinsicWidth = 100;\n * console.log('child2 width: ' + view.subViews.child2.width); // 400\n * ```\n *\n * @type {Number}\n */\n get intrinsicWidth() {\n return this._intrinsicWidth;\n }\n set intrinsicWidth(value) {\n if ((value !== undefined) && (value !== this._intrinsicWidth)) {\n const attr = this._getAttr(Attribute.WIDTH);\n if (this._intrinsicWidth === undefined) {\n if (process.env.CASSOWARYJS) {\n this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000));\n }\n else {\n this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000));\n }\n }\n this._intrinsicWidth = value;\n this._solver.suggestValue(attr, value);\n if (process.env.CASSOWARYJS) {\n this._solver.resolve();\n }\n else {\n this._solver.updateVariables();\n }\n }\n }\n\n /**\n * Intrinsic height of the sub-view.\n *\n * See `intrinsicWidth`.\n *\n * @type {Number}\n */\n get intrinsicHeight() {\n return this._intrinsicHeight;\n }\n set intrinsicHeight(value) {\n if ((value !== undefined) && (value !== this._intrinsicHeight)) {\n const attr = this._getAttr(Attribute.HEIGHT);\n if (this._intrinsicHeight === undefined) {\n if (process.env.CASSOWARYJS) {\n this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000));\n }\n else {\n this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000));\n }\n }\n this._intrinsicHeight = value;\n this._solver.suggestValue(attr, value);\n if (process.env.CASSOWARYJS) {\n this._solver.resolve();\n }\n else {\n this._solver.updateVariables();\n }\n }\n }\n\n /**\n * Top value (`Attribute.TOP`).\n * @readonly\n * @type {Number}\n */\n get top() {\n return this._getAttrValue(Attribute.TOP);\n }\n\n /**\n * Bottom value (`Attribute.BOTTOM`).\n * @readonly\n * @type {Number}\n */\n get bottom() {\n return this._getAttrValue(Attribute.BOTTOM);\n }\n\n /**\n * Horizontal center (`Attribute.CENTERX`).\n * @readonly\n * @type {Number}\n */\n get centerX() {\n return this._getAttrValue(Attribute.CENTERX);\n }\n\n /**\n * Vertical center (`Attribute.CENTERY`).\n * @readonly\n * @type {Number}\n */\n get centerY() {\n return this._getAttrValue(Attribute.CENTERY);\n }\n\n /**\n * Z-index (`Attribute.ZINDEX`).\n * @readonly\n * @type {Number}\n */\n get zIndex() {\n return this._getAttrValue(Attribute.ZINDEX);\n }\n\n /**\n * Returns the type of the sub-view.\n * @readonly\n * @type {String}\n */\n get type() {\n return this._type;\n }\n\n /**\n * Gets the value of one of the attributes.\n *\n * @param {String|Attribute} attr Attribute name (e.g. 'right', 'centerY', Attribute.TOP).\n * @return {Number} value or `undefined`\n */\n getValue(attr) {\n return this._attr[attr] ? this._attr[attr].value() : undefined;\n }\n\n /**\n * @private\n */\n _getAttr(attr) {\n if (this._attr[attr]) {\n return this._attr[attr];\n }\n this._attr[attr] = process.env.CASSOWARYJS ? new c.Variable() : new kiwi.Variable();\n switch (attr) {\n case Attribute.RIGHT:\n this._getAttr(Attribute.LEFT);\n this._getAttr(Attribute.WIDTH);\n if (process.env.CASSOWARYJS) {\n this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], this._attr[Attribute.WIDTH])));\n }\n else {\n this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH])));\n }\n break;\n case Attribute.BOTTOM:\n this._getAttr(Attribute.TOP);\n this._getAttr(Attribute.HEIGHT);\n if (process.env.CASSOWARYJS) {\n this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], this._attr[Attribute.HEIGHT])));\n }\n else {\n this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT])));\n }\n break;\n case Attribute.CENTERX:\n this._getAttr(Attribute.LEFT);\n this._getAttr(Attribute.WIDTH);\n if (process.env.CASSOWARYJS) {\n this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], c.divide(this._attr[Attribute.WIDTH], 2))));\n }\n else {\n this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH].divide(2))));\n }\n break;\n case Attribute.CENTERY:\n this._getAttr(Attribute.TOP);\n this._getAttr(Attribute.HEIGHT);\n if (process.env.CASSOWARYJS) {\n this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], c.divide(this._attr[Attribute.HEIGHT], 2))));\n }\n else {\n this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT].divide(2))));\n }\n break;\n }\n if (!process.env.CASSOWARYJS) {\n this._solver.updateVariables();\n }\n return this._attr[attr];\n }\n\n /**\n * @private\n */\n _getAttrValue(attr) {\n if (process.env.CASSOWARYJS) {\n return this._getAttr(attr).value;\n }\n else {\n return this._getAttr(attr).value();\n }\n }\n}\n\nconst defaultPriorityStrength = process.env.CASSOWARYJS ? new c.Strength('defaultPriority', 0, 1000, 1000) : kiwi.Strength.create(0, 1000, 1000);\n\nfunction _getConst(name, value) {\n if (process.env.CASSOWARYJS) {\n const vr = new c.Variable({value: value});\n this._solver.addConstraint(new c.StayConstraint(vr, c.Strength.required, 0));\n return vr;\n }\n else {\n const vr = new kiwi.Variable();\n this._solver.addConstraint(new kiwi.Constraint(vr, kiwi.Operator.Eq, value));\n return vr;\n }\n}\n\nfunction _getSubView(viewName) {\n if (!viewName) {\n return this._parentSubView;\n }\n else if (viewName.name) {\n this._subViews[viewName.name] = this._subViews[viewName.name] || new SubView({\n name: viewName.name,\n solver: this._solver\n });\n this._subViews[viewName.name]._type = this._subViews[viewName.name]._type || viewName.type;\n return this._subViews[viewName.name];\n }\n else {\n this._subViews[viewName] = this._subViews[viewName] || new SubView({\n name: viewName,\n solver: this._solver\n });\n return this._subViews[viewName];\n }\n}\n\nfunction _getSpacing(constraint) {\n let index = 4;\n if (!constraint.view1 && (constraint.attr1 === 'left')) {\n index = 3;\n }\n else if (!constraint.view1 && (constraint.attr1 === 'top')) {\n index = 0;\n }\n else if (!constraint.view2 && (constraint.attr2 === 'right')) {\n index = 1;\n }\n else if (!constraint.view2 && (constraint.attr2 === 'bottom')) {\n index = 2;\n }\n else {\n switch (constraint.attr1) {\n case 'left':\n case 'right':\n case 'centerX':\n case 'leading':\n case 'trailing':\n index = 4;\n break;\n case 'zIndex':\n index = 6;\n break;\n default:\n index = 5;\n }\n }\n this._spacingVars = this._spacingVars || new Array(7);\n this._spacingExpr = this._spacingExpr || new Array(7);\n if (!this._spacingVars[index]) {\n if (process.env.CASSOWARYJS) {\n this._spacingVars[index] = new c.Variable();\n this._solver.addEditVar(this._spacingVars[index]);\n this._spacingExpr[index] = c.minus(0, this._spacingVars[index]);\n }\n else {\n this._spacingVars[index] = new kiwi.Variable();\n this._solver.addEditVariable(this._spacingVars[index], kiwi.Strength.create(999, 1000, 1000));\n this._spacingExpr[index] = this._spacingVars[index].multiply(-1);\n }\n this._solver.suggestValue(this._spacingVars[index], this._spacing[index]);\n }\n return this._spacingExpr[index];\n}\n\nfunction _addConstraint(constraint) {\n //this.constraints.push(constraint);\n let relation;\n const multiplier = (constraint.multiplier !== undefined) ? constraint.multiplier : 1;\n let constant = (constraint.constant !== undefined) ? constraint.constant : 0;\n if (constant === 'default') {\n constant = _getSpacing.call(this, constraint);\n }\n const attr1 = _getSubView.call(this, constraint.view1)._getAttr(constraint.attr1);\n let attr2;\n if (process.env.CASSOWARYJS) {\n if (constraint.attr2 === Attribute.CONST) {\n attr2 = _getConst.call(this, undefined, constraint.constant);\n }\n else {\n attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2);\n if ((multiplier !== 1) && constant) {\n attr2 = c.plus(c.times(attr2, multiplier), constant);\n }\n else if (constant) {\n attr2 = c.plus(attr2, constant);\n }\n else if (multiplier !== 1) {\n attr2 = c.times(attr2, multiplier);\n }\n }\n const strength = ((constraint.priority !== undefined) && (constraint.priority < 1000)) ? new c.Strength('priority', 0, constraint.priority, 1000) : defaultPriorityStrength;\n switch (constraint.relation) {\n case Relation.EQU:\n relation = new c.Equation(attr1, attr2, strength);\n break;\n case Relation.GEQ:\n relation = new c.Inequality(attr1, c.GEQ, attr2, strength);\n break;\n case Relation.LEQ:\n relation = new c.Inequality(attr1, c.LEQ, attr2, strength);\n break;\n default:\n throw 'Invalid relation specified: ' + constraint.relation;\n }\n }\n else {\n if (constraint.attr2 === Attribute.CONST) {\n attr2 = _getConst.call(this, undefined, constraint.constant);\n }\n else {\n attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2);\n if ((multiplier !== 1) && constant) {\n attr2 = attr2.multiply(multiplier).plus(constant);\n }\n else if (constant) {\n attr2 = attr2.plus(constant);\n }\n else if (multiplier !== 1) {\n attr2 = attr2.multiply(multiplier);\n }\n }\n const strength = ((constraint.priority !== undefined) && (constraint.priority < 1000)) ? kiwi.Strength.create(0, constraint.priority, 1000) : defaultPriorityStrength;\n switch (constraint.relation) {\n case Relation.EQU:\n relation = new kiwi.Constraint(attr1, kiwi.Operator.Eq, attr2, strength);\n break;\n case Relation.GEQ:\n relation = new kiwi.Constraint(attr1, kiwi.Operator.Ge, attr2, strength);\n break;\n case Relation.LEQ:\n relation = new kiwi.Constraint(attr1, kiwi.Operator.Le, attr2, strength);\n break;\n default:\n throw 'Invalid relation specified: ' + constraint.relation;\n }\n }\n this._solver.addConstraint(relation);\n}\n\nfunction _compareSpacing(old, newz) {\n if (old === newz) {\n return true;\n }\n if (!old || !newz) {\n return false;\n }\n for (var i = 0; i < 7; i++) {\n if (old[i] !== newz[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * AutoLayoutJS API reference.\n *\n * ### Index\n *\n * |Entity|Type|Description|\n * |---|---|---|\n * |[AutoLayout](#autolayout)|`namespace`|Top level AutoLayout object.|\n * |[VisualFormat](#autolayoutvisualformat--object)|`namespace`|Parses VFL into constraints.|\n * |[View](#autolayoutview)|`class`|Main entity for adding & evaluating constraints.|\n * |[SubView](#autolayoutsubview--object)|`class`|SubView's are automatically created when constraints are added to views. They give access to the evaluated results.|\n * |[Attribute](#autolayoutattribute--enum)|`enum`|Attribute types that are supported when adding constraints.|\n * |[Relation](#autolayoutrelation--enum)|`enum`|Relationship types that are supported when adding constraints.|\n * |[Priority](#autolayoutpriority--enum)|`enum`|Default priority values for when adding constraints.|\n *\n * ### AutoLayout\n *\n * @module AutoLayout\n */\nclass View {\n\n /**\n * @class View\n * @param {Object} [options] Configuration options.\n * @param {Number} [options.width] Initial width of the view.\n * @param {Number} [options.height] Initial height of the view.\n * @param {Number|Object} [options.spacing] Spacing for the view (default: 8) (see `setSpacing`).\n * @param {Array} [options.constraints] One or more constraint definitions (see `addConstraints`).\n */\n constructor(options) {\n this._solver = process.env.CASSOWARYJS ? new c.SimplexSolver() : new kiwi.Solver();\n this._subViews = {};\n //this._spacing = undefined;\n this._parentSubView = new SubView({\n solver: this._solver\n });\n this.setSpacing((options && (options.spacing !== undefined)) ? options.spacing : 8);\n //this.constraints = [];\n if (options) {\n if ((options.width !== undefined) || (options.height !== undefined)) {\n this.setSize(options.width, options.height);\n }\n if (options.constraints) {\n this.addConstraints(options.constraints);\n }\n }\n }\n\n /**\n * Sets the width and height of the view.\n *\n * @param {Number} width Width of the view.\n * @param {Number} height Height of the view.\n * @return {View} this\n */\n setSize(width, height /*, depth*/) {\n this._parentSubView.intrinsicWidth = width;\n this._parentSubView.intrinsicHeight = height;\n return this;\n }\n\n /**\n * Width that was set using `setSize`.\n * @readonly\n * @type {Number}\n */\n get width() {\n return this._parentSubView.intrinsicWidth;\n }\n\n /**\n * Height that was set using `setSize`.\n * @readonly\n * @type {Number}\n */\n get height() {\n return this._parentSubView.intrinsicHeight;\n }\n\n /**\n * Width that is calculated from the constraints and the `.intrinsicWidth` of\n * the sub-views.\n *\n * When the width has been explicitely set using `setSize`, the fittingWidth\n * will **always** be the same as the explicitely set width. To calculate the size\n * based on the content, use:\n * ```javascript\n * var view = new AutoLayout.View({\n * constraints: VisualFormat.parse('|-[view1]-[view2]-'),\n * spacing: 20\n * });\n * view.subViews.view1.intrinsicWidth = 100;\n * view.subViews.view2.intrinsicWidth = 100;\n * console.log('fittingWidth: ' + view.fittingWidth); // 260\n * ```\n *\n * @readonly\n * @type {Number}\n */\n get fittingWidth() {\n return this._parentSubView.width;\n }\n\n /**\n * Height that is calculated from the constraints and the `.intrinsicHeight` of\n * the sub-views.\n *\n * See `.fittingWidth`.\n *\n * @readonly\n * @type {Number}\n */\n get fittingHeight() {\n return this._parentSubView.height;\n }\n\n /**\n * Sets the spacing for the view.\n *\n * The spacing can be set for 7 different variables:\n * `top`, `right`, `bottom`, `left`, `width`, `height` and `zIndex`. The `left`-spacing is\n * used when a spacer is used between the parent-view and a sub-view (e.g. `|-[subView]`).\n * The same is true for the `right`, `top` and `bottom` spacers. The `width` and `height` are\n * used for spacers in between sub-views (e.g. `[view1]-[view2]`).\n *\n * Instead of using the full spacing syntax, it is also possible to use shorthand notations:\n *\n * |Syntax|Type|Description|\n * |---|---|---|\n * |`[top, right, bottom, left, width, height, zIndex]`|Array(7)|Full syntax including z-index **(clockwise order)**.|\n * |`[top, right, bottom, left, width, height]`|Array(6)|Full horizontal & vertical spacing syntax (no z-index) **(clockwise order)**.|\n * |`[horizontal, vertical, zIndex]`|Array(3)|Horizontal = left, right, width, vertical = top, bottom, height.|\n * |`[horizontal, vertical]`|Array(2)|Horizontal = left, right, width, vertical = top, bottom, height, z-index = 1.|\n * |`spacing`|Number|Horizontal & vertical spacing are all the same, z-index = 1.|\n *\n * Examples:\n * ```javascript\n * view.setSpacing(10); // horizontal & vertical spacing 10\n * view.setSpacing([10, 15, 2]); // horizontal spacing 10, vertical spacing 15, z-axis spacing 2\n * view.setSpacing([10, 20, 10, 20, 5, 5]); // top, right, bottom, left, horizontal, vertical\n * view.setSpacing([10, 20, 10, 20, 5, 5, 1]); // top, right, bottom, left, horizontal, vertical, z\n * ```\n *\n * @param {Number|Array} spacing\n * @return {View} this\n */\n setSpacing(spacing) {\n // convert spacing into array: [top, right, bottom, left, horz, vert, z-index]\n switch (Array.isArray(spacing) ? spacing.length : -1) {\n case -1: spacing = [spacing, spacing, spacing, spacing, spacing, spacing, 1]; break;\n case 1: spacing = [spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], 1]; break;\n case 2: spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], 1]; break;\n case 3: spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], spacing[2]]; break;\n case 6: spacing = [spacing[0], spacing[1], spacing[2], spacing[3], spacing[4], spacing[5], 1]; break;\n case 7: break;\n default: throw 'Invalid spacing syntax';\n }\n if (!_compareSpacing(this._spacing, spacing)) {\n this._spacing = spacing;\n // update spacing variables\n if (this._spacingVars) {\n for (var i = 0; i < this._spacingVars.length; i++) {\n if (this._spacingVars[i]) {\n this._solver.suggestValue(this._spacingVars[i], this._spacing[i]);\n }\n }\n if (process.env.CASSOWARYJS) {\n this._solver.resolve();\n }\n else {\n this._solver.updateVariables();\n }\n }\n }\n return this;\n }\n\n /**\n * Adds a constraint definition.\n *\n * A constraint definition has the following format:\n *\n * ```javascript\n * constraint: {\n * view1: {String},\n * attr1: {AutoLayout.Attribute},\n * relation: {AutoLayout.Relation},\n * view2: {String},\n * attr2: {AutoLayout.Attribute},\n * multiplier: {Number},\n * constant: {Number},\n * priority: {Number}(0..1000)\n * }\n * ```\n * @param {Object} constraint Constraint definition.\n * @return {View} this\n */\n addConstraint(constraint) {\n _addConstraint.call(this, constraint);\n if (!process.env.CASSOWARYJS) {\n this._solver.updateVariables();\n }\n return this;\n }\n\n /**\n * Adds one or more constraint definitions.\n *\n * A constraint definition has the following format:\n *\n * ```javascript\n * constraint: {\n * view1: {String},\n * attr1: {AutoLayout.Attribute},\n * relation: {AutoLayout.Relation},\n * view2: {String},\n * attr2: {AutoLayout.Attribute},\n * multiplier: {Number},\n * constant: {Number},\n * priority: {Number}(0..1000)\n * }\n * ```\n * @param {Array} constraints One or more constraint definitions.\n * @return {View} this\n */\n addConstraints(constraints) {\n for (var j = 0; j < constraints.length; j++) {\n _addConstraint.call(this, constraints[j]);\n }\n if (!process.env.CASSOWARYJS) {\n this._solver.updateVariables();\n }\n return this;\n }\n\n /**\n * Dictionary of `SubView` objects that have been created when adding constraints.\n * @readonly\n * @type {Object.SubView}\n */\n get subViews() {\n return this._subViews;\n }\n\n /**\n * Checks whether the constraints incompletely specify the location\n * of the subViews.\n * @private\n */\n //get hasAmbiguousLayout() {\n // Todo\n //}\n}\n\nvar AutoLayout = {\n Attribute: Attribute,\n Relation: Relation,\n Priority: Priority,\n VisualFormat: VisualFormat,\n View: View,\n SubView: SubView\n //DOM: DOM\n};\n\nmodule.exports = AutoLayout;","/**\n * Parts Copyright (C) 2011-2012, Alex Russell (slightlyoff@chromium.org)\n * Parts Copyright (C) Copyright (C) 1998-2000 Greg J. Badros\n *\n * Use of this source code is governed by the LGPL, which can be found in the\n * COPYING.LGPL file.\n *\n * This is a compiled version of Cassowary/JS. For source versions or to\n * contribute, see the github project:\n *\n * https://github.com/slightlyoff/cassowary-js-refactor\n *\n */\n\n(function() {\n(function(a){\"use strict\";try{(function(){}).bind(a)}catch(b){Object.defineProperty(Function.prototype,\"bind\",{value:function(a){var b=this;return function(){return b.apply(a,arguments)}},enumerable:!1,configurable:!0,writable:!0})}var c=a.HTMLElement!==void 0,d=function(a){for(var b=null;a&&a!=Object.prototype;){if(a.tagName){b=a.tagName;break}a=a.prototype}return b||\"div\"},e=1e-8,f={},g=function(a,b){if(a&&b){if(\"function\"==typeof a[b])return a[b];var c=a.prototype;if(c&&\"function\"==typeof c[b])return c[b];if(c!==Object.prototype&&c!==Function.prototype)return\"function\"==typeof a.__super__?g(a.__super__,b):void 0}},h=a.c={debug:!1,trace:!1,verbose:!1,traceAdded:!1,GC:!1,GEQ:1,LEQ:2,inherit:function(b){var e=null,g=null;b[\"extends\"]&&(g=b[\"extends\"],delete b[\"extends\"]),b.initialize&&(e=b.initialize,delete b.initialize);var h=e||function(){};Object.defineProperty(h,\"__super__\",{value:g?g:Object,enumerable:!1,configurable:!0,writable:!1}),b._t&&(f[b._t]=h);var i=h.prototype=Object.create(g?g.prototype:Object.prototype);if(this.extend(i,b),c&&g&&g.prototype instanceof a.HTMLElement){var j=h,k=d(i),l=function(a){return a.__proto__=i,j.apply(a,arguments),i.created&&a.created(),i.decorate&&a.decorate(),a};this.extend(i,{upgrade:l}),h=function(){return l(a.document.createElement(k))},h.prototype=i,this.extend(h,{ctor:j})}return h},extend:function(a,b){return this.own(b,function(c){var d=Object.getOwnPropertyDescriptor(b,c);try{\"function\"==typeof d.get||\"function\"==typeof d.set?Object.defineProperty(a,c,d):\"function\"==typeof d.value||\"_\"===c.charAt(0)?(d.writable=!0,d.configurable=!0,d.enumerable=!1,Object.defineProperty(a,c,d)):a[c]=b[c]}catch(e){}}),a},own:function(b,c,d){return Object.getOwnPropertyNames(b).forEach(c,d||a),b},traceprint:function(a){h.verbose&&console.log(a)},fnenterprint:function(a){console.log(\"* \"+a)},fnexitprint:function(a){console.log(\"- \"+a)},assert:function(a,b){if(!a)throw new h.InternalError(\"Assertion failed: \"+b)},plus:function(a,b){return a instanceof h.Expression||(a=new h.Expression(a)),b instanceof h.Expression||(b=new h.Expression(b)),a.plus(b)},minus:function(a,b){return a instanceof h.Expression||(a=new h.Expression(a)),b instanceof h.Expression||(b=new h.Expression(b)),a.minus(b)},times:function(a,b){return(\"number\"==typeof a||a instanceof h.Variable)&&(a=new h.Expression(a)),(\"number\"==typeof b||b instanceof h.Variable)&&(b=new h.Expression(b)),a.times(b)},divide:function(a,b){return(\"number\"==typeof a||a instanceof h.Variable)&&(a=new h.Expression(a)),(\"number\"==typeof b||b instanceof h.Variable)&&(b=new h.Expression(b)),a.divide(b)},approx:function(a,b){if(a===b)return!0;var c,d;return c=a instanceof h.Variable?a.value:a,d=b instanceof h.Variable?b.value:b,0==c?e>Math.abs(d):0==d?e>Math.abs(c):Math.abs(c-d)64||this._deleted>this._compactThreshold&&(this._compact(),this._deleted=0)},\"delete\":function(a){a=b(a),this._store.hasOwnProperty(a)&&(this._deleted++,delete this._store[a],this.size>0&&this.size--)},each:function(a,b){if(this.size){this._perhapsCompact();var c=this._store,d=this._keyStrMap;Object.keys(this._store).forEach(function(e){a.call(b||null,d[e],c[e])},this)}},escapingEach:function(a,b){if(this.size){this._perhapsCompact();for(var c=this,e=this._store,f=this._keyStrMap,g=d,h=Object.keys(e),i=0;h.length>i;i++)if(function(d){c._store.hasOwnProperty(d)&&(g=a.call(b||null,f[d],e[d]))}(h[i]),g){if(void 0!==g.retval)return g;if(g.brk)break}}},clone:function(){var b=new a.HashTable;return this.size&&(b.size=this.size,c(this._store,b._store),c(this._keyStrMap,b._keyStrMap)),b},equals:function(b){if(b===this)return!0;if(!(b instanceof a.HashTable)||b._size!==this._size)return!1;for(var c=Object.keys(this._store),d=0;c.length>d;d++){var e=c[d];if(this._keyStrMap[e]!==b._keyStrMap[e]||this._store[e]!==b._store[e])return!1}return!0},toString:function(){var b=\"\";return this.each(function(a,c){b+=a+\" => \"+c+\"\\n\"}),b}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.HashSet=a.inherit({_t:\"c.HashSet\",initialize:function(){this.storage=[],this.size=0},add:function(a){var b=this.storage;b.indexOf(a),-1==b.indexOf(a)&&b.push(a),this.size=this.storage.length},values:function(){return this.storage},has:function(a){var b=this.storage;return-1!=b.indexOf(a)},\"delete\":function(a){var b=this.storage.indexOf(a);return-1==b?null:(this.storage.splice(b,1)[0],this.size=this.storage.length,void 0)},clear:function(){this.storage.length=0},each:function(a,b){this.size&&this.storage.forEach(a,b)},escapingEach:function(a,b){this.size&&this.storage.forEach(a,b)},toString:function(){var a=this.size+\" {\",b=!0;return this.each(function(c){b?b=!1:a+=\", \",a+=c}),a+=\"}\\n\"},toJSON:function(){var a=[];return this.each(function(b){a.push(b.toJSON())}),{_t:\"c.HashSet\",data:a}},fromJSON:function(b){var c=new a.HashSet;return b.data&&(c.size=b.data.length,c.storage=b.data),c}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Error=a.inherit({initialize:function(a){a&&(this._description=a)},_name:\"c.Error\",_description:\"An error has occured in Cassowary\",set description(a){this._description=a},get description(){return\"(\"+this._name+\") \"+this._description},get message(){return this.description},toString:function(){return this.description}});var b=function(b,c){return a.inherit({\"extends\":a.Error,initialize:function(){a.Error.apply(this,arguments)},_name:b||\"\",_description:c||\"\"})};a.ConstraintNotFound=b(\"c.ConstraintNotFound\",\"Tried to remove a constraint never added to the tableu\"),a.InternalError=b(\"c.InternalError\"),a.NonExpression=b(\"c.NonExpression\",\"The resulting expression would be non\"),a.NotEnoughStays=b(\"c.NotEnoughStays\",\"There are not enough stays to give specific values to every variable\"),a.RequiredFailure=b(\"c.RequiredFailure\",\"A required constraint cannot be satisfied\"),a.TooDifficult=b(\"c.TooDifficult\",\"The constraints are too difficult to solve\")}(this.c||module.parent.exports||{}),function(a){\"use strict\";var b=1e3;a.SymbolicWeight=a.inherit({_t:\"c.SymbolicWeight\",initialize:function(){this.value=0;for(var a=1,c=arguments.length-1;c>=0;--c)this.value+=arguments[c]*a,a*=b},toJSON:function(){return{_t:this._t,value:this.value}}})}(this.c||module.parent.exports||{}),function(a){a.Strength=a.inherit({initialize:function(b,c,d,e){this.name=b,this.symbolicWeight=c instanceof a.SymbolicWeight?c:new a.SymbolicWeight(c,d,e)},get required(){return this===a.Strength.required},toString:function(){return this.name+(this.isRequired?\"\":\":\"+this.symbolicWeight)}}),a.Strength.required=new a.Strength(\"\",1e3,1e3,1e3),a.Strength.strong=new a.Strength(\"strong\",1,0,0),a.Strength.medium=new a.Strength(\"medium\",0,1,0),a.Strength.weak=new a.Strength(\"weak\",0,0,1)}(this.c||(\"undefined\"!=typeof module?module.parent.exports.c:{})),function(a){\"use strict\";a.AbstractVariable=a.inherit({isDummy:!1,isExternal:!1,isPivotable:!1,isRestricted:!1,_init:function(b,c){this.hashCode=a._inc(),this.name=(c||\"\")+this.hashCode,b&&(b.name!==void 0&&(this.name=b.name),b.value!==void 0&&(this.value=b.value),b.prefix!==void 0&&(this._prefix=b.prefix))},_prefix:\"\",name:\"\",value:0,toJSON:function(){var a={};return this._t&&(a._t=this._t),this.name&&(a.name=this.name),this.value!==void 0&&(a.value=this.value),this._prefix&&(a._prefix=this._prefix),this._t&&(a._t=this._t),a},fromJSON:function(b,c){var d=new c;return a.extend(d,b),d},toString:function(){return this._prefix+\"[\"+this.name+\":\"+this.value+\"]\"}}),a.Variable=a.inherit({_t:\"c.Variable\",\"extends\":a.AbstractVariable,initialize:function(b){this._init(b,\"v\");var c=a.Variable._map;c&&(c[this.name]=this)},isExternal:!0}),a.DummyVariable=a.inherit({_t:\"c.DummyVariable\",\"extends\":a.AbstractVariable,initialize:function(a){this._init(a,\"d\")},isDummy:!0,isRestricted:!0,value:\"dummy\"}),a.ObjectiveVariable=a.inherit({_t:\"c.ObjectiveVariable\",\"extends\":a.AbstractVariable,initialize:function(a){this._init(a,\"o\")},value:\"obj\"}),a.SlackVariable=a.inherit({_t:\"c.SlackVariable\",\"extends\":a.AbstractVariable,initialize:function(a){this._init(a,\"s\")},isPivotable:!0,isRestricted:!0,value:\"slack\"})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Point=a.inherit({initialize:function(b,c,d){if(b instanceof a.Variable)this._x=b;else{var e={value:b};d&&(e.name=\"x\"+d),this._x=new a.Variable(e)}if(c instanceof a.Variable)this._y=c;else{var f={value:c};d&&(f.name=\"y\"+d),this._y=new a.Variable(f)}},get x(){return this._x},set x(b){b instanceof a.Variable?this._x=b:this._x.value=b},get y(){return this._y},set y(b){b instanceof a.Variable?this._y=b:this._y.value=b},toString:function(){return\"(\"+this.x+\", \"+this.y+\")\"}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Expression=a.inherit({initialize:function(b,c,d){a.GC&&console.log(\"new c.Expression\"),this.constant=\"number\"!=typeof d||isNaN(d)?0:d,this.terms=new a.HashTable,b instanceof a.AbstractVariable?this.setVariable(b,\"number\"==typeof c?c:1):\"number\"==typeof b&&(isNaN(b)?console.trace():this.constant=b)},initializeFromHash:function(b,c){return a.verbose&&(console.log(\"*******************************\"),console.log(\"clone c.initializeFromHash\"),console.log(\"*******************************\")),a.GC&&console.log(\"clone c.Expression\"),this.constant=b,this.terms=c.clone(),this},multiplyMe:function(a){this.constant*=a;var b=this.terms;return b.each(function(c,d){b.set(c,d*a)}),this},clone:function(){a.verbose&&(console.log(\"*******************************\"),console.log(\"clone c.Expression\"),console.log(\"*******************************\"));var b=new a.Expression;return b.initializeFromHash(this.constant,this.terms),b},times:function(b){if(\"number\"==typeof b)return this.clone().multiplyMe(b);if(this.isConstant)return b.times(this.constant);if(b.isConstant)return this.times(b.constant);throw new a.NonExpression},plus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,1):b instanceof a.Variable?this.clone().addVariable(b,1):void 0},minus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,-1):b instanceof a.Variable?this.clone().addVariable(b,-1):void 0},divide:function(b){if(\"number\"==typeof b){if(a.approx(b,0))throw new a.NonExpression;return this.times(1/b)}if(b instanceof a.Expression){if(!b.isConstant)throw new a.NonExpression;return this.times(1/b.constant)}},addExpression:function(b,c,d,e){return b instanceof a.AbstractVariable&&(b=new a.Expression(b),a.trace&&console.log(\"addExpression: Had to cast a var to an expression\")),c=c||1,this.constant+=c*b.constant,b.terms.each(function(a,b){this.addVariable(a,b*c,d,e)},this),this},addVariable:function(b,c,d,e){null==c&&(c=1),a.trace&&console.log(\"c.Expression::addVariable():\",b,c);var f=this.terms.get(b);if(f){var g=f+c;0==g||a.approx(g,0)?(e&&e.noteRemovedVariable(b,d),this.terms.delete(b)):this.setVariable(b,g)}else a.approx(c,0)||(this.setVariable(b,c),e&&e.noteAddedVariable(b,d));return this},setVariable:function(a,b){return this.terms.set(a,b),this},anyPivotableVariable:function(){if(this.isConstant)throw new a.InternalError(\"anyPivotableVariable called on a constant\");var b=this.terms.escapingEach(function(a){return a.isPivotable?{retval:a}:void 0});return b&&void 0!==b.retval?b.retval:null},substituteOut:function(b,c,d,e){a.trace&&(a.fnenterprint(\"CLE:substituteOut: \"+b+\", \"+c+\", \"+d+\", ...\"),a.traceprint(\"this = \"+this));var f=this.setVariable.bind(this),g=this.terms,h=g.get(b);g.delete(b),this.constant+=h*c.constant,c.terms.each(function(b,c){var i=g.get(b);if(i){var j=i+h*c;a.approx(j,0)?(e.noteRemovedVariable(b,d),g.delete(b)):f(b,j)}else f(b,h*c),e&&e.noteAddedVariable(b,d)}),a.trace&&a.traceprint(\"Now this is \"+this)},changeSubject:function(a,b){this.setVariable(a,this.newSubject(b))},newSubject:function(b){a.trace&&a.fnenterprint(\"newSubject:\"+b);var c=1/this.terms.get(b);return this.terms.delete(b),this.multiplyMe(-c),c},coefficientFor:function(a){return this.terms.get(a)||0},get isConstant(){return 0==this.terms.size},toString:function(){var b=\"\",c=!1;if(!a.approx(this.constant,0)||this.isConstant){if(b+=this.constant,this.isConstant)return b;c=!0}return this.terms.each(function(a,d){c&&(b+=\" + \"),b+=d+\"*\"+a,c=!0}),b},equals:function(b){return b===this?!0:b instanceof a.Expression&&b.constant===this.constant&&b.terms.equals(this.terms)},Plus:function(a,b){return a.plus(b)},Minus:function(a,b){return a.minus(b)},Times:function(a,b){return a.times(b)},Divide:function(a,b){return a.divide(b)}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.AbstractConstraint=a.inherit({initialize:function(b,c){this.hashCode=a._inc(),this.strength=b||a.Strength.required,this.weight=c||1},isEditConstraint:!1,isInequality:!1,isStayConstraint:!1,get required(){return this.strength===a.Strength.required},toString:function(){return this.strength+\" {\"+this.weight+\"} (\"+this.expression+\")\"}});var b=a.AbstractConstraint.prototype.toString,c=function(b,c,d){a.AbstractConstraint.call(this,c||a.Strength.strong,d),this.variable=b,this.expression=new a.Expression(b,-1,b.value)};a.EditConstraint=a.inherit({\"extends\":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isEditConstraint:!0,toString:function(){return\"edit:\"+b.call(this)}}),a.StayConstraint=a.inherit({\"extends\":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isStayConstraint:!0,toString:function(){return\"stay:\"+b.call(this)}});var d=a.Constraint=a.inherit({\"extends\":a.AbstractConstraint,initialize:function(b,c,d){a.AbstractConstraint.call(this,c,d),this.expression=b}});a.Inequality=a.inherit({\"extends\":a.Constraint,_cloneOrNewCle:function(b){return b.clone?b.clone():new a.Expression(b)},initialize:function(b,c,e,f,g){var h=b instanceof a.Expression,i=e instanceof a.Expression,j=b instanceof a.AbstractVariable,k=e instanceof a.AbstractVariable,l=\"number\"==typeof b,m=\"number\"==typeof e;if((h||l)&&k){var n=b,o=c,p=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.GEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addVariable(p,-1)}}else if(j&&(i||m)){var n=e,o=c,p=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addVariable(p,-1)}}else{if(h&&m){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.GEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(l&&i){var s=e,o=c,t=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(h&&i){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(t),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(s));else{if(o!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addExpression(this._cloneOrNewCle(s),-1)}}else{if(h)return d.call(this,b,c,e);if(c==a.GEQ)d.call(this,new a.Expression(e),f,g),this.expression.multiplyMe(-1),this.expression.addVariable(b);else{if(c!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");d.call(this,new a.Expression(e),f,g),this.expression.addVariable(b,-1)}}}},isInequality:!0,toString:function(){return d.prototype.toString.call(this)+\" >= 0) id: \"+this.hashCode}}),a.Equation=a.inherit({\"extends\":a.Constraint,initialize:function(b,c,e,f){if(b instanceof a.Expression&&!c||c instanceof a.Strength)d.call(this,b,c,e);else if(b instanceof a.AbstractVariable&&c instanceof a.Expression){var g=b,h=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.AbstractVariable&&\"number\"==typeof c){var g=b,k=c,i=e,j=f;d.call(this,new a.Expression(k),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.Expression&&c instanceof a.AbstractVariable){var h=b,g=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else{if(!(b instanceof a.Expression||b instanceof a.AbstractVariable||\"number\"==typeof b)||!(c instanceof a.Expression||c instanceof a.AbstractVariable||\"number\"==typeof c))throw\"Bad initializer to c.Equation\";b=b instanceof a.Expression?b.clone():new a.Expression(b),c=c instanceof a.Expression?c.clone():new a.Expression(c),d.call(this,b,e,f),this.expression.addExpression(c,-1)}a.assert(this.strength instanceof a.Strength,\"_strength not set\")},toString:function(){return d.prototype.toString.call(this)+\" = 0)\"}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.EditInfo=a.inherit({initialize:function(a,b,c,d,e){this.constraint=a,this.editPlus=b,this.editMinus=c,this.prevEditConstant=d,this.index=e},toString:function(){return\"\"}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Tableau=a.inherit({initialize:function(){this.columns=new a.HashTable,this.rows=new a.HashTable,this._infeasibleRows=new a.HashSet,this._externalRows=new a.HashSet,this._externalParametricVars=new a.HashSet},noteRemovedVariable:function(b,c){a.trace&&console.log(\"c.Tableau::noteRemovedVariable: \",b,c);var d=this.columns.get(b);c&&d&&d.delete(c)},noteAddedVariable:function(a,b){b&&this.insertColVar(a,b)},getInternalInfo:function(){var a=\"Tableau Information:\\n\";return a+=\"Rows: \"+this.rows.size,a+=\" (= \"+(this.rows.size-1)+\" constraints)\",a+=\"\\nColumns: \"+this.columns.size,a+=\"\\nInfeasible Rows: \"+this._infeasibleRows.size,a+=\"\\nExternal basic variables: \"+this._externalRows.size,a+=\"\\nExternal parametric variables: \",a+=this._externalParametricVars.size,a+=\"\\n\"},toString:function(){var a=\"Tableau:\\n\";return this.rows.each(function(b,c){a+=b,a+=\" <==> \",a+=c,a+=\"\\n\"}),a+=\"\\nColumns:\\n\",a+=this.columns,a+=\"\\nInfeasible rows: \",a+=this._infeasibleRows,a+=\"External basic variables: \",a+=this._externalRows,a+=\"External parametric variables: \",a+=this._externalParametricVars},insertColVar:function(b,c){var d=this.columns.get(b);d||(d=new a.HashSet,this.columns.set(b,d)),d.add(c)},addRow:function(b,c){a.trace&&a.fnenterprint(\"addRow: \"+b+\", \"+c),this.rows.set(b,c),c.terms.each(function(a){this.insertColVar(a,b),a.isExternal&&this._externalParametricVars.add(a)},this),b.isExternal&&this._externalRows.add(b),a.trace&&a.traceprint(\"\"+this)},removeColumn:function(b){a.trace&&a.fnenterprint(\"removeColumn:\"+b);var c=this.columns.get(b);c?(this.columns.delete(b),c.each(function(a){var c=this.rows.get(a);c.terms.delete(b)},this)):a.trace&&console.log(\"Could not find var\",b,\"in columns\"),b.isExternal&&(this._externalRows.delete(b),this._externalParametricVars.delete(b))},removeRow:function(b){a.trace&&a.fnenterprint(\"removeRow:\"+b);var c=this.rows.get(b);return a.assert(null!=c),c.terms.each(function(c){var e=this.columns.get(c);null!=e&&(a.trace&&console.log(\"removing from varset:\",b),e.delete(b))},this),this._infeasibleRows.delete(b),b.isExternal&&this._externalRows.delete(b),this.rows.delete(b),a.trace&&a.fnexitprint(\"returning \"+c),c},substituteOut:function(b,c){a.trace&&a.fnenterprint(\"substituteOut:\"+b+\", \"+c),a.trace&&a.traceprint(\"\"+this);var d=this.columns.get(b);d.each(function(a){var d=this.rows.get(a);d.substituteOut(b,c,a,this),a.isRestricted&&0>d.constant&&this._infeasibleRows.add(a)},this),b.isExternal&&(this._externalRows.add(b),this._externalParametricVars.delete(b)),this.columns.delete(b)},columnsHasKey:function(a){return!!this.columns.get(a)}})}(this.c||module.parent.exports||{}),function(a){var b=a.Tableau,c=b.prototype,d=1e-8,e=a.Strength.weak;a.SimplexSolver=a.inherit({\"extends\":a.Tableau,initialize:function(){a.Tableau.call(this),this._stayMinusErrorVars=[],this._stayPlusErrorVars=[],this._errorVars=new a.HashTable,this._markerVars=new a.HashTable,this._objective=new a.ObjectiveVariable({name:\"Z\"}),this._editVarMap=new a.HashTable,this._editVarList=[],this._slackCounter=0,this._artificialCounter=0,this._dummyCounter=0,this.autoSolve=!0,this._fNeedsSolving=!1,this._optimizeCount=0,this.rows.set(this._objective,new a.Expression),this._stkCedcns=[0],a.trace&&a.traceprint(\"objective expr == \"+this.rows.get(this._objective))},addLowerBound:function(b,c){var d=new a.Inequality(b,a.GEQ,new a.Expression(c));return this.addConstraint(d)},addUpperBound:function(b,c){var d=new a.Inequality(b,a.LEQ,new a.Expression(c));return this.addConstraint(d)},addBounds:function(a,b,c){return this.addLowerBound(a,b),this.addUpperBound(a,c),this},add:function(){for(var a=0;arguments.length>a;a++)this.addConstraint(arguments[a]);return this},addConstraint:function(b){a.trace&&a.fnenterprint(\"addConstraint: \"+b);var c=Array(2),d=Array(1),e=this.newExpression(b,c,d);if(d=d[0],this.tryAddingDirectly(e)||this.addWithArtificialVariable(e),this._fNeedsSolving=!0,b.isEditConstraint){var f=this._editVarMap.size,g=c[0],h=c[1];!g instanceof a.SlackVariable&&console.warn(\"cvEplus not a slack variable =\",g),!h instanceof a.SlackVariable&&console.warn(\"cvEminus not a slack variable =\",h),a.debug&&console.log(\"new c.EditInfo(\"+b+\", \"+g+\", \"+h+\", \"+d+\", \"+f+\")\");var i=new a.EditInfo(b,g,h,d,f);this._editVarMap.set(b.variable,i),this._editVarList[f]={v:b.variable,info:i}}return this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},addConstraintNoException:function(b){a.trace&&a.fnenterprint(\"addConstraintNoException: \"+b);try{return this.addConstraint(b),!0}catch(c){return!1}},addEditVar:function(b,c){return a.trace&&a.fnenterprint(\"addEditVar: \"+b+\" @ \"+c),this.addConstraint(new a.EditConstraint(b,c||a.Strength.strong))},beginEdit:function(){return a.assert(this._editVarMap.size>0,\"_editVarMap.size > 0\"),this._infeasibleRows.clear(),this._resetStayConstants(),this._stkCedcns.push(this._editVarMap.size),this},endEdit:function(){return a.assert(this._editVarMap.size>0,\"_editVarMap.size > 0\"),this.resolve(),this._stkCedcns.pop(),this.removeEditVarsTo(this._stkCedcns[this._stkCedcns.length-1]),this},removeAllEditVars:function(){return this.removeEditVarsTo(0)},removeEditVarsTo:function(b){try{for(var c=this._editVarList.length,d=b;c>d;d++)this._editVarList[d]&&this.removeConstraint(this._editVarMap.get(this._editVarList[d].v).constraint);return this._editVarList.length=b,a.assert(this._editVarMap.size==b,\"_editVarMap.size == n\"),this}catch(e){throw new a.InternalError(\"Constraint not found in removeEditVarsTo\")}},addPointStays:function(b){return a.trace&&console.log(\"addPointStays\",b),b.forEach(function(a,b){this.addStay(a.x,e,Math.pow(2,b)),this.addStay(a.y,e,Math.pow(2,b))},this),this},addStay:function(b,c,d){var f=new a.StayConstraint(b,c||e,d||1);return this.addConstraint(f)},removeConstraint:function(a){return this.removeConstraintInternal(a),this},removeConstraintInternal:function(b){a.trace&&a.fnenterprint(\"removeConstraintInternal: \"+b),a.trace&&a.traceprint(\"\"+this),this._fNeedsSolving=!0,this._resetStayConstants();var c=this.rows.get(this._objective),d=this._errorVars.get(b);a.trace&&a.traceprint(\"eVars == \"+d),null!=d&&d.each(function(e){var f=this.rows.get(e);null==f?c.addVariable(e,-b.weight*b.strength.symbolicWeight.value,this._objective,this):c.addExpression(f,-b.weight*b.strength.symbolicWeight.value,this._objective,this),a.trace&&a.traceprint(\"now eVars == \"+d)},this);var e=this._markerVars.get(b);if(this._markerVars.delete(b),null==e)throw new a.InternalError(\"Constraint not found in removeConstraintInternal\");if(a.trace&&a.traceprint(\"Looking to remove var \"+e),null==this.rows.get(e)){var f=this.columns.get(e);a.trace&&a.traceprint(\"Must pivot -- columns are \"+f);var g=null,h=0;f.each(function(b){if(b.isRestricted){var c=this.rows.get(b),d=c.coefficientFor(e);if(a.trace&&a.traceprint(\"Marker \"+e+\"'s coefficient in \"+c+\" is \"+d),0>d){var f=-c.constant/d;(null==g||h>f||a.approx(f,h)&&b.hashCoded)&&(h=d,g=a)}},this)),null==g&&(0==f.size?this.removeColumn(e):f.escapingEach(function(a){return a!=this._objective?(g=a,{brk:!0}):void 0},this)),null!=g&&this.pivot(e,g)}if(null!=this.rows.get(e)&&this.removeRow(e),null!=d&&d.each(function(a){a!=e&&this.removeColumn(a)},this),b.isStayConstraint){if(null!=d)for(var j=0;this._stayPlusErrorVars.length>j;j++)d.delete(this._stayPlusErrorVars[j]),d.delete(this._stayMinusErrorVars[j])}else if(b.isEditConstraint){a.assert(null!=d,\"eVars != null\");var k=this._editVarMap.get(b.variable);this.removeColumn(k.editMinus),this._editVarMap.delete(b.variable)}return null!=d&&this._errorVars.delete(d),this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},reset:function(){throw a.trace&&a.fnenterprint(\"reset\"),new a.InternalError(\"reset not implemented\")},resolveArray:function(b){a.trace&&a.fnenterprint(\"resolveArray\"+b);var c=b.length;this._editVarMap.each(function(a,d){var e=d.index;c>e&&this.suggestValue(a,b[e])},this),this.resolve()},resolvePair:function(a,b){this.suggestValue(this._editVarList[0].v,a),this.suggestValue(this._editVarList[1].v,b),this.resolve()},resolve:function(){a.trace&&a.fnenterprint(\"resolve()\"),this.dualOptimize(),this._setExternalVariables(),this._infeasibleRows.clear(),this._resetStayConstants()},suggestValue:function(b,c){a.trace&&console.log(\"suggestValue(\"+b+\", \"+c+\")\");var d=this._editVarMap.get(b);if(!d)throw new a.Error(\"suggestValue for variable \"+b+\", but var is not an edit variable\");var e=c-d.prevEditConstant;return d.prevEditConstant=c,this.deltaEditConstant(e,d.editPlus,d.editMinus),this},solve:function(){return this._fNeedsSolving&&(this.optimize(this._objective),this._setExternalVariables()),this},setEditedValue:function(b,c){if(!this.columnsHasKey(b)&&null==this.rows.get(b))return b.value=c,this;if(!a.approx(c,b.value)){this.addEditVar(b),this.beginEdit();try{this.suggestValue(b,c)}catch(d){throw new a.InternalError(\"Error in setEditedValue\")}this.endEdit()}return this},addVar:function(b){if(!this.columnsHasKey(b)&&null==this.rows.get(b)){try{this.addStay(b)}catch(c){throw new a.InternalError(\"Error in addVar -- required failure is impossible\")}a.trace&&a.traceprint(\"added initial stay on \"+b)}return this},getInternalInfo:function(){var a=c.getInternalInfo.call(this);return a+=\"\\nSolver info:\\n\",a+=\"Stay Error Variables: \",a+=this._stayPlusErrorVars.length+this._stayMinusErrorVars.length,a+=\" (\"+this._stayPlusErrorVars.length+\" +, \",a+=this._stayMinusErrorVars.length+\" -)\\n\",a+=\"Edit Variables: \"+this._editVarMap.size,a+=\"\\n\"},getDebugInfo:function(){return\"\"+this+this.getInternalInfo()+\"\\n\"},toString:function(){var a=c.getInternalInfo.call(this);return a+=\"\\n_stayPlusErrorVars: \",a+=\"[\"+this._stayPlusErrorVars+\"]\",a+=\"\\n_stayMinusErrorVars: \",a+=\"[\"+this._stayMinusErrorVars+\"]\",a+=\"\\n\",a+=\"_editVarMap:\\n\"+this._editVarMap,a+=\"\\n\"},getConstraintMap:function(){return this._markerVars},addWithArtificialVariable:function(b){a.trace&&a.fnenterprint(\"addWithArtificialVariable: \"+b);var c=new a.SlackVariable({value:++this._artificialCounter,prefix:\"a\"}),d=new a.ObjectiveVariable({name:\"az\"}),e=b.clone();a.trace&&a.traceprint(\"before addRows:\\n\"+this),this.addRow(d,e),this.addRow(c,b),a.trace&&a.traceprint(\"after addRows:\\n\"+this),this.optimize(d);var f=this.rows.get(d);if(a.trace&&a.traceprint(\"azTableauRow.constant == \"+f.constant),!a.approx(f.constant,0))throw this.removeRow(d),this.removeColumn(c),new a.RequiredFailure;var g=this.rows.get(c);if(null!=g){if(g.isConstant)return this.removeRow(c),this.removeRow(d),void 0;var h=g.anyPivotableVariable();this.pivot(h,c)}a.assert(null==this.rows.get(c),\"rowExpression(av) == null\"),this.removeColumn(c),this.removeRow(d)},tryAddingDirectly:function(b){a.trace&&a.fnenterprint(\"tryAddingDirectly: \"+b);var c=this.chooseSubject(b);return null==c?(a.trace&&a.fnexitprint(\"returning false\"),!1):(b.newSubject(c),this.columnsHasKey(c)&&this.substituteOut(c,b),this.addRow(c,b),a.trace&&a.fnexitprint(\"returning true\"),!0)},chooseSubject:function(b){a.trace&&a.fnenterprint(\"chooseSubject: \"+b);var c=null,d=!1,e=!1,f=b.terms,g=f.escapingEach(function(a,b){if(d){if(!a.isRestricted&&!this.columnsHasKey(a))return{retval:a}}else if(a.isRestricted){if(!e&&!a.isDummy&&0>b){var f=this.columns.get(a);(null==f||1==f.size&&this.columnsHasKey(this._objective))&&(c=a,e=!0)}}else c=a,d=!0},this);if(g&&void 0!==g.retval)return g.retval;if(null!=c)return c;var h=0,g=f.escapingEach(function(a,b){return a.isDummy?(this.columnsHasKey(a)||(c=a,h=b),void 0):{retval:null}},this);if(g&&void 0!==g.retval)return g.retval;if(!a.approx(b.constant,0))throw new a.RequiredFailure;return h>0&&b.multiplyMe(-1),c},deltaEditConstant:function(b,c,d){a.trace&&a.fnenterprint(\"deltaEditConstant :\"+b+\", \"+c+\", \"+d);var e=this.rows.get(c);if(null!=e)return e.constant+=b,0>e.constant&&this._infeasibleRows.add(c),void 0;var f=this.rows.get(d);if(null!=f)return f.constant+=-b,0>f.constant&&this._infeasibleRows.add(d),void 0;var g=this.columns.get(d);g||console.log(\"columnVars is null -- tableau is:\\n\"+this),g.each(function(a){var c=this.rows.get(a),e=c.coefficientFor(d);c.constant+=e*b,a.isRestricted&&0>c.constant&&this._infeasibleRows.add(a)},this)},dualOptimize:function(){a.trace&&a.fnenterprint(\"dualOptimize:\");for(var b=this.rows.get(this._objective);this._infeasibleRows.size;){var c=this._infeasibleRows.values()[0];this._infeasibleRows.delete(c);var d=null,e=this.rows.get(c);if(e&&0>e.constant){var g,f=Number.MAX_VALUE,h=e.terms;if(h.each(function(c,e){if(e>0&&c.isPivotable){var h=b.coefficientFor(c);g=h/e,(f>g||a.approx(g,f)&&c.hashCodef.constant&&f.multiplyMe(-1),a.trace&&a.fnexitprint(\"returning \"+f),f},optimize:function(b){a.trace&&a.fnenterprint(\"optimize: \"+b),a.trace&&a.traceprint(\"\"+this),this._optimizeCount++;var c=this.rows.get(b);a.assert(null!=c,\"zRow != null\");for(var g,h,e=null,f=null;;){if(g=0,h=c.terms,h.escapingEach(function(a,b){return a.isPivotable&&g>b?(g=b,e=a,{brk:1}):void 0},this),g>=-d)return;a.trace&&console.log(\"entryVar:\",e,\"objectiveCoeff:\",g);var i=Number.MAX_VALUE,j=this.columns.get(e),k=0;if(j.each(function(b){if(a.trace&&a.traceprint(\"Checking \"+b),b.isPivotable){var c=this.rows.get(b),d=c.coefficientFor(e);a.trace&&a.traceprint(\"pivotable, coeff = \"+d),0>d&&(k=-c.constant/d,(i>k||a.approx(k,i)&&b.hashCodeb;b++){var c=this.rows.get(this._stayPlusErrorVars[b]);null==c&&(c=this.rows.get(this._stayMinusErrorVars[b])),null!=c&&(c.constant=0)}},_setExternalVariables:function(){a.trace&&a.fnenterprint(\"_setExternalVariables:\"),a.trace&&a.traceprint(\"\"+this),this._externalParametricVars.each(function(b){null!=this.rows.get(b)?a.trace&&console.log(\"Error: variable\"+b+\" in _externalParametricVars is basic\"):b.value=0},this),this._externalRows.each(function(a){var b=this.rows.get(a);a.value!=b.constant&&(a.value=b.constant)},this),this._fNeedsSolving=!1,this.onsolved()},onsolved:function(){},insertErrorVar:function(b,c){a.trace&&a.fnenterprint(\"insertErrorVar:\"+b+\", \"+c);var d=this._errorVars.get(c);d||(d=new a.HashSet,this._errorVars.set(b,d)),d.add(c)}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Timer=a.inherit({initialize:function(){this.isRunning=!1,this._elapsedMs=0},start:function(){return this.isRunning=!0,this._startReading=new Date,this},stop:function(){return this.isRunning=!1,this._elapsedMs+=new Date-this._startReading,this},reset:function(){return this.isRunning=!1,this._elapsedMs=0,this},elapsedTime:function(){return this.isRunning?(this._elapsedMs+(new Date-this._startReading))/1e3:this._elapsedMs/1e3}})}(this.c||module.parent.exports||{}),__cassowary_parser=function(){function a(a){return'\"'+a.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\x08/g,\"\\\\b\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\f/g,\"\\\\f\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x07\\x0B\\x0E-\\x1F\\x80-\\uFFFF]/g,escape)+'\"'}var b={parse:function(b,c){function k(a){g>e||(e>g&&(g=e,h=[]),h.push(a))}function l(){var a,b,c,d,f;if(d=e,f=e,a=z(),null!==a){if(c=m(),null!==c)for(b=[];null!==c;)b.push(c),c=m();else b=null;null!==b?(c=z(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)}else a=null,e=f;return null!==a&&(a=function(a,b){return b}(d,a[1])),null===a&&(e=d),a}function m(){var a,b,c,d;return c=e,d=e,a=P(),null!==a?(b=s(),null!==b?a=[a,b]:(a=null,e=d)):(a=null,e=d),null!==a&&(a=function(a,b){return b}(c,a[0])),null===a&&(e=c),a}function n(){var a;return b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k(\"any character\")),a}function o(){var a;return/^[a-zA-Z]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[a-zA-Z]\")),null===a&&(36===b.charCodeAt(e)?(a=\"$\",e++):(a=null,0===f&&k('\"$\"')),null===a&&(95===b.charCodeAt(e)?(a=\"_\",e++):(a=null,0===f&&k('\"_\"')))),a}function p(){var a;return f++,/^[\\t\\x0B\\f \\xA0\\uFEFF]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[\\\\t\\\\x0B\\\\f \\\\xA0\\\\uFEFF]\")),f--,0===f&&null===a&&k(\"whitespace\"),a}function q(){var a;return/^[\\n\\r\\u2028\\u2029]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[\\\\n\\\\r\\\\u2028\\\\u2029]\")),a}function r(){var a;return f++,10===b.charCodeAt(e)?(a=\"\\n\",e++):(a=null,0===f&&k('\"\\\\n\"')),null===a&&(\"\\r\\n\"===b.substr(e,2)?(a=\"\\r\\n\",e+=2):(a=null,0===f&&k('\"\\\\r\\\\n\"')),null===a&&(13===b.charCodeAt(e)?(a=\"\\r\",e++):(a=null,0===f&&k('\"\\\\r\"')),null===a&&(8232===b.charCodeAt(e)?(a=\"\\u2028\",e++):(a=null,0===f&&k('\"\\\\u2028\"')),null===a&&(8233===b.charCodeAt(e)?(a=\"\\u2029\",e++):(a=null,0===f&&k('\"\\\\u2029\"')))))),f--,0===f&&null===a&&k(\"end of line\"),a}function s(){var a,c,d;return d=e,a=z(),null!==a?(59===b.charCodeAt(e)?(c=\";\",e++):(c=null,0===f&&k('\";\"')),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=y(),null!==a?(c=r(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=z(),null!==a?(c=t(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d))),a}function t(){var a,c;return c=e,f++,b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k(\"any character\")),f--,null===a?a=\"\":(a=null,e=c),a}function u(){var a;return f++,a=v(),null===a&&(a=x()),f--,0===f&&null===a&&k(\"comment\"),a}function v(){var a,c,d,g,h,i,j;if(h=e,\"/*\"===b.substr(e,2)?(a=\"/*\",e+=2):(a=null,0===f&&k('\"/*\"')),null!==a){for(c=[],i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?(\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function w(){var a,c,d,g,h,i,j;if(h=e,\"/*\"===b.substr(e,2)?(a=\"/*\",e+=2):(a=null,0===f&&k('\"/*\"')),null!==a){for(c=[],i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null===d&&(d=q()),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null===d&&(d=q()),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?(\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function x(){var a,c,d,g,h,i,j;if(h=e,\"//\"===b.substr(e,2)?(a=\"//\",e+=2):(a=null,0===f&&k('\"//\"')),null!==a){for(c=[],i=e,j=e,f++,d=q(),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,d=q(),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?a=[a,c]:(a=null,e=h)}else a=null,e=h;return a}function y(){var a,b;for(a=[],b=p(),null===b&&(b=w(),null===b&&(b=x()));null!==b;)a.push(b),b=p(),null===b&&(b=w(),null===b&&(b=x()));return a}function z(){var a,b;for(a=[],b=p(),null===b&&(b=r(),null===b&&(b=u()));null!==b;)a.push(b),b=p(),null===b&&(b=r(),null===b&&(b=u()));return a}function A(){var a,b;return b=e,a=C(),null===a&&(a=B()),null!==a&&(a=function(a,b){return{type:\"NumericLiteral\",value:b}}(b,a)),null===a&&(e=b),a}function B(){var a,c,d;if(d=e,/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k(\"[0-9]\")),null!==c)for(a=[];null!==c;)a.push(c),/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k(\"[0-9]\"));else a=null;return null!==a&&(a=function(a,b){return parseInt(b.join(\"\"))}(d,a)),null===a&&(e=d),a}function C(){var a,c,d,g,h;return g=e,h=e,a=B(),null!==a?(46===b.charCodeAt(e)?(c=\".\",e++):(c=null,0===f&&k('\".\"')),null!==c?(d=B(),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)):(a=null,e=h),null!==a&&(a=function(a,b){return parseFloat(b.join(\"\"))}(g,a)),null===a&&(e=g),a}function D(){var a,c,d,g;if(g=e,/^[\\-+]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[\\\\-+]\")),a=null!==a?a:\"\",null!==a){if(/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k(\"[0-9]\")),null!==d)for(c=[];null!==d;)c.push(d),/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k(\"[0-9]\"));else c=null;null!==c?a=[a,c]:(a=null,e=g)}else a=null,e=g;return a}function E(){var a,b;return f++,b=e,a=F(),null!==a&&(a=function(a,b){return b}(b,a)),null===a&&(e=b),f--,0===f&&null===a&&k(\"identifier\"),a}function F(){var a,b,c,d,g;if(f++,d=e,g=e,a=o(),null!==a){for(b=[],c=o();null!==c;)b.push(c),c=o();null!==b?a=[a,b]:(a=null,e=g)}else a=null,e=g;return null!==a&&(a=function(a,b,c){return b+c.join(\"\")}(d,a[0],a[1])),null===a&&(e=d),f--,0===f&&null===a&&k(\"identifier\"),a}function G(){var a,c,d,g,h,i,j;return i=e,a=E(),null!==a&&(a=function(a,b){return{type:\"Variable\",name:b}}(i,a)),null===a&&(e=i),null===a&&(a=A(),null===a&&(i=e,j=e,40===b.charCodeAt(e)?(a=\"(\",e++):(a=null,0===f&&k('\"(\"')),null!==a?(c=z(),null!==c?(d=P(),null!==d?(g=z(),null!==g?(41===b.charCodeAt(e)?(h=\")\",e++):(h=null,0===f&&k('\")\"')),null!==h?a=[a,c,d,g,h]:(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j),null!==a&&(a=function(a,b){return b}(i,a[2])),null===a&&(e=i))),a}function H(){var a,b,c,d,f;return a=G(),null===a&&(d=e,f=e,a=I(),null!==a?(b=z(),null!==b?(c=H(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)):(a=null,e=f),null!==a&&(a=function(a,b,c){return{type:\"UnaryExpression\",operator:b,expression:c}}(d,a[0],a[2])),null===a&&(e=d)),a}function I(){var a;return 43===b.charCodeAt(e)?(a=\"+\",e++):(a=null,0===f&&k('\"+\"')),null===a&&(45===b.charCodeAt(e)?(a=\"-\",e++):(a=null,0===f&&k('\"-\"')),null===a&&(33===b.charCodeAt(e)?(a=\"!\",e++):(a=null,0===f&&k('\"!\"')))),a}function J(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=H(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"MultiplicativeExpression\",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function K(){var a;return 42===b.charCodeAt(e)?(a=\"*\",e++):(a=null,0===f&&k('\"*\"')),null===a&&(47===b.charCodeAt(e)?(a=\"/\",e++):(a=null,0===f&&k('\"/\"'))),a}function L(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=J(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"AdditiveExpression\",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function M(){var a;return 43===b.charCodeAt(e)?(a=\"+\",e++):(a=null,0===f&&k('\"+\"')),null===a&&(45===b.charCodeAt(e)?(a=\"-\",e++):(a=null,0===f&&k('\"-\"'))),a}function N(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=L(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"Inequality\",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function O(){var a;return\"<=\"===b.substr(e,2)?(a=\"<=\",e+=2):(a=null,0===f&&k('\"<=\"')),null===a&&(\">=\"===b.substr(e,2)?(a=\">=\",e+=2):(a=null,0===f&&k('\">=\"')),null===a&&(60===b.charCodeAt(e)?(a=\"<\",e++):(a=null,0===f&&k('\"<\"')),null===a&&(62===b.charCodeAt(e)?(a=\">\",e++):(a=null,0===f&&k('\">\"'))))),a}function P(){var a,c,d,g,h,i,j,l,m;if(j=e,l=e,a=N(),null!==a){for(c=[],m=e,d=z(),null!==d?(\"==\"===b.substr(e,2)?(g=\"==\",e+=2):(g=null,0===f&&k('\"==\"')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==d;)c.push(d),m=e,d=z(),null!==d?(\"==\"===b.substr(e,2)?(g=\"==\",e+=2):(g=null,0===f&&k('\"==\"')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==c?a=[a,c]:(a=null,e=l)}else a=null,e=l;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"Equality\",operator:c[e][1],left:d,right:c[e][3]};return d}(j,a[0],a[1])),null===a&&(e=j),a}function Q(a){a.sort();for(var b=null,c=[],d=0;a.length>d;d++)a[d]!==b&&(c.push(a[d]),b=a[d]);return c}function R(){for(var a=1,c=1,d=!1,f=0;Math.max(e,g)>f;f++){var h=b.charAt(f);\"\\n\"===h?(d||a++,c=1,d=!1):\"\\r\"===h||\"\\u2028\"===h||\"\\u2029\"===h?(a++,c=1,d=!0):(c++,d=!1)}return{line:a,column:c}}var d={start:l,Statement:m,SourceCharacter:n,IdentifierStart:o,WhiteSpace:p,LineTerminator:q,LineTerminatorSequence:r,EOS:s,EOF:t,Comment:u,MultiLineComment:v,MultiLineCommentNoLineTerminator:w,SingleLineComment:x,_:y,__:z,Literal:A,Integer:B,Real:C,SignedInteger:D,Identifier:E,IdentifierName:F,PrimaryExpression:G,UnaryExpression:H,UnaryOperator:I,MultiplicativeExpression:J,MultiplicativeOperator:K,AdditiveExpression:L,AdditiveOperator:M,InequalityExpression:N,InequalityOperator:O,LinearExpression:P};if(void 0!==c){if(void 0===d[c])throw Error(\"Invalid rule name: \"+a(c)+\".\")}else c=\"start\";var e=0,f=0,g=0,h=[],S=d[c]();if(null===S||e!==b.length){var T=Math.max(e,g),U=b.length>T?b.charAt(T):null,V=R();throw new this.SyntaxError(Q(h),U,T,V.line,V.column)}return S},toSource:function(){return this._source}};return b.SyntaxError=function(b,c,d,e,f){function g(b,c){var d,e;switch(b.length){case 0:d=\"end of input\";break;case 1:d=b[0];break;default:d=b.slice(0,b.length-1).join(\", \")+\" or \"+b[b.length-1]}return e=c?a(c):\"end of input\",\"Expected \"+d+\" but \"+e+\" found.\"}this.name=\"SyntaxError\",this.expected=b,this.found=c,this.message=g(b,c),this.offset=d,this.line=e,this.column=f},b.SyntaxError.prototype=Error.prototype,b}();\n}).call(\n (typeof module != \"undefined\") ?\n (module.compiled = true && module) : this\n);\n"]} \ No newline at end of file