private bool HandleEntityReference(XmlQualifiedName entityName, bool paramEntity, bool inLiteral, bool inAttribute)
{
Debug.Assert(_chars[_curPos - 1] == ';');
SaveParsingBuffer();
if (paramEntity && ParsingInternalSubset && !ParsingTopLevelMarkup)
{
Throw(_curPos - entityName.Name.Length - 1, SR.Xml_InvalidParEntityRef);
}
SchemaEntity entity = VerifyEntityReference(entityName, paramEntity, true, inAttribute);
if (entity == null)
{
return false;
}
if (entity.ParsingInProgress)
{
Throw(_curPos - entityName.Name.Length - 1, paramEntity ? SR.Xml_RecursiveParEntity : SR.Xml_RecursiveGenEntity, entityName.Name);
}
int newEntityId;
if (entity.IsExternal)
{
if (!_readerAdapter.PushEntity(entity, out newEntityId))
{
return false;
}
_externalEntitiesDepth++;
}
else
{
if (entity.Text.Length == 0)
{
return false;
}
if (!_readerAdapter.PushEntity(entity, out newEntityId))
{
return false;
}
}
_currentEntityId = newEntityId;
if (paramEntity && !inLiteral && _scanningFunction != ScanningFunction.ParamEntitySpace)
{
_savedScanningFunction = _scanningFunction;
_scanningFunction = ScanningFunction.ParamEntitySpace;
}
LoadParsingBuffer();
return true;
}