public void LoadFromReader(TextReader reader)
{
string line;
Message message = new Message();
NodeType lastNode = NodeType.WhiteSpace;
while (null != (line = reader.ReadLine()))
{
if (String.IsNullOrEmpty(line))
{
// new message block
if (message.MsgID != "")
{
if (!Messages.ContainsKey(message.MsgID))
{
Messages.Add(message.MsgID, message);
}
if (!MessagesByAutoID.ContainsKey(message.AutoID))
{
MessagesByAutoID.Add(message.AutoID, message);
}
}
message = new Message();
continue;
}
NodeType node = GetNodeType(line);
switch (node)
{
case NodeType.TranslatorComment:
if (LoadComments)
message.TranslatorComments.Add(line.Substring(1));
break;
case NodeType.ExtractedComment:
if (LoadComments)
message.ExtractedComments.Add(line.Substring(2));
break;
case NodeType.Reference:
if (LoadComments)
message.Contexts.Add(line.Substring(2).Trim());
break;
case NodeType.Flag:
//flags are ignored for now
//if (LoadComments)
// message.Comments.Add(line.Substring(2).Trim());
break;
case NodeType.PreviousUntranslatedString:
//previous untranslated strings are ingored for now
break;
case NodeType.MsgID:
message.MsgID = Unescape(line.Substring(6));
lastNode = node;
break;
case NodeType.MsgID_Plural:
message.MsgID_Plural = Unescape(line.Substring(13));
lastNode = node;
break;
case NodeType.MsgStr:
message.MsgStr = Unescape(line.Substring(7));
lastNode = node;
break;
case NodeType.MsgStrWithBrakets:
message.MsgStr = Unescape(line.Substring(10));
lastNode = node;
break;
case NodeType.MsgStr_Plural:
message.MsgStr_Plural = Unescape(line.Substring(10));
lastNode = node;
break;
case NodeType.Continued:
//if (!string.IsNullOrEmpty(message.MsgID))
switch (lastNode)
{
case NodeType.MsgID:
message.MsgID += Unescape(line);
break;
case NodeType.MsgID_Plural:
message.MsgID_Plural += Unescape(line);
break;
case NodeType.MsgStr:
case NodeType.MsgStrWithBrakets:
message.MsgStr += Unescape(line);
break;
case NodeType.MsgStr_Plural:
message.MsgStr_Plural += Unescape(line);
break;
}
break;
case NodeType.WhiteSpace:
default:
break;
}
}
// put away the last one
if (message.MsgID != "")
{
Messages.Add(message.MsgID, message);
MessagesByAutoID.Add(message.AutoID, message);
message = new Message();
}
reader.Close();
}