private void CheckValue(string value, SchemaAttDef attdef)
{
try
{
base.reader.TypedValueObject = null;
bool flag = attdef != null;
XmlSchemaDatatype datatype = flag ? attdef.Datatype : base.context.ElementDecl.Datatype;
if (datatype != null)
{
if (datatype.TokenizedType != XmlTokenizedType.CDATA)
{
value = value.Trim();
}
if (value.Length != 0)
{
object pVal = datatype.ParseValue(value, base.NameTable, this.nsManager);
base.reader.TypedValueObject = pVal;
switch (datatype.TokenizedType)
{
case XmlTokenizedType.ENTITY:
case XmlTokenizedType.ID:
case XmlTokenizedType.IDREF:
if (datatype.Variety == XmlSchemaDatatypeVariety.List)
{
string[] strArray = (string[])pVal;
for (int i = 0; i < strArray.Length; i++)
{
this.ProcessTokenizedType(datatype.TokenizedType, strArray[i]);
}
}
else
{
this.ProcessTokenizedType(datatype.TokenizedType, (string)pVal);
}
break;
}
SchemaDeclBase base2 = flag ? ((SchemaDeclBase)attdef) : ((SchemaDeclBase)base.context.ElementDecl);
if ((base2.MaxLength != 0xffffffffL) && (value.Length > base2.MaxLength))
{
base.SendValidationEvent("Sch_MaxLengthConstraintFailed", value);
}
if ((base2.MinLength != 0xffffffffL) && (value.Length < base2.MinLength))
{
base.SendValidationEvent("Sch_MinLengthConstraintFailed", value);
}
if ((base2.Values != null) && !base2.CheckEnumeration(pVal))
{
if (datatype.TokenizedType == XmlTokenizedType.NOTATION)
{
base.SendValidationEvent("Sch_NotationValue", pVal.ToString());
}
else
{
base.SendValidationEvent("Sch_EnumerationValue", pVal.ToString());
}
}
if (!base2.CheckValue(pVal))
{
if (flag)
{
base.SendValidationEvent("Sch_FixedAttributeValue", attdef.Name.ToString());
}
else
{
base.SendValidationEvent("Sch_FixedElementValue", XmlSchemaValidator.QNameString(base.context.LocalName, base.context.Namespace));
}
}
}
}
}
catch (XmlSchemaException)
{
if (attdef != null)
{
base.SendValidationEvent("Sch_AttributeValueDataType", attdef.Name.ToString());
}
else
{
base.SendValidationEvent("Sch_ElementValueDataType", XmlSchemaValidator.QNameString(base.context.LocalName, base.context.Namespace));
}
}
}