Пример #1
0
        void ParseTag(BibTexDatabase database, Entry entry, string tagName)
        {
            Consume(TokenType.Equals);

            string value = null;
            Token  LastToken;

            while (true)
            {
                LastToken = Current;

                switch (Current.TokenType)
                {
                case TokenType.QuotedString:
                    value += Consume().Data;
                    break;

                case TokenType.BracedString:
                    value += Consume().Data;
                    break;

                case TokenType.Text:
                    var token = Consume().Data;
                    value += database.GetAbbreviation(token, token);

                    break;

                case TokenType.Hash:
                    break;

                default:
                    throw new NotImplementedException();
                }
                // [Allen] Check the invalid token like:
                // *************************
                // owner = {Norman}   # LastToken.TokenType == TokenType.BracedString
                // timestamp = {2012-07-19} # Current.TokenType == TokenType.Text
                // *************************
                if (LastToken.TokenType == TokenType.BracedString &&
                    Current.TokenType == TokenType.Text)
                {
                    throw new TemplateParseException("Unexpected token: " + LastToken.TokenType + ". Was expecting: '" + LastToken.Data + ",'", LastToken.Line, LastToken.Column);
                }

                if (Current.TokenType != TokenType.Hash)
                {
                    break;
                }

                Consume();
            }

            entry.AddTag(new TagEntry(tagName, value));
        }
Пример #2
0
        void ParseTag(BibTexDatabase database, Entry entry, string tagName)
        {
            Consume(TokenType.Equals);

            string value = null;

            while (true)
            {
                switch (Current.TokenType)
                {
                case TokenType.QuotedString:
                    value += Consume().Data;
                    break;

                case TokenType.BracedString:
                    value += Consume().Data;
                    break;

                case TokenType.Text:
                    var token = Consume().Data;
                    value += database.GetAbbreviation(token, token);

                    break;

                case TokenType.Hash:
                    break;

                default:
                    throw new NotImplementedException();
                }

                if (Current.TokenType != TokenType.Hash)
                {
                    break;
                }
                Consume();
            }

            entry.AddTag(new TagEntry(tagName, value));
        }