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));
}