Peek() private method

private Peek ( ) : int
return int
        // Returns list of 2-element arrays, element 0 is field name (or null), element 1 is term/phrase
        public List<NuGetSearchTerm> Parse(string searchTerm)
        {
            var terms = new List<NuGetSearchTerm>();
            _tokenizer = new Tokenizer(searchTerm);
            while (_tokenizer.Peek() != TokenType.Eof)
            {
                var term = new NuGetSearchTerm();
                if (_tokenizer.Peek() == TokenType.Field)
                {
                    if (ParseField(term))
                    {
                        terms.Add(term);
                    }
                }
                else
                {
                    if (ParseTermOrPhrase(term))
                    {
                        terms.Add(term);
                    }
                }
            }

            return terms;
        }
        private object NextValue(Tokenizer tokenizer)
        {
            if (tokenizer.Peek() == tokenizer.SeparatorToken || tokenizer.Peek() == tokenizer.NewlineToken)
            {
                return(string.Empty);
            }
            Token current = tokenizer.Next();

            if (current.type == TokenTypeEnum.Separator)
            {
                return(double.NaN);
            }
            else if (current.type == TokenTypeEnum.String)
            {
                return(current.stringValue);
            }
            else if (current.type == TokenTypeEnum.Double)
            {
                return(current.doubleValue);
            }
            else if (current.type == TokenTypeEnum.DateTime)
            {
                return(current.dateTimeValue);
            }
            // found an unexpected token => throw error
            Error("Unexpected token.", current.stringValue, tokenizer.CurrentLineNumber);
            // this line is never executed because Error() throws an exception
            throw new InvalidOperationException();
        }
示例#3
0
        // Returns list of 2-element arrays, element 0 is field name (or null), element 1 is term/phrase
        public List <NuGetSearchTerm> Parse(string searchTerm)
        {
            var terms = new List <NuGetSearchTerm>();

            _tokenizer = new Tokenizer(searchTerm);
            while (_tokenizer.Peek() != TokenType.Eof)
            {
                var term = new NuGetSearchTerm();
                if (_tokenizer.Peek() == TokenType.Field)
                {
                    if (ParseField(term))
                    {
                        terms.Add(term);
                    }
                }
                else
                {
                    if (ParseTermOrPhrase(term))
                    {
                        terms.Add(term);
                    }
                }
            }

            return(terms);
        }
示例#4
0
        internal static LayoutRenderer[] CompileLayout(ConfigurationItemFactory configurationItemFactory, Tokenizer sr, bool isNested, out string text)
        {
            var result = new List<LayoutRenderer>();
            var literalBuf = new StringBuilder();

            int ch;

            int p0 = sr.Position;

            while ((ch = sr.Peek()) != -1)
            {
                if (isNested && (ch == '}' || ch == ':'))
                {
                    break;
                }

                sr.Read();

                if (ch == '$' && sr.Peek() == '{')
                {
                    if (literalBuf.Length > 0)
                    {
                        result.Add(new LiteralLayoutRenderer(literalBuf.ToString()));
                        literalBuf.Length = 0;
                    }

                    LayoutRenderer newLayoutRenderer = ParseLayoutRenderer(configurationItemFactory, sr);
                    if (CanBeConvertedToLiteral(newLayoutRenderer))
                    {
                        newLayoutRenderer = ConvertToLiteral(newLayoutRenderer);
                    }

                    // layout renderer
                    result.Add(newLayoutRenderer);
                }
                else
                {
                    literalBuf.Append((char)ch);
                }
            }

            if (literalBuf.Length > 0)
            {
                result.Add(new LiteralLayoutRenderer(literalBuf.ToString()));
                literalBuf.Length = 0;
            }

            int p1 = sr.Position;

            MergeLiterals(result);
            text = sr.Substring(p0, p1);

            return result.ToArray();
        }
示例#5
0
        internal static LayoutRenderer[] CompileLayout(ConfigurationItemFactory configurationItemFactory, Tokenizer sr, bool isNested, out string text)
        {
            var result     = new List <LayoutRenderer>();
            var literalBuf = new StringBuilder();

            int ch;

            int p0 = sr.Position;

            while ((ch = sr.Peek()) != -1)
            {
                if (isNested && (ch == '}' || ch == ':'))
                {
                    break;
                }

                sr.Read();

                if (ch == '$' && sr.Peek() == '{')
                {
                    if (literalBuf.Length > 0)
                    {
                        result.Add(new LiteralLayoutRenderer(literalBuf.ToString()));
                        literalBuf.Length = 0;
                    }

                    LayoutRenderer newLayoutRenderer = ParseLayoutRenderer(configurationItemFactory, sr);
                    if (CanBeConvertedToLiteral(newLayoutRenderer))
                    {
                        newLayoutRenderer = ConvertToLiteral(newLayoutRenderer);
                    }

                    // layout renderer
                    result.Add(newLayoutRenderer);
                }
                else
                {
                    literalBuf.Append((char)ch);
                }
            }

            if (literalBuf.Length > 0)
            {
                result.Add(new LiteralLayoutRenderer(literalBuf.ToString()));
                literalBuf.Length = 0;
            }

            int p1 = sr.Position;

            MergeLiterals(result);
            text = sr.Substring(p0, p1);

            return(result.ToArray());
        }
示例#6
0
        internal static LayoutRenderer[] CompileLayout(Tokenizer sr, bool isNested, out string text)
        {
            ArrayList     result     = new ArrayList();
            StringBuilder literalBuf = new StringBuilder();

            int ch;

            int p0 = sr.Position;

            while ((ch = sr.Peek()) != -1)
            {
                if (isNested && (ch == '}' || ch == ':'))
                {
                    break;
                }
                sr.Read();

                if (ch == '$' && sr.Peek() == '{')
                {
                    if (literalBuf.Length > 0)
                    {
                        result.Add(new LiteralLayoutRenderer(literalBuf.ToString()));
                        literalBuf.Length = 0;
                    }

                    LayoutRenderer newLayoutRenderer = ParseLayoutRenderer(sr);
                    if (newLayoutRenderer.IsAppDomainFixed())
                    {
                        newLayoutRenderer = ConvertToLiteral(newLayoutRenderer);
                    }
                    result.Add(newLayoutRenderer);
                    // layout renderer
                }
                else
                {
                    literalBuf.Append((char)ch);
                }
            }

            if (literalBuf.Length > 0)
            {
                result.Add(new LiteralLayoutRenderer(literalBuf.ToString()));
                literalBuf.Length = 0;
            }
            int p1 = sr.Position;

            MergeLiterals(result);
            text = sr.Substring(p0, p1);

            return((LayoutRenderer[])result.ToArray(typeof(LayoutRenderer)));
        }
示例#7
0
        private static string ParseParameterName(Tokenizer sr)
        {
            int ch;
            int nestLevel = 0;

            var nameBuf = new StringBuilder();

            while ((ch = sr.Peek()) != -1)
            {
                if ((ch == '=' || ch == '}' || ch == ':') && nestLevel == 0)
                {
                    break;
                }

                if (ch == '$')
                {
                    sr.Read();
                    nameBuf.Append('$');
                    if (sr.Peek() == '{')
                    {
                        nameBuf.Append('{');
                        nestLevel++;
                        sr.Read();
                    }

                    continue;
                }

                if (ch == '}')
                {
                    nestLevel--;
                }

                if (ch == '\\')
                {
                    // skip the backslash
                    sr.Read();

                    // append next character
                    nameBuf.Append((char)sr.Read());
                    continue;
                }

                nameBuf.Append((char)ch);
                sr.Read();
            }

            return(nameBuf.ToString());
        }
示例#8
0
        private static string ParseParameterValue(Tokenizer sr)
        {
            int ch;

            StringBuilder nameBuf = new StringBuilder();

            while ((ch = sr.Peek()) != -1)
            {
                if (ch == ':' || ch == '}')
                {
                    break;
                }
                if (ch == '\\')
                {
                    // skip the backslash
                    sr.Read();

                    // append next character
                    nameBuf.Append((char)sr.Read());
                    continue;
                }
                nameBuf.Append((char)ch);
                sr.Read();
            }

            return(nameBuf.ToString());
        }
示例#9
0
        public override Token Match(Tokenizer tz)
        {
            int count = 0;

            for (; ; count++)
            {
                var c = tz.Peek(count);

                if (c == '\n')
                {
                    tz.IncLine();
                }

                if (!IsWhiteSpace(c))
                {
                    break;
                }
            }

            if (count == 0)
            {
                return(null);
            }

            tz.Consume(count);

            return(WhiteToken);
        }
示例#10
0
        public override Token Match(Tokenizer tz)
        {
            if (tz.CharLeft < _word.Length)
            {
                return(null);
            }

            int index = 0;

            foreach (var c in _word)
            {
                if (tz.Peek(index) != c)
                {
                    return(null);
                }

                index++;
            }


            tz.Consume(_word.Length);


            return(new Token(_type, _word));
        }
示例#11
0
 public bool AreColumnNamesInFirstLine(Stream stream, NumberFormatInfo numberFormat,
                                       DateTimeFormatInfo dateTimeFormatInfo, char separator)
 {
     using (StreamReader reader = new StreamReader(stream)) {
         tokenizer = new Tokenizer(reader, numberFormat, dateTimeFormatInfo, separator);
         return(tokenizer.Peek().type != TokenTypeEnum.Double);
     }
 }
示例#12
0
        public void Peek_ShouldReturnTheNextToken_WithoutAdvancingTheStream()
        {
            var input = "a";

            var tokenizer = new Tokenizer(input);

            Assert.That(tokenizer.Peek(), Is.EqualTo(new Token(Symbol.Identifier, "a", 0)));
            Assert.That(tokenizer.Pop(), Is.EqualTo(new Token(Symbol.Identifier, "a", 0)));
            Assert.That(tokenizer.Pop(), Is.EqualTo(new Token(Symbol.End, "", 0)));
        }
示例#13
0
        public void ShouldTokenizeNumber(double number)
        {
            var s         = number.ToString();
            var tokenizer = new Tokenizer(s);
            var token     = tokenizer.CurrentToken;

            Assert.Equal(TokenType.Constant, token.Type);
            Assert.Equal(s, token.Value);
            Assert.Equal(TokenType.EOF, tokenizer.Peek().Type);
        }
示例#14
0
        public void Peek_ShouldNotScrewUp_IfPeekAtTheEndOfTheStream()
        {
            var input = " aaa";

            var tokenizer = new Tokenizer(input);

            Assert.That(tokenizer.Pop(), Is.EqualTo(new Token(Symbol.Identifier, "aaa", 0)));
            Assert.That(tokenizer.Pop(), Is.EqualTo(new Token(Symbol.End, "", 0)));
            Assert.That(tokenizer.Peek(), Is.EqualTo(new Token(Symbol.End, "", 0)));
            Assert.That(tokenizer.Pop(), Is.EqualTo(new Token(Symbol.End, "", 0)));
        }
示例#15
0
        public void Peek_ShouldIgnoreBlockComments()
        {
            var input = @"{ line comment }
                          a";

            var tokenizer = new Tokenizer(input);

            Assert.That(tokenizer.Peek(), Is.EqualTo(new Token(Symbol.Identifier, "a", 0)));
            Assert.That(tokenizer.Pop(), Is.EqualTo(new Token(Symbol.Identifier, "a", 0)));
            Assert.That(tokenizer.Pop(), Is.EqualTo(new Token(Symbol.End, "", 0)));
        }
示例#16
0
        public void ShouldPeek(string input)
        {
            var tokenizer = new Tokenizer(input);

            Assert.Equal(TokenType.OpAdd, tokenizer.CurrentToken.Type);

            var peek = tokenizer.Peek();

            Assert.Equal(TokenType.OpSubtract, peek.Type);
            Assert.Equal(TokenType.OpAdd, tokenizer.CurrentToken.Type);
        }
示例#17
0
        private static string ParseParameterName(Tokenizer sr)
        {
            int ch;
            int nestLevel = 0;

            StringBuilder nameBuf = new StringBuilder();
            while ((ch = sr.Peek()) != -1)
            {
                if ((ch == '=' || ch == '}' || ch == ':') && nestLevel == 0)
                    break;
                if (ch == '$')
                {
                    sr.Read();
                    nameBuf.Append('$');
                    if (sr.Peek() == '{')
                    {
                        nameBuf.Append('{');
                        nestLevel++;
                        sr.Read();
                    }
                    continue;
                }
                if (ch == '}')
                {
                    nestLevel--;
                }
                if (ch == '\\')
                {
                    // skip the backslash
                    sr.Read();

                    // append next character
                    nameBuf.Append((char)sr.Read());
                    continue;
                }
                nameBuf.Append((char)ch);
                sr.Read();
            }

            return nameBuf.ToString();
        }
示例#18
0
    public static NeuToken?MaybeNext(
        this Tokenizer <NeuToken> tokenizer)
    {
        var peek = tokenizer.Peek();

        if (peek != null)
        {
            tokenizer.Position++;
        }

        return(peek);
    }
示例#19
0
    public static bool MatchPunc(
        this Tokenizer <NeuToken> tokenizer,
        params NeuPuncType[] puncTypes)
    {
        if (tokenizer.Peek() is NeuPunc p && puncTypes.Contains(p.PuncType))
        {
            return(true);
        }

        ///

        return(false);
    }
示例#20
0
        public void PeekTest()
        {
            var t = new Tokenizer(" \t*/ 10 - 20, 23");

            Assert.True(t.Peek().IsSymbol("*")); t.Pop(true);
            Assert.True(t.Peek().IsSymbol("/")); t.Pop(true);
            Assert.True(t.Peek().IsInteger()); t.Pop(true);
            Assert.True(t.Peek().IsSymbol("-")); t.Pop(true);
            Assert.True(t.Peek().IsInteger()); t.Pop(true);
            Assert.True(t.Peek().IsSymbol(",")); t.Pop(true);
            Assert.True(t.Peek().IsInteger()); t.Pop(true);
        }
    public static NeuNumberLiteral?MaybeNextNumberLiteral(
        this Tokenizer <NeuToken> tokenizer)
    {
        if (tokenizer.Peek() is NeuNumberLiteral n)
        {
            tokenizer.Position++;

            return(n);
        }

        ///

        return(null);
    }
    public static NeuIdentifier?MaybeNextIdentifier(
        this Tokenizer <NeuToken> tokenizer)
    {
        if (tokenizer.Peek() is NeuIdentifier i)
        {
            tokenizer.Position++;

            return(i);
        }

        ///

        return(null);
    }
示例#23
0
        private static string ParseLayoutRendererName(Tokenizer sr)
        {
            int ch;

            StringBuilder nameBuf = new StringBuilder();
            while ((ch = sr.Peek()) != -1)
            {
                if (ch == ':' || ch == '}')
                    break;
                nameBuf.Append((char)ch);
                sr.Read();
            }

            return nameBuf.ToString();
        }
示例#24
0
    public static NeuPunc?MaybeNextPunc(
        this Tokenizer <NeuToken> tokenizer,
        NeuPuncType puncType)
    {
        if (tokenizer.Peek() is NeuPunc p && p.PuncType == puncType)
        {
            tokenizer.Position++;

            return(p);
        }

        ///

        return(null);
    }
示例#25
0
    public static NeuKeyword?MaybeNextKeyword(
        this Tokenizer <NeuToken> tokenizer,
        params NeuKeywordType[] keywordTypes)
    {
        if (tokenizer.Peek() is NeuKeyword k && keywordTypes.Contains(k.KeywordType))
        {
            tokenizer.Position++;

            return(k);
        }

        ///

        return(null);
    }
示例#26
0
    public static NeuComment?MaybeNextComment(
        this Tokenizer <NeuToken> tokenizer)
    {
        if (tokenizer.Peek() is NeuComment c)
        {
            tokenizer.Position++;

            ///

            return(c);
        }

        ///

        return(null);
    }
示例#27
0
        private void Comma(Tokenizer.Tokenizer tokenizer, Boolean optional = false)
        {
            AbstractToken token = tokenizer.Peek();

            if (token.GetType() == typeof(Comma))
            {
                tokenizer.NextToken();
                return;
            }

            if (optional)
            {
                return;
            }

            throw new ParseException("Expected type Comma but found: " + token.GetType() + " after " + tokenizer.GetPreviousCharacters(25));
        }
示例#28
0
            public override bool Match(Tokenizer lexer)
            {
                var token = lexer.Peek();

                if (token.Kind == TokenKind.Identity ||
                    token.Kind == TokenKind.Symbol)
                {
                    foreach (var symbol in _tokens)
                    {
                        if (token.Image.Equals(symbol))
                        {
                            return(true);
                        }
                    }
                }

                return(false);
            }
示例#29
0
        private static string ParseLayoutRendererName(Tokenizer sr)
        {
            int ch;

            StringBuilder nameBuf = new StringBuilder();

            while ((ch = sr.Peek()) != -1)
            {
                if (ch == ':' || ch == '}')
                {
                    break;
                }
                nameBuf.Append((char)ch);
                sr.Read();
            }

            return(nameBuf.ToString());
        }
示例#30
0
        private string ReadSyntax(Tokenizer tokenizer, out TokenType?symbolType)
        {
            symbolType = null;
            var sb = new StringBuilder().Append(tokenizer.NextChar());

            for (var i = 0; i < 2; i++)
            {
                var ch = tokenizer.Peek();
                if (!_syntax.IsSyntaxChar(ch) || _syntax.IsParen(ch))
                {
                    break;
                }
                sb.Append(tokenizer.NextChar());
            }
            var probe = sb.ToString();

            if (probe.Length == 1)
            {
                // one char read, let the lexer decide about the token type
                return(probe);
            }
            while (true)
            {
                TokenType st;
                if (_grammar.Syntax.Symbols.TryGetValue(probe, out st))
                {
                    symbolType = st;
                    return(probe);
                }
                if (probe.Length == 1)
                {
                    return(probe);
                }
                probe = probe.Substring(0, probe.Length - 1);
                tokenizer.Position--;
            }
        }
    public static NeuUnaryOperator?PeekUnaryOperator(
        this Tokenizer <NeuToken> tokenizer)
    {
        switch (tokenizer.Peek())
        {
        case NeuPrefixOperator _:

            return(null);

        ///

        case NeuPostfixOperator _:

            return(null);

        ///

        case NeuUnaryOperator unaryOp:

            return(unaryOp);

        ///

        case NeuToken t when ToNeuUnaryOperator(t) is NeuUnaryOperator unaryOp:

            tokenizer.Tokens[tokenizer.Position] = unaryOp;

            return(unaryOp);

        ///

        default:

            return(null);
        }
    }
    public static NeuBinaryOperator?PeekBinaryOperator(
        this Tokenizer <NeuToken> tokenizer)
    {
        switch (tokenizer.Peek())
        {
        case NeuBinaryOperator binaryOp:

            return(binaryOp);

        ///

        case NeuToken t when ToNeuBinaryOperator(t) is NeuBinaryOperator binaryOp:

            tokenizer.Tokens[tokenizer.Position] = binaryOp;

            return(binaryOp);

        ///

        default:

            return(null);
        }
    }
示例#33
0
            public override bool Match(Tokenizer lexer)
            {
                var token = lexer.Peek();

                return(Test(token));
            }
示例#34
0
        private static LayoutRenderer ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, Tokenizer sr)
        {
            int ch = sr.Read();
            Debug.Assert(ch == '{', "'{' expected in layout specification");

            string name = ParseLayoutRendererName(sr);
            LayoutRenderer lr = configurationItemFactory.LayoutRenderers.CreateInstance(name);

            var wrappers = new Dictionary<Type, LayoutRenderer>();
            var orderedWrappers = new List<LayoutRenderer>();

            ch = sr.Read();
            while (ch != -1 && ch != '}')
            {
                string parameterName = ParseParameterName(sr).Trim();
                if (sr.Peek() == '=')
                {
                    sr.Read(); // skip the '='
                    PropertyInfo pi;
                    LayoutRenderer parameterTarget = lr;

                    if (!PropertyHelper.TryGetPropertyInfo(lr, parameterName, out pi))
                    {
                        Type wrapperType;

                        if (configurationItemFactory.AmbientProperties.TryGetDefinition(parameterName, out wrapperType))
                        {
                            LayoutRenderer wrapperRenderer;

                            if (!wrappers.TryGetValue(wrapperType, out wrapperRenderer))
                            {
                                wrapperRenderer = configurationItemFactory.AmbientProperties.CreateInstance(parameterName);
                                wrappers[wrapperType] = wrapperRenderer;
                                orderedWrappers.Add(wrapperRenderer);
                            }

                            if (!PropertyHelper.TryGetPropertyInfo(wrapperRenderer, parameterName, out pi))
                            {
                                pi = null;
                            }
                            else
                            {
                                parameterTarget = wrapperRenderer;
                            }
                        }
                    }

                    if (pi == null)
                    {
                        ParseParameterValue(sr);
                    }
                    else
                    {
                        if (typeof(Layout).IsAssignableFrom(pi.PropertyType))
                        {
                            var nestedLayout = new SimpleLayout();
                            string txt;
                            LayoutRenderer[] renderers = CompileLayout(configurationItemFactory, sr, true, out txt);

                            nestedLayout.SetRenderers(renderers, txt);
                            pi.SetValue(parameterTarget, nestedLayout, null);
                        }
                        else
                        {
                            string value = ParseParameterValue(sr);
                            PropertyHelper.SetPropertyFromString(parameterTarget, parameterName, value);
                        }
                    }
                }
                else
                {
                    // what we've just read is not a parameterName, but a value
                    // assign it to a default property (denoted by empty string)
                    PropertyInfo pi;

                    if (PropertyHelper.TryGetPropertyInfo(lr, string.Empty, out pi))
                    {
                        if (typeof(SimpleLayout) == pi.PropertyType)
                        {
                            pi.SetValue(lr, new SimpleLayout(parameterName), null);
                        }
                        else
                        {
                            string value = parameterName;
                            PropertyHelper.SetPropertyFromString(lr, pi.Name, value);
                        }
                    }
                    else
                    {
                        InternalLogger.Warn("{0} has no default property", lr.GetType().FullName);
                    }
                }

                ch = sr.Read();
            }

            lr = ApplyWrappers(configurationItemFactory, lr, orderedWrappers);

            return lr;
        }
示例#35
0
        /// <summary>
        /// Retrieves the tag values from the input. 
        /// </summary>
        /// <param name="tokenizer"></param>
        /// <returns></returns>
        /// 
        private ICollection<Tag> Tags(Tokenizer.Tokenizer tokenizer)
        {
            // This function needs some refactoring.
            List<Tag> tags = new List<Tag>();

            while (tokenizer.Peek().GetType() != typeof (ClosingBrace))
            {
                Tag tag = new Tag {Key = Text(tokenizer)};
                Equals(tokenizer);
                AbstractToken startToken = ValueStart(tokenizer);

                List<AbstractToken> tokens = new List<AbstractToken>();

                bool keepProcessing = true;
                int balance = 1;

                while (keepProcessing)
                {
                    Type nextTokenType = tokenizer.Peek().GetType();

                    if (nextTokenType == typeof (OpeningBrace))
                    {
                        balance++;
                    }

                    if ( (startToken.GetType() == typeof(OpeningBrace) &&  nextTokenType == typeof (ClosingBrace)))
                    {
                        if (balance == 1)
                        {
                            keepProcessing = false;
                            ValueStop(tokenizer);
                        }
                    }

                    if (nextTokenType == typeof(ClosingBrace))
                    {
                        if (balance > 1)
                        {
                            balance--;
                        }
                    }

                    // Double quotes are much more difficult to handle then the braces. The problem is that there is no distinction between
                    // start and stop quotes. This means we need to look forward to see what is behind the quote to see if it is a quote @ the end
                    // or the start of a new quote.
                    if (nextTokenType == typeof (ValueQuote))
                    {
                        AbstractToken quote = tokenizer.NextToken();

                        Type nextType = tokenizer.Peek().GetType();
                        if ((nextType == typeof(ClosingBrace) && balance == 1) ||
                             nextType == typeof(Comma))
                        {
                            // end of line found.
                            keepProcessing = false;
                        }
                        else
                        {
                            tokens.Add(quote);
                            continue;
                        }
                    }

                    if (keepProcessing)
                    {
                        tokens.Add(tokenizer.NextToken());
                    }
                }

                tag.Value = tokens.Aggregate("", (s, token) => s + token.RawValue);

                Comma(tokenizer, true);
                NewLine(tokenizer, true);

                tags.Add(tag);
            }

            return tags;
        }
示例#36
0
        internal static LayoutRenderer[] CompileLayout(Tokenizer sr, bool isNested, out string text)
        {
            List<LayoutRenderer> result = new List<LayoutRenderer>();
            StringBuilder literalBuf = new StringBuilder();

            int ch;

            int p0 = sr.Position;

            while ((ch = sr.Peek()) != -1)
            {
                if (isNested && (ch == '}' || ch == ':'))
                {
                    break;
                }
                sr.Read();

                if (ch == '$' && sr.Peek() == '{')
                {
                    if (literalBuf.Length > 0)
                    {
                        result.Add(new LiteralLayoutRenderer(literalBuf.ToString()));
                        literalBuf.Length = 0;
                    }

                    LayoutRenderer newLayoutRenderer = ParseLayoutRenderer(sr);
                    if (newLayoutRenderer.IsAppDomainFixed())
                        newLayoutRenderer = ConvertToLiteral(newLayoutRenderer);
                    result.Add(newLayoutRenderer);
                    // layout renderer
                }
                else
                {
                    literalBuf.Append((char)ch);
                }
            }

            if (literalBuf.Length > 0)
            {
                result.Add(new LiteralLayoutRenderer(literalBuf.ToString()));
                literalBuf.Length = 0;
            }
            int p1 = sr.Position;

            MergeLiterals(result);
            text = sr.Substring(p0, p1);

            return result.ToArray();
        }
示例#37
0
        private static LayoutRenderer ParseLayoutRenderer(Tokenizer sr)
        {
            int ch;

            ch = sr.Read();
            if (ch != '{')
                throw new NLogConfigurationException("'{' expected in layout specification");

            string name = ParseLayoutRendererName(sr);
            LayoutRenderer lr = LayoutRendererFactory.CreateLayoutRenderer(name, null);

            ch = sr.Read();
            while (ch != -1 && ch != '}')
            {
                string parameterName = ParseParameterName(sr).Trim();
                if (sr.Peek() == '=')
                {
                    sr.Read(); // skip the '='
                    PropertyInfo pi = PropertyHelper.GetPropertyInfo(lr, parameterName);
                    if (pi == null)
                    {
                        ParseParameterValue(sr);
                    }
                    else
                    {
                        if (typeof(Layout) == pi.PropertyType)
                        {
                            Layout nestedLayout = new Layout();
                            string txt;
                            LayoutRenderer[] renderers = CompileLayout(sr, true, out txt);

                            nestedLayout.SetRenderers(renderers, txt);
                            pi.SetValue(lr, nestedLayout, null);
                        }
                        else
                        {
                            string value = ParseParameterValue(sr);
                            PropertyHelper.SetPropertyFromString(lr, parameterName, value, null);
                        }
                    }
                }
                else
                {
                    // what we've just read is not a parameterName, but a value
                    // assign it to a default property (denoted by empty string)

                    PropertyInfo pi = PropertyHelper.GetPropertyInfo(lr, "");
                    if (pi != null)
                    {
                        if (typeof(Layout) == pi.PropertyType)
                        {
                            pi.SetValue(lr, new Layout(parameterName), null);
                        }
                        else
                        {
                            string value = parameterName;
                            PropertyHelper.SetPropertyFromString(lr, pi.Name, value, null);
                        }
                    }
                    else
                    {
                        InternalLogger.Warn("{0} has no default property", lr.GetType().FullName);
                    }
                }
                ch = sr.Read();
            }
            return lr;
        }
示例#38
0
        private static string ParseParameterValue(Tokenizer sr)
        {
            int ch;

            StringBuilder nameBuf = new StringBuilder();
            while ((ch = sr.Peek()) != -1)
            {
                if (ch == ':' || ch == '}')
                    break;
                if (ch == '\\')
                {
                    // skip the backslash
                    sr.Read();

                    // append next character
                    nameBuf.Append((char)sr.Read());
                    continue;
                }
                nameBuf.Append((char)ch);
                sr.Read();
            }

            return nameBuf.ToString();
        }
示例#39
0
 private object NextValue(Tokenizer tokenizer) {
   if (tokenizer.Peek() == tokenizer.SeparatorToken || tokenizer.Peek() == tokenizer.NewlineToken) return string.Empty;
   Token current = tokenizer.Next();
   if (current.type == TokenTypeEnum.Separator) {
     return double.NaN;
   } else if (current.type == TokenTypeEnum.String) {
     return current.stringValue;
   } else if (current.type == TokenTypeEnum.Double) {
     return current.doubleValue;
   } else if (current.type == TokenTypeEnum.DateTime) {
     return current.dateTimeValue;
   }
   // found an unexpected token => throw error 
   Error("Unexpected token.", current.stringValue, tokenizer.CurrentLineNumber);
   // this line is never executed because Error() throws an exception
   throw new InvalidOperationException();
 }
示例#40
0
 public bool AreColumnNamesInFirstLine(Stream stream, NumberFormatInfo numberFormat,
                                       DateTimeFormatInfo dateTimeFormatInfo, char separator) {
   using (StreamReader reader = new StreamReader(stream)) {
     tokenizer = new Tokenizer(reader, numberFormat, dateTimeFormatInfo, separator);
     return tokenizer.Peek().type != TokenTypeEnum.Double;
   }
 }
示例#41
0
        private static LayoutRenderer ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, Tokenizer sr)
        {
            int ch = sr.Read();

            Debug.Assert(ch == '{', "'{' expected in layout specification");

            string         name = ParseLayoutRendererName(sr);
            LayoutRenderer lr   = configurationItemFactory.LayoutRenderers.CreateInstance(name);

            var wrappers        = new Dictionary <Type, LayoutRenderer>();
            var orderedWrappers = new List <LayoutRenderer>();

            ch = sr.Read();
            while (ch != -1 && ch != '}')
            {
                string parameterName = ParseParameterName(sr).Trim();
                if (sr.Peek() == '=')
                {
                    sr.Read(); // skip the '='
                    PropertyInfo   pi;
                    LayoutRenderer parameterTarget = lr;

                    if (!PropertyHelper.TryGetPropertyInfo(lr, parameterName, out pi))
                    {
                        Type wrapperType;

                        if (configurationItemFactory.AmbientProperties.TryGetDefinition(parameterName, out wrapperType))
                        {
                            LayoutRenderer wrapperRenderer;

                            if (!wrappers.TryGetValue(wrapperType, out wrapperRenderer))
                            {
                                wrapperRenderer       = configurationItemFactory.AmbientProperties.CreateInstance(parameterName);
                                wrappers[wrapperType] = wrapperRenderer;
                                orderedWrappers.Add(wrapperRenderer);
                            }

                            if (!PropertyHelper.TryGetPropertyInfo(wrapperRenderer, parameterName, out pi))
                            {
                                pi = null;
                            }
                            else
                            {
                                parameterTarget = wrapperRenderer;
                            }
                        }
                    }

                    if (pi == null)
                    {
                        ParseParameterValue(sr);
                    }
                    else
                    {
                        if (typeof(Layout).IsAssignableFrom(pi.PropertyType))
                        {
                            var              nestedLayout = new SimpleLayout();
                            string           txt;
                            LayoutRenderer[] renderers = CompileLayout(configurationItemFactory, sr, true, out txt);

                            nestedLayout.SetRenderers(renderers, txt);
                            pi.SetValue(parameterTarget, nestedLayout, null);
                        }
                        else
                        {
                            string value = ParseParameterValue(sr);
                            PropertyHelper.SetPropertyFromString(parameterTarget, parameterName, value);
                        }
                    }
                }
                else
                {
                    // what we've just read is not a parameterName, but a value
                    // assign it to a default property (denoted by empty string)
                    PropertyInfo pi;

                    if (PropertyHelper.TryGetPropertyInfo(lr, string.Empty, out pi))
                    {
                        if (typeof(SimpleLayout) == pi.PropertyType)
                        {
                            pi.SetValue(lr, new SimpleLayout(parameterName), null);
                        }
                        else
                        {
                            string value = parameterName;
                            PropertyHelper.SetPropertyFromString(lr, pi.Name, value);
                        }
                    }
                    else
                    {
                        InternalLogger.Warn("{0} has no default property", lr.GetType().FullName);
                    }
                }

                ch = sr.Read();
            }

            lr = ApplyWrappers(configurationItemFactory, lr, orderedWrappers);

            return(lr);
        }
示例#42
0
        private static LayoutRenderer ParseLayoutRenderer(Tokenizer sr)
        {
            int ch;

            ch = sr.Read();
            if (ch != '{')
            {
                throw new NLogConfigurationException("'{' expected in layout specification");
            }

            string         name = ParseLayoutRendererName(sr);
            LayoutRenderer lr   = LayoutRendererFactory.CreateLayoutRenderer(name, null);

            ch = sr.Read();
            while (ch != -1 && ch != '}')
            {
                string parameterName = ParseParameterName(sr).Trim();
                if (sr.Peek() == '=')
                {
                    sr.Read(); // skip the '='
                    PropertyInfo pi = PropertyHelper.GetPropertyInfo(lr, parameterName);
                    if (pi == null)
                    {
                        ParseParameterValue(sr);
                    }
                    else
                    {
                        if (typeof(Layout) == pi.PropertyType)
                        {
                            Layout           nestedLayout = new Layout();
                            string           txt;
                            LayoutRenderer[] renderers = CompileLayout(sr, true, out txt);

                            nestedLayout.SetRenderers(renderers, txt);
                            pi.SetValue(lr, nestedLayout, null);
                        }
                        else
                        {
                            string value = ParseParameterValue(sr);
                            PropertyHelper.SetPropertyFromString(lr, parameterName, value, null);
                        }
                    }
                }
                else
                {
                    // what we've just read is not a parameterName, but a value
                    // assign it to a default property (denoted by empty string)

                    PropertyInfo pi = PropertyHelper.GetPropertyInfo(lr, "");
                    if (pi != null)
                    {
                        if (typeof(Layout) == pi.PropertyType)
                        {
                            pi.SetValue(lr, new Layout(parameterName), null);
                        }
                        else
                        {
                            string value = parameterName;
                            PropertyHelper.SetPropertyFromString(lr, pi.Name, value, null);
                        }
                    }
                    else
                    {
                        InternalLogger.Warn("{0} has no default property", lr.GetType().FullName);
                    }
                }
                ch = sr.Read();
            }
            return(lr);
        }