private void ParseElementMixedContent(ParticleContentValidator pcv, int startParenEntityId) { bool hasNames = false; int connectorEntityId = -1; int contentEntityId = _currentEntityId; for (;;) { switch (GetToken(false)) { case Token.RightParen: pcv.CloseGroup(); if (_validate && _currentEntityId != startParenEntityId) { SendValidationEvent(_curPos, XmlSeverityType.Error, SR.Sch_ParEntityRefNesting, string.Empty); } if (GetToken(false) == Token.Star && hasNames) { pcv.AddStar(); } else if (hasNames) { ThrowUnexpectedToken(_curPos, "*"); } return; case Token.Or: if (!hasNames) { hasNames = true; } else { pcv.AddChoice(); } if (_validate) { connectorEntityId = _currentEntityId; if (contentEntityId < connectorEntityId) { // entity repl.text starting with connector SendValidationEvent(_curPos, XmlSeverityType.Error, SR.Sch_ParEntityRefNesting, string.Empty); } } if (GetToken(false) != Token.QName) { goto default; } XmlQualifiedName name = GetNameQualified(true); if (pcv.Exists(name) && _validate) { SendValidationEvent(XmlSeverityType.Error, SR.Sch_DupElement, name.ToString()); } pcv.AddName(name, null); if (_validate) { contentEntityId = _currentEntityId; if (contentEntityId < connectorEntityId) { // entity repl.text ending with connector SendValidationEvent(_curPos, XmlSeverityType.Error, SR.Sch_ParEntityRefNesting, string.Empty); } } continue; default: OnUnexpectedError(); break; } } }