public DefaultExpressionCompiler(ICompiledHandlebarsConfiguration configuration, ClosureFeature closureFeature)
 {
     _closureFeature       = closureFeature;
     _templateClosure      = closureFeature?.TemplateClosure;
     _closure              = closureFeature?.ClosureInternal;
     _expressionMiddleware = configuration.ExpressionMiddleware;
 }
Beispiel #2
0
        private ExpressionContainer GetOrAddExpressionContainer(IfDefSet ifDefs)
        {
            ExpressionContainer container;

            if (_knownReferences.TryGetValue(ifDefs, out container))
            {
                return(container);
            }

            if (ifDefs.Count == 1)
            {
                return(AddIfDefExpressionContainer(ifDefs.First()));
            }

            container = new ExpressionContainer();
            var listContainers = new List <ExpressionContainer>(ifDefs.Count);

            foreach (var ifDef in ifDefs)
            {
                listContainers.Add(GetOrAddExpressionContainer(new IfDefSet(ifDef)));
            }
            var operands = new Operands(listContainers.Select(_ => _.FlatExpression.Operands).SelectMany(_ => _)
                                        .Distinct().OrderBy(_ => _).ToArray());
            var flatExpr = new FlatExpression(operands);

            foreach (var c in listContainers)
            {
                flatExpr = flatExpr.Or(c.FlatExpression);
            }

            container.FlatExpression = flatExpr;
            _knownReferences.Add(ifDefs, container);
            return(container);
        }
        private void GenerateCommandParameterProperties(List <ExpressionContainer> expressionContainers)
        {
            foreach (IGrouping <string, ExpressionContainer> expressions in expressionContainers.GroupBy(x => x.TargetObject))
            {
                const string attributeName = "CommandParameter";
                Regex        commandParameterEventRegex = new Regex("^(?<eventName>[a-zA-Z0-9_]+)\\." + attributeName, RegexOptions.Compiled | RegexOptions.IgnoreCase);
                List <ExpressionContainer> commandParameterEventExpressions = expressions.Where(x => commandParameterEventRegex.IsMatch(x.TargetField)).ToList();
                ExpressionContainer        commandParameterExpression       = expressions.SingleOrDefault(x => attributeName.Equals(x.TargetField, StringComparison.InvariantCultureIgnoreCase));

                commandParameterEventExpressions.ForEach(x => x.IsCommandParameterExpression = true);
                if (commandParameterExpression != null)
                {
                    commandParameterExpression.IsCommandParameterExpression = true;
                }

                foreach (ExpressionContainer expression in commandParameterEventExpressions)
                {
                    //find associated event (if exists)
                    string eventName = commandParameterEventRegex.Match(expression.TargetField).Groups["eventName"].Value;
                    ExpressionContainer associatedExpression = expressions.FirstOrDefault(x => eventName.Equals(x.TargetField, StringComparison.InvariantCultureIgnoreCase) && !x.IsCommandParameterExpression);
                    if (associatedExpression != null)
                    {
                        // create proxy property CommandParameterProxy to handle this
                        var result = CodeGeneratorHelper.GenerateProxyProperty(NameGeneratorHelper.GetCommandParameterName(), "CommandParameterProxy");

                        Properties.Add(result.Item2);
                        Fields.Add(result.Item1);

                        string propertyName = CodeGeneratorHelper.GetPropertyReference(result.Item2).PropertyName;

                        // retarget the binding expression to this new property and to the Value field
                        expression.TargetObject = propertyName;
                        expression.TargetField  = "Value";

                        associatedExpression.CommandParameterTarget = propertyName;
                    }
                }

                if (commandParameterExpression != null)
                {
                    // create proxy property CommandParameterProxy to handle this
                    var result = CodeGeneratorHelper.GenerateProxyProperty(NameGeneratorHelper.GetCommandParameterName(), "CommandParameterProxy");

                    Properties.Add(result.Item2);
                    Fields.Add(result.Item1);

                    string propertyName = CodeGeneratorHelper.GetPropertyReference(result.Item2).PropertyName;

                    // retarget the binding expression to this new property and to the Value field
                    commandParameterExpression.TargetObject = propertyName;
                    commandParameterExpression.TargetField  = "Value";

                    foreach (ExpressionContainer associatedExpression in expressions.Where(x => string.IsNullOrEmpty(x.CommandParameterTarget) && !x.IsCommandParameterExpression))
                    {
                        associatedExpression.CommandParameterTarget = propertyName;
                    }
                }
            }
        }
Beispiel #4
0
        public GageRRFieldBuilder(IExpressionsSerializer serializer, string expressionXml)
        {
            _expressionXml = expressionXml;
            _expressionContainer = serializer.Deserialize(expressionXml);

            _connections = GetRelatedConnections();
            _sourceFields = GetRelatedSourceFields();
        }
Beispiel #5
0
        public void ToExpressionWithInterferingTypeFromOtherAssembly()
        {
            var container  = new ExpressionContainer();
            var expression = container.GetExpression();
            var node       = expression.ToExpressionNode();

            var result = node.ToExpression();

            ExpressionAssert.AreEqual(expression, result);
        }
Beispiel #6
0
    GameObject SpawnExpressionContainer(Expression e, Vector3 pos, Quaternion rot)
    {
        GameObject expressionContainerInstance =
            Instantiate(ExpressionContainerPrefab, pos, rot);
        ExpressionContainer expressionContainerScript =
            expressionContainerInstance.GetComponent <ExpressionContainer>();

        expressionContainerScript.Expression = e;

        return(expressionContainerInstance);
    }
Beispiel #7
0
    GameObject SpawnExpressionContainer(Expression e, Vector3 pos, Quaternion rot, Transform parent)
    {
        GameObject expressionContainerInstance =
            Instantiate(expressionContainerPrefab, parent.position + pos, parent.rotation * Quaternion.Euler(0, 0, 90) * Quaternion.Euler(90, 0, 0) * rot);
        ExpressionContainer expressionContainerScript =
            expressionContainerInstance.GetComponent <ExpressionContainer>();

        expressionContainerScript.Expression = e;

        return(expressionContainerInstance);
    }
Beispiel #8
0
        protected override async Task Context()
        {
            await base.Context();

            _snapshot = new ExpressionContainer {
                Name = "Plasma", Value = 5
            };
            _expressionContainerMapperContext.Molecule             = _enzyme;
            _expressionContainerMapperContext.ExpressionParameters = new Cache <string, IParameter> {
                { _snapshot.Name, _relativeExpressionParameter }
            };
        }
Beispiel #9
0
        private void SwagItemsControl_Remove(object sender, RoutedEventArgs e)
        {
            FrameworkElement  fe  = (FrameworkElement)e.OriginalSource;
            BooleanExpression exp = (BooleanExpression)fe.DataContext;

            if (exp.Parent == null)
            {
                ExpressionContainer.Remove(exp);
            }
            else
            {
                exp.Parent.Children.Remove(exp);
            }
        }
Beispiel #10
0
        public static double Calculate(ExpressionContainer container)
        {
            ExpressionContainer resultContainer;

            // Считаем приоритетные операции.
            resultContainer = CalculateContainer(container, typeof(ExpressionPriorityOperation));

            // Считаем базовые операции
            resultContainer = CalculateContainer(container, typeof(ExpressionSimpleOperation));

            ExpressionNumber result = (ExpressionNumber)resultContainer.Get();

            return(result.Convert());
        }
Beispiel #11
0
        private ExpressionContainer AddIfDefExpressionContainer(IfDefReference ifdef)
        {
            var expr = new FlatExpression(new Operands(ifdef.Node.Value),
                                          new FlatExpressionLine(ifdef.Defined ? 1ul : 0ul));

            if (ifdef.Node.Extra.Define.IfDefs?.Count > 0)
            {
                var parentIfDefs   = ifdef.Node.Extra.Define.IfDefs;
                var listContainers = new List <ExpressionContainer>(parentIfDefs.Count);
                foreach (var ifDef in parentIfDefs)
                {
                    listContainers.Add(GetOrAddExpressionContainer(new IfDefSet(ifDef)));
                }

                var operands = new Operands(listContainers
                                            .Select(_ => _.FlatExpression.Operands.Concat(expr.Operands))
                                            .SelectMany(_ => _)
                                            .Distinct()
                                            .OrderBy(_ => _)
                                            .ToArray());
                var flatExpr = new FlatExpression(operands);
                foreach (var c in listContainers)
                {
                    flatExpr = flatExpr.Or(c.FlatExpression);
                }

                expr = flatExpr.And(expr);
            }

            if (ifdef.Defined)
            {
                ifdef.Node.Extra.Define.IfDefExpression = expr.AsTreeExpression().ToString();
            }
            else
            {
                ifdef.Node.Extra.Define.IfNotDefExpression = expr.AsTreeExpression().ToString();
            }
            var container = new ExpressionContainer {
                FlatExpression = expr
            };

            _knownReferences.Add(new IfDefSet(ifdef), container);
            return(container);
        }
Beispiel #12
0
        private static ExpressionContainer CalculateContainer(ExpressionContainer container, System.Type operationType)
        {
            List <ExpressionElement> expression = container.GetExpression();

            bool isComplited = false;

            while (isComplited == false)
            {
                // Идея просчёт в том, что мы последовательно обходим всё выражение.
                // Если нам попадаются простые операции(+, -), мы их пропускаем,
                // если попались приоритетные операции, то мы их считаем и сразу удаляем
                // из выражения записывая на их место результат.
                isComplited = true;

                for (int i = 0; i < expression.Count; i++)
                {
                    ExpressionElement element = expression[i];

                    if (element is ExpressionNumber || element.GetType().IsSubclassOf(operationType) == false)
                    {
                        continue;
                    }

                    ExpressionOperation operation = (ExpressionOperation)element;
                    ExpressionNumber    number1   = (ExpressionNumber)expression[i - 1];
                    ExpressionNumber    number2   = (ExpressionNumber)expression[i + 1];

                    expression[i - 1] = new ExpressionNumber(operation.Calculate(number1, number2).ToString());
                    expression.Remove(expression[i + 1]);
                    expression.Remove(expression[i]);

                    isComplited = false;
                    break;
                }
            }

            return(new ExpressionContainer(expression));
        }
 public CompilationContextArgs(CompilationContext context)
 {
     BindingContext = new ExpressionContainer <BindingContext>(context.BindingContext);
     EncodedWriter  = new ExpressionContainer <EncodedTextWriter>(context.EncodedWriter);
 }
Beispiel #14
0
        protected override Task Context()
        {
            _parameterMapper                   = A.Fake <ParameterMapper>();
            _expressionContainerMapper         = A.Fake <ExpressionContainerMapper>();
            _executionContext                  = A.Fake <IExecutionContext>();
            _individualMoleculeFactoryResolver = A.Fake <IIndividualMoleculeFactoryResolver>();
            _ontogenyMapper = A.Fake <OntogenyMapper>();
            _ontogenyTask   = A.Fake <IOntogenyTask <Individual> >();
            _individualMoleculeParametersTask = A.Fake <IMoleculeParameterTask>();

            sut = new MoleculeMapper(_parameterMapper, _expressionContainerMapper,
                                     _ontogenyMapper, _individualMoleculeFactoryResolver, _executionContext, _ontogenyTask, _individualMoleculeParametersTask);

            _ontogeny = new DatabaseOntogeny
            {
                Name = "Ontogeny"
            };

            _enzyme = new IndividualEnzyme
            {
                Name        = "Enzyme",
                Description = "Help",
                Ontogeny    = _ontogeny,
            };

            _transporter = new IndividualTransporter
            {
                Name        = "Transporter",
                Description = "Help"
            };

            _otherProtein = new IndividualOtherProtein
            {
                Name        = "OtherProtein",
                Description = "Help"
            };

            _enzymeGlobalParameter         = DomainHelperForSpecs.ConstantParameterWithValue(5, isDefault: true).WithName(CoreConstants.Parameters.HALF_LIFE_LIVER);
            _enzymeGlobalParameterSnapshot = new Parameter();

            A.CallTo(() => _parameterMapper.MapToSnapshot(_enzymeGlobalParameter)).Returns(_enzymeGlobalParameterSnapshot);

            _expressionContainer1 = new MoleculeExpressionContainer {
                Name = "Exp Container1"
            };
            _expressionContainer2 = new MoleculeExpressionContainer {
                Name = "Exp Container2"
            };
            _enzyme.AddChildren(_expressionContainer1, _expressionContainer2, _enzymeGlobalParameter);

            _relativeExpressionParameter1     = DomainHelperForSpecs.ConstantParameterWithValue(0.5).WithName(CoreConstants.Parameters.REL_EXP);
            _relativeExpressionParameterNorm1 = DomainHelperForSpecs.ConstantParameterWithValue(1).WithName(CoreConstants.Parameters.REL_EXP_NORM);
            _expressionContainer1.Add(_relativeExpressionParameter1);
            _expressionContainer1.Add(_relativeExpressionParameterNorm1);

            _relativeExpressionParameterNotSet     = DomainHelperForSpecs.ConstantParameterWithValue(0).WithName(CoreConstants.Parameters.REL_EXP);
            _relativeExpressionParameterNotSetNorm = DomainHelperForSpecs.ConstantParameterWithValue(0).WithName(CoreConstants.Parameters.REL_EXP_NORM);
            _expressionContainer2.Add(_relativeExpressionParameterNotSet);
            _expressionContainer2.Add(_relativeExpressionParameterNotSetNorm);

            _relativeExpressionContainerSnapshot1 = new ExpressionContainer();
            _relativeExpressionContainerSnapshot2 = new ExpressionContainer();

            A.CallTo(() => _expressionContainerMapper.MapToSnapshot(_expressionContainer1)).Returns(_relativeExpressionContainerSnapshot1);
            A.CallTo(() => _expressionContainerMapper.MapToSnapshot(_expressionContainer2)).Returns(_relativeExpressionContainerSnapshot2);

            _snapshotOntogeny = new Snapshots.Ontogeny();
            A.CallTo(() => _ontogenyMapper.MapToSnapshot(_ontogeny)).Returns(_snapshotOntogeny);
            _individual = new Individual();

            return(_completed);
        }
        protected override Task Context()
        {
            _parameterMapper           = A.Fake <ParameterMapper>();
            _expressionContainerMapper = A.Fake <ExpressionContainerMapper>();
            _expressionProfileFactory  = A.Fake <IExpressionProfileFactory>();
            _ontogenyMapper            = A.Fake <OntogenyMapper>();
            _ontogenyTask           = A.Fake <IOntogenyTask>();
            _moleculeExpressionTask = A.Fake <IMoleculeExpressionTask <Individual> >();
            _moleculeParameterTask  = A.Fake <IMoleculeParameterTask>();
            sut = new ExpressionProfileMapper(
                _parameterMapper,
                _expressionContainerMapper,
                _ontogenyMapper,
                _ontogenyTask,
                _moleculeExpressionTask,
                _expressionProfileFactory,
                _moleculeParameterTask);

            _ontogeny = new DatabaseOntogeny
            {
                Name = "Ontogeny"
            };

            _expressionProfileEnzyme = DomainHelperForSpecs.CreateExpressionProfile <IndividualEnzyme>("Enzyme");
            _expressionProfileEnzyme.Molecule.Ontogeny = _ontogeny;
            _expressionProfileEnzyme.Description       = "Help";

            _expressionProfileTransporter             = DomainHelperForSpecs.CreateExpressionProfile <IndividualTransporter>("Transporter");
            _expressionProfileTransporter.Description = "Help";

            _expressionProfileOtherProtein = DomainHelperForSpecs.CreateExpressionProfile <IndividualOtherProtein>("OtherProtein");

            _enzymeGlobalParameter = DomainHelperForSpecs.ConstantParameterWithValue(5, isDefault: true)
                                     .WithName(CoreConstants.Parameters.HALF_LIFE_LIVER);
            _enzymeGlobalParameterSnapshot = new Parameter();

            A.CallTo(() => _parameterMapper.MapToSnapshot(_enzymeGlobalParameter)).Returns(_enzymeGlobalParameterSnapshot);

            _expressionContainer1 = new MoleculeExpressionContainer {
                Name = "Exp Container1"
            };
            _expressionContainer2 = new MoleculeExpressionContainer {
                Name = "Exp Container2"
            };
            _expressionProfileEnzyme.Individual.AddChildren(_expressionContainer1, _expressionContainer2, _enzymeGlobalParameter);
            _expressionProfileEnzyme.Molecule.DowncastTo <IndividualEnzyme>().Localization = Localization.Intracellular | Localization.BloodCellsMembrane;

            _relativeExpressionParameter1 = DomainHelperForSpecs.ConstantParameterWithValue(0.5).WithName(CoreConstants.Parameters.REL_EXP);
            _expressionContainer1.Add(_relativeExpressionParameter1);

            _relativeExpressionParameterNotSet = DomainHelperForSpecs.ConstantParameterWithValue(0).WithName(CoreConstants.Parameters.REL_EXP);
            _expressionContainer2.Add(_relativeExpressionParameterNotSet);

            _relativeExpressionContainerSnapshot1 = new ExpressionContainer();
            _relativeExpressionContainerSnapshot2 = new ExpressionContainer();

            A.CallTo(() => _expressionContainerMapper.MapToSnapshot(_expressionContainer1)).Returns(_relativeExpressionContainerSnapshot1);
            A.CallTo(() => _expressionContainerMapper.MapToSnapshot(_expressionContainer2)).Returns(_relativeExpressionContainerSnapshot2);

            _snapshotOntogeny = new Snapshots.Ontogeny();
            A.CallTo(() => _ontogenyMapper.MapToSnapshot(_ontogeny)).Returns(_snapshotOntogeny);
            _individual = new Individual();

            return(_completed);
        }
Beispiel #16
0
 private void SwagItemsControl_Clear(object sender, RoutedEventArgs e)
 {
     ExpressionContainer.Clear();
     CollectionViewSource.GetDefaultView(ExpressionContainer).Refresh();
 }
 public ClosureVisitor(ExpressionContainer <object[]> arg, TemplateClosure templateClosure)
 {
     _templateClosure    = templateClosure;
     _templateClosureArg = arg;
 }
 public ClosureExpressionMiddleware(TemplateClosure closure, ExpressionContainer <object[]> closureArg)
 {
     _closure    = closure;
     _closureArg = closureArg;
 }
 /// <summary>
 /// Serializes the designer to a deserializeble string.
 /// </summary>
 /// <param name="expression">An instance of <see cref="ExpressionContainer"/> to serialize.</param>
 /// <returns><see cref="System.String"/></returns>
 public abstract string Serialize(ExpressionContainer expression);