Exemplo n.º 1
0
        public static RangeSyntax <T> Parse(string text, ScalarParser scalarParser)
        {
            if (text is null)
            {
                return(null);
            }

            if (scalarParser is null)
            {
                throw new ArgumentNullException(nameof(scalarParser));
            }

            if (scalarParser(text, out var simpleOperand))
            {
                return(new UnaryRangeSyntax <T>(UnaryRangeOperator.EqualTo, simpleOperand));
            }

            var ops = new[] { "<", "<=", ">", ">=" };

            for (var i = 0; i < ops.Length; i++)
            {
                var opText = ops[i];

                if (text.StartsWith(opText, StringComparison.Ordinal))
                {
                    var op          = (UnaryRangeOperator)(i + 1);
                    var operandText = text.Substring(opText.Length).Trim();
                    if (scalarParser(operandText, out var operand))
                    {
                        return(new UnaryRangeSyntax <T>(op, operand));
                    }
                }
            }

            var indexOfDotDot = text.IndexOf("..", StringComparison.Ordinal);

            if (indexOfDotDot > 0)
            {
                var leftText  = text.Substring(0, indexOfDotDot).Trim();
                var rightText = text.Substring(indexOfDotDot + 2).Trim();
                if (scalarParser(leftText, out var left) && scalarParser(rightText, out var right))
                {
                    return(new BinaryRangeSyntax <T>(left, right));
                }
            }

            return(null);
        }
Exemplo n.º 2
0
 protected void SetUp()
 {
     _parser  = new ScalarParser();
     _context = XmlMessageTemplateLoader.CreateInitialContext();
 }