Esempio n. 1
0
        private FormulaFormatFlag GetCurrentFormatSetting()
        {
            FormulaFormatFlag flag = FormulaFormatFlag.None;

            if (chkBeforeOperator.Checked)
            {
                flag |= FormulaFormatFlag.SpaceBeforeOperator;
            }
            if (chkAfterOperator.Checked)
            {
                flag |= FormulaFormatFlag.SpaceAfterOperator;
            }

            if (chkBeforeComma.Checked)
            {
                flag |= FormulaFormatFlag.SpaceBeforeComma;
            }
            if (chkAfterComma.Checked)
            {
                flag |= FormulaFormatFlag.SpaceAfterComma;
            }

            if (chkBeforeParamList.Checked)
            {
                flag |= FormulaFormatFlag.SpaceBeforeParameterList;
            }
            if (chkAfterParamList.Checked)
            {
                flag |= FormulaFormatFlag.SpaceAfterParameterList;
            }

            if (chkBeforeSubExpr.Checked)
            {
                flag |= FormulaFormatFlag.SpaceBeforeSubExpression;
            }
            if (chkAfterSubExpr.Checked)
            {
                flag |= FormulaFormatFlag.SpaceAfterSubExpression;
            }

            if (chkBeforePercent.Checked)
            {
                flag |= FormulaFormatFlag.SpaceBeforePercent;
            }
            if (chkAfterMinus.Checked)
            {
                flag |= FormulaFormatFlag.SpaceAfterMinus;
            }

            if (chkFunctionNameUppercase.Checked)
            {
                flag |= FormulaFormatFlag.FunctionNameAutoUppercase;
            }
            if (chkSpaceAfterFunctionName.Checked)
            {
                flag |= FormulaFormatFlag.SpaceAfterFunctionName;
            }

            return(flag);
        }
Esempio n. 2
0
        private void SetFormatStylesByFlag(FormulaFormatFlag flag)
        {
            isUpdatingUI = true;

            chkBeforeOperator.Checked = flag.Has(FormulaFormatFlag.SpaceBeforeOperator);
            chkAfterOperator.Checked  = flag.Has(FormulaFormatFlag.SpaceAfterOperator);

            chkBeforeComma.Checked = flag.Has(FormulaFormatFlag.SpaceBeforeComma);
            chkAfterComma.Checked  = flag.Has(FormulaFormatFlag.SpaceAfterComma);

            chkBeforeParamList.Checked = flag.Has(FormulaFormatFlag.SpaceBeforeParameterList);
            chkAfterParamList.Checked  = flag.Has(FormulaFormatFlag.SpaceAfterParameterList);

            chkBeforeSubExpr.Checked = flag.Has(FormulaFormatFlag.SpaceBeforeSubExpression);
            chkAfterSubExpr.Checked  = flag.Has(FormulaFormatFlag.SpaceAfterSubExpression);

            chkBeforePercent.Checked = flag.Has(FormulaFormatFlag.SpaceBeforePercent);
            chkAfterMinus.Checked    = flag.Has(FormulaFormatFlag.SpaceAfterMinus);

            chkFunctionNameUppercase.Checked  = flag.Has(FormulaFormatFlag.FunctionNameAutoUppercase);
            chkSpaceAfterFunctionName.Checked = flag.Has(FormulaFormatFlag.SpaceAfterFunctionName);

            isUpdatingUI = false;

            GenerateFormula();
        }
Esempio n. 3
0
 private static void AddSpaceIfFlag(StringBuilder sb, FormulaFormatFlag flag, FormulaFormatFlag target)
 {
     if ((flag & target) == target && (sb.Length == 0 || sb[sb.Length - 1] != ' '))
     {
         sb.Append(' ');
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Generate formula form a syntax tree in memory by specified format styles
        /// </summary>
        /// <param name="node">root node of syntax tree used to generate formula</param>
        /// <param name="flag">generating format style flags</param>
        /// <returns>formula generated from a syntax tree</returns>
        internal static string Generate(string input, STNode node, FormulaFormatFlag flag)
        {
            StringBuilder sb = new StringBuilder();

            GenerateExpression(sb, input, node, flag);
            if (sb[sb.Length - 1] == ' ')
            {
                sb.Remove(sb.Length - 1, 1);
            }
            return(sb.ToString());
        }
Esempio n. 5
0
        private void GenerateFormula()
        {
            if (currentSyntaxTree != null)
            {
                FormulaFormatFlag flag = GetCurrentFormatSetting();

                string formula = FormulaRefactor.Generate(txtGeneratedFormula.Text, currentSyntaxTree, flag);

                txtGeneratedFormula.Text = formula;
            }
            else
            {
                txtGeneratedFormula.Text = string.Empty;
            }
        }
Esempio n. 6
0
 public static bool Has(this FormulaFormatFlag flag, FormulaFormatFlag target)
 {
     return((flag & target) == target);
 }
Esempio n. 7
0
        private static void GenerateExpression(StringBuilder sb, string input, STNode node, FormulaFormatFlag flag)
        {
            switch (node.Type)
            {
            default:
                sb.Append(node.ToString());
                break;

            case STNodeType.CELL:
                sb.Append(((STCellNode)node).Position.ToAddress());
                break;

            case STNodeType.RANGE:
                sb.Append(((STRangeNode)node).Range.ToAddress());
                break;

            case STNodeType.NUMBER:
                sb.Append(((STNumberNode)node).Value);
                break;

            case STNodeType.STRING:
                sb.Append(((STStringNode)node).Text);
                break;

            case STNodeType.IDENTIFIER:
                sb.Append(((STIdentifierNode)node).Identifier);
                break;

            case STNodeType.ADD: GenerateOperatorString(sb, input, "+", node, flag); break;

            case STNodeType.SUB: GenerateOperatorString(sb, input, "-", node, flag); break;

            case STNodeType.MUL: GenerateOperatorString(sb, input, "*", node, flag); break;

            case STNodeType.DIV: GenerateOperatorString(sb, input, "/", node, flag); break;

            case STNodeType.POW: GenerateOperatorString(sb, input, "^", node, flag); break;

            case STNodeType.GREAT_THAN: GenerateOperatorString(sb, input, ">", node, flag); break;

            case STNodeType.GREAT_EQUALS: GenerateOperatorString(sb, input, ">=", node, flag); break;

            case STNodeType.LESS_THAN: GenerateOperatorString(sb, input, "<", node, flag); break;

            case STNodeType.LESS_EQUALS: GenerateOperatorString(sb, input, "<=", node, flag); break;

            case STNodeType.EQUALS: GenerateOperatorString(sb, input, "=", node, flag); break;

            case STNodeType.CONNECT: GenerateOperatorString(sb, input, "&", node, flag); break;

            case STNodeType.UNARY_PERCENT:
                GenerateExpression(sb, input, node.Children[0], flag);
                AddSpaceIfFlag(sb, flag, FormulaFormatFlag.SpaceBeforePercent);
                sb.Append('%');
                break;

            case STNodeType.FUNCTION_CALL:
                var    funNode = (STFunctionNode)node;
                string funName = funNode.Name;
                if ((flag & FormulaFormatFlag.FunctionNameAutoUppercase) == FormulaFormatFlag.FunctionNameAutoUppercase)
                {
                    sb.Append(funName.ToUpper());
                }
                else
                {
                    sb.Append(funName);
                }
                AddSpaceIfFlag(sb, flag, FormulaFormatFlag.SpaceAfterFunctionName);
                sb.Append('(');
                AddSpaceIfFlag(sb, flag, FormulaFormatFlag.SpaceBeforeParameterList);
                for (int i = 0; i < node.Children.Count; i++)
                {
                    if (i > 0)
                    {
                        AddSpaceIfFlag(sb, flag, FormulaFormatFlag.SpaceBeforeComma);
                        sb.Append(',');
                        AddSpaceIfFlag(sb, flag, FormulaFormatFlag.SpaceAfterComma);
                    }
                    GenerateExpression(sb, input, node.Children[i], flag);
                }
                AddSpaceIfFlag(sb, flag, FormulaFormatFlag.SpaceAfterParameterList);
                sb.Append(')');
                break;

            case STNodeType.SUB_EXPR:
                sb.Append('(');
                AddSpaceIfFlag(sb, flag, FormulaFormatFlag.SpaceBeforeSubExpression);
                GenerateExpression(sb, input, node.Children[0], flag);
                AddSpaceIfFlag(sb, flag, FormulaFormatFlag.SpaceAfterSubExpression);
                sb.Append(')');
                break;

            case STNodeType.UNARY_MINUS:
                sb.Append('-');
                AddSpaceIfFlag(sb, flag, FormulaFormatFlag.SpaceAfterMinus);
                GenerateExpression(sb, input, node.Children[0], flag);
                break;
            }
        }
Esempio n. 8
0
        private static void GenerateOperatorString(StringBuilder sb, string input, string op, STNode node, FormulaFormatFlag flag)
        {
            var left  = node.Children[0];
            var right = node.Children[1];

            GenerateExpression(sb, input, left, flag);
            if ((flag & FormulaFormatFlag.SpaceBeforeOperator) == FormulaFormatFlag.SpaceBeforeOperator)
            {
                sb.Append(' ');
            }
            sb.Append(op);
            if ((flag & FormulaFormatFlag.SpaceAfterOperator) == FormulaFormatFlag.SpaceAfterOperator)
            {
                sb.Append(' ');
            }
            GenerateExpression(sb, input, right, flag);
        }