private void ReadParameterEntityDecl ()
{
DTDParameterEntityDeclaration decl =
new DTDParameterEntityDeclaration (DTD);
decl.BaseURI = BaseURI;
decl.XmlResolver = DTD.Resolver;
decl.Name = ReadName ();
if (!SkipWhitespace ())
throw NotWFError ("Whitespace is required after name in DTD parameter entity declaration.");
if (PeekChar () == 'S' || PeekChar () == 'P') {
// read publicId/systemId
ReadExternalID ();
decl.PublicId = cachedPublicId;
decl.SystemId = cachedSystemId;
SkipWhitespace ();
decl.Resolve ();
ResolveExternalEntityReplacementText (decl);
} else {
TryExpandPERef ();
int quoteChar = ReadChar ();
if (quoteChar != '\'' && quoteChar != '"')
throw NotWFError ("quotation char was expected.");
ClearValueBuffer ();
bool loop = true;
while (loop) {
int c = ReadChar ();
switch (c) {
case -1:
throw NotWFError ("unexpected end of stream in entity value definition.");
case '"':
if (quoteChar == '"')
loop = false;
else
AppendValueChar ('"');
break;
case '\'':
if (quoteChar == '\'')
loop = false;
else
AppendValueChar ('\'');
break;
default:
if (XmlChar.IsInvalid (c))
throw NotWFError ("Invalid character was used to define parameter entity.");
AppendValueChar (c);
break;
}
}
decl.LiteralEntityValue = CreateValueString ();
ClearValueBuffer ();
ResolveInternalEntityReplacementText (decl);
}
ExpectAfterWhitespace ('>');
if (DTD.PEDecls [decl.Name] == null) {
DTD.PEDecls.Add (decl.Name, decl);
}
}