Exemplo n.º 1
0
		RdpPattern ReplaceAfterHeadWithEmpty (RdpPattern p)
		{
			if (p is RdpAbstractSingleContent)
				return new RdpChoice (RdpEmpty.Instance, p);
			RdpAbstractBinary ab = p as RdpAbstractBinary;
			if (ab == null)
				return p;
			if (ab is RdpGroup)
				return new RdpGroup (ReplaceAfterHeadWithEmpty (ab.LValue), ReplaceAfterHeadWithEmpty (ab.RValue));
			else if (ab is RdpChoice)
				return new RdpChoice (ReplaceAfterHeadWithEmpty (ab.LValue), ReplaceAfterHeadWithEmpty (ab.RValue));
			else if (ab is RdpInterleave)
				return new RdpInterleave (ReplaceAfterHeadWithEmpty (ab.LValue), ReplaceAfterHeadWithEmpty (ab.RValue));
			else if (ab is RdpAfter)
				return new RdpAfter (RdpEmpty.Instance, ab.RValue);
			throw new SystemException ("INTERNAL ERROR: unexpected pattern: " + p.GetType ());
		}
Exemplo n.º 2
0
		RdpPattern ReplaceAttributesWithEmpty (RdpPattern p)
		{
			if (p is RdpAttribute)
				return RdpEmpty.Instance;

			RdpAbstractSingleContent asc = p as RdpAbstractSingleContent;
			if (asc is RdpList)
				return new RdpList (ReplaceAttributesWithEmpty (asc.Child));
			if (asc is RdpOneOrMore)
				return new RdpOneOrMore (ReplaceAttributesWithEmpty (asc.Child));
			else if (asc is RdpElement)
				return asc; // should not be expected to contain any attribute as RdpElement.

			RdpAbstractBinary ab = p as RdpAbstractBinary;
			if (ab == null)
				return p;
			if (ab is RdpGroup)
				return new RdpGroup (ReplaceAttributesWithEmpty (ab.LValue), ReplaceAttributesWithEmpty (ab.RValue));
			else if (ab is RdpChoice)
				return new RdpChoice (ReplaceAttributesWithEmpty (ab.LValue), ReplaceAttributesWithEmpty (ab.RValue));
			else if (ab is RdpInterleave)
				return new RdpInterleave (ReplaceAttributesWithEmpty (ab.LValue), ReplaceAttributesWithEmpty (ab.RValue));
			else if (ab is RdpAfter) // FIXME: is it correct?
				return new RdpAfter (ReplaceAttributesWithEmpty (ab.LValue), ReplaceAttributesWithEmpty (ab.RValue));
			throw new SystemException ("INTERNAL ERROR: unexpected pattern: " + p.GetType ());
		}
Exemplo n.º 3
0
		// Error recovery feature can be enabled by using
		// InvalidNodeFound event of type RelaxngValidationEventHandler.
		// 
		// Other than startTagOpenDeriv, it is (again) based on
		// James Clark's derivative algorithm.
		// http://www.thaiopensource.com/relaxng/derivative.html
		// For invalid start tag, we just recover from it by using
		// xs:any-like pattern for unexpected node occurence.

		RdpPattern MakeGroupHeadOptional (RdpPattern p)
		{
			if (p is RdpAbstractSingleContent)
				return new RdpChoice (RdpEmpty.Instance, p);
			RdpAbstractBinary ab = p as RdpAbstractBinary;
			if (ab == null)
				return p;
			if (ab is RdpGroup)
				return new RdpGroup (new RdpChoice (RdpEmpty.Instance, ab.LValue), ab.RValue);
			else if (ab is RdpChoice)
				return new RdpChoice (MakeGroupHeadOptional (ab.LValue), MakeGroupHeadOptional (ab.RValue));
			else if (ab is RdpInterleave)
				return new RdpInterleave (MakeGroupHeadOptional (ab.LValue), MakeGroupHeadOptional (ab.RValue));
			else if (ab is RdpAfter) // FIXME: is it correct?
				return new RdpAfter (MakeGroupHeadOptional (ab.LValue), MakeGroupHeadOptional (ab.RValue));
			throw new SystemException ("INTERNAL ERROR: unexpected pattern: " + p.GetType ());
		}