private void ParseInDocumentDtd(bool saveInternalSubset)
{
LoadParsingBuffer();
_scanningFunction = ScanningFunction.QName;
_nextScaningFunction = ScanningFunction.Doctype1;
// doctype name
if (GetToken(false) != Token.QName)
{
OnUnexpectedError();
}
_schemaInfo.DocTypeName = GetNameQualified(true);
// SYSTEM or PUBLIC id
Token token = GetToken(false);
if (token == Token.SYSTEM || token == Token.PUBLIC)
{
ParseExternalId(token, Token.DOCTYPE, out _publicId, out _systemId);
token = GetToken(false);
}
switch (token)
{
case Token.LeftBracket:
if (saveInternalSubset)
{
SaveParsingBuffer(); // this will cause saving the internal subset right from the point after '['
_internalSubsetValueSb = new StringBuilder();
}
ParseInternalSubset();
break;
case Token.GreaterThan:
break;
default:
OnUnexpectedError();
break;
}
SaveParsingBuffer();
if (_systemId != null && _systemId.Length > 0)
{
ParseExternalSubset();
}
}