コード例 #1
0
ファイル: ExprTreeVisualizer.cs プロジェクト: won983212/UMPL
        private static FormulaElement ConvertAsFormulaElement(TypeTree expr, int size)
        {
            return(expr.ProcessCalculate(
                       (op, e1, e2) =>
            {
                if (op.op == '/')
                {
                    return new FormulaToken(new FractionElement(e1.ToFormulaElement(), e2.ToFormulaElement()));
                }
                else if (op.op == '^')
                {
                    return new FormulaToken(new PowerElement(e1.ToFormulaElement(), e2.ToFormulaElement()));
                }
                else
                {
                    if (e1.priority != -1 && e1.priority < op.priority)
                    {
                        e1.PutBracket();
                    }
                    if (e2.priority != -1 && (e2.priority < op.priority || (e2.priority == op.priority && op.op == '-')))
                    {
                        e2.PutBracket();
                    }

                    string opText = op.ToString();
                    if (op.op == '*')
                    {
                        if (e1.IsType(typeof(MatrixElement)) && e2.IsType(typeof(MatrixElement)))
                        {
                            opText = "×";
                        }
                        else
                        {
                            opText = "·";
                        }
                    }

                    return new FormulaToken(op.priority, e1, e2, new TextElement(opText, size));
                }
            },
                       (node) =>
            {
                return new FormulaToken(CreateFormulaElement(node, size));
            }).ToFormulaElement());
        }