Пример #1
0
        public override bool TryCreate(string pattern, FormulaBuilder builder, out FormulaItem item)
        {
            item = null;


            FunctionInfo functionInfo = FormulaBuilderTools.Instance.GetFunctionElements(pattern);

            if (!functionInfo.IsOK)
            {
                return(false);
            }

            string functionName = functionInfo.Name;

            if (!_functions.Keys.Contains(functionName))
            {
                return(false);
            }

            Type functionType = _functions[functionName];

            item         = (FunctionItem)Activator.CreateInstance(functionType);
            item.Pattern = pattern;

            string[] args = functionInfo.Arguments.Split(FUNCTION_ARGUMENT_SEPARATOR);

            foreach (string arg in args)
            {
                FormulaItem argItem = builder.Create(arg);
                (item as FunctionItem).Arguments.Add(argItem);
            }

            return(true);
        }
Пример #2
0
        public override bool TryCreate(string pattern, FormulaBuilder builder, out FormulaItem item)
        {
            item = null;

            string trimmed = pattern.Trim();

            ValueInfo valueInfo = FormulaBuilderTools.Instance.GetValueInfo(trimmed);

            if (!valueInfo.IsOk)
            {
                return(false);
            }

            item         = new ValueItem();
            item.Pattern = pattern;
            (item as ValueItem).Value = valueInfo.Value;

            UnitItem unit = new UnitItem();

            unit.Unit    = valueInfo.Unit;
            unit.Pattern = valueInfo.Unit;
            (item as ValueItem).Arguments.Add(unit);



            return(true);
        }
Пример #3
0
        public override bool TryCreate(string pattern, FormulaBuilder builder, out FormulaItem item)
        {
            item = null;
            string trimmed = pattern.Trim();



            bool isMatchRound   = Regex.IsMatch(trimmed, REGEX_ROUND);
            bool isMatchSquared = Regex.IsMatch(trimmed, REGEX_SQUARED);
            bool isAnyMatch     = isMatchRound || isMatchSquared;



            if (!isAnyMatch)
            {
                return(false);
            }

            item         = new BracketItem();
            item.Pattern = pattern;

            string args = null;

            if (isMatchRound)
            {
                args = RegexTools.GetValue(pattern, REGEX_ROUND, "args");
            }

            if (isMatchSquared)
            {
                args = RegexTools.GetValue(pattern, REGEX_SQUARED, "args");
            }

            FormulaItem argsItem = builder.Create(args);

            (item as BracketItem).Arguments.Add(argsItem);
            if (isMatchRound)
            {
                (item as BracketItem).TypeOfBracket = BracketShapeType.Round;
            }

            if (isMatchSquared)
            {
                (item as BracketItem).TypeOfBracket = BracketShapeType.Squared;
            }


            return(true);
        }
Пример #4
0
        public override bool TryCreate(string pattern, FormulaBuilder builder, out FormulaItem item)
        {
            string trimmed = pattern.Trim();

            item = null;
            bool isSymbol = Regex.IsMatch(trimmed, REGEX) || Regex.IsMatch(trimmed, REGEX2);

            if (!isSymbol)
            {
                return(false);
            }

            item         = new SymbolItem();
            item.Pattern = pattern;
            (item as SymbolItem).Symbol = trimmed;

            return(true);
        }
Пример #5
0
        public override bool TryCreate(string pattern, FormulaBuilder builder, out FormulaItem item)
        {
            item    = null;
            pattern = pattern.Trim();
            string args = RegexTools.GetValue(pattern, REGEX, "args");

            if (string.IsNullOrEmpty(args))
            {
                return(false);
            }

            item         = new FunctionAbs();
            item.Pattern = pattern;
            FormulaItem arg = builder.Create(args);

            (item as FunctionAbs).Arguments.Add(arg);

            return(true);
        }
Пример #6
0
        public override bool TryCreate(string pattern, FormulaBuilder builder, out FormulaItem item)
        {
            item = null;

            List <string> elements = FormulaBuilderTools.Instance.GetElements(pattern, OperationType.Power);

            if (elements.Count != 3 || elements[1] != "^")
            {
                return(false);
            }

            FormulaItem baseItem     = builder.Create(elements[0]);
            FormulaItem exponentItem = builder.Create(elements[2]);

            item         = new FunctionPow();
            item.Pattern = pattern;
            (item as FunctionItem).Arguments.Add(baseItem);
            (item as FunctionItem).Arguments.Add(exponentItem);

            return(true);
        }
Пример #7
0
        public override bool TryCreate(string pattern, FormulaBuilder builder, out FormulaItem item)
        {
            item = null;

            List <string> elements = FormulaBuilderTools.Instance.GetElements(pattern, OperationType.AddSubstr);

            if (elements.Count < 3)
            {
                return(false);
            }

            item         = new FunctionSum();
            item.Pattern = pattern;

            for (int i = 0; i < elements.Count; ++i)
            {
                string element = elements[i];
                if (element == "+" || element == "-")
                {
                    continue;
                }


                double coeff = 1.0;
                if (i > 0)
                {
                    coeff = (elements[i - 1] == "+") ? 1.0 : -1.0;
                }

                FormulaItem arg = builder.Create(element);
                (item as FunctionSum).Arguments.Add(arg);
                (item as FunctionSum).Coeffs.Add(coeff);
            }

            return(true);
        }
Пример #8
0
        public override bool TryCreate(string pattern, FormulaBuilder builder, out FormulaItem item)
        {
            item = null;

            List <string> elements = FormulaBuilderTools.Instance.GetElements(pattern, OperationType.MultiDivide);

            if (elements.Count < 3)
            {
                return(false);
            }

            item         = new FunctionMultiply();
            item.Pattern = pattern;

            for (int i = 0; i < elements.Count; ++i)
            {
                string element = elements[i];
                if (element == "*" || element == "/")
                {
                    continue;
                }


                bool coeff = true;
                if (i > 0)
                {
                    coeff = (elements[i - 1] == "*") ? true : false;
                }

                FormulaItem arg = builder.Create(element);
                (item as FunctionMultiply).Arguments.Add(arg);
                (item as FunctionMultiply).Flags.Add(coeff);
            }

            return(true);
        }
Пример #9
0
 public abstract bool TryCreate(string pattern, FormulaBuilder builder, out FormulaItem item);