Exemple #1
0
        public static AtawExpressionParser ParseExpression(string expression, char open = char.MinValue, char close = char.MinValue)
        {
            if (close == char.MinValue)
            {
                close = open;
            }
            if (open == char.MinValue)
            {
                open  = '{';
                close = '}';
            }

            AtawExpressionParser parser = new AtawExpressionParser(open, close);

            parser.ParseExpr(expression);
            return(parser);
        }
        public static string Execute(string expressionString, char open = char.MinValue, char close = char.MinValue, object input = null)
        {
            var parser = AtawExpressionParser.ParseExpression(expressionString, open, close);

            if (!parser.Parameters.Any())
            {
                return(parser.FormatString);
            }
            var count = 0;
            var sb    = new StringBuilder();
            var index = 0;

            parser.Parameters.ToList().ForEach(a =>
            {
                var temp = a.ParameterName.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                if (temp.Length > 1)
                {
                    //带参的表达式
                    var item = temp[0].CodePlugIn <IParamExpression>();
                    a.Value  = item.Execute(temp[1], input);
                }
                else
                {
                    //无参表达式
                    var item = a.ParameterName.CodePlugIn <IExpression>();
                    a.Value  = item.Execute();
                }
            });
            parser.Parameters.ToList().ForEach(parameter =>
            {
                sb.Append(parser.FormatString.Substring(index, parameter.StartIndex - index));
                sb.Append(parameter.Value ?? string.Empty);
                index = parameter.StartIndex + parameter.Count;
            });
            if (parser.FormatString.Length > index)
            {
                sb.Append(parser.FormatString.Substring(index));
            }
            return(sb.ToString());
        }