// Name class analysis internal static bool NamesOverlap(RdpPattern p1, RdpPattern p2, bool checkElements) { if (p1 == p2) { return(true); } RdpAbstractBinary bp1 = p1 as RdpAbstractBinary; if (bp1 != null) { return(NamesOverlap(bp1.LValue, p2, checkElements) || NamesOverlap(bp1.RValue, p2, checkElements)); } RdpOneOrMore rp1 = p1 as RdpOneOrMore; if (rp1 != null) { return(NamesOverlap(rp1.Child, p2, checkElements)); } RdpAttribute ap1 = p1 as RdpAttribute; if (ap1 != null) { return(NamesOverlap(p2, ap1.NameClass, checkElements)); } if (!checkElements) { return(false); } RdpElement ep1 = p1 as RdpElement; if (ep1 != null) { return(NamesOverlap(p2, ep1.NameClass, checkElements)); } return(false); }
// Name class analysis static bool NamesOverlap(RdpPattern p1, RdpNameClass n, bool checkElements) { RdpAbstractBinary bp1 = p1 as RdpAbstractBinary; if (bp1 != null) { return(NamesOverlap(bp1.LValue, n, checkElements) || NamesOverlap(bp1.RValue, n, checkElements)); } RdpOneOrMore rp1 = p1 as RdpOneOrMore; if (rp1 != null) { return(NamesOverlap(rp1.Child, n, checkElements)); } RdpAttribute ap1 = p1 as RdpAttribute; if (ap1 != null) { return(NameClassOverlap(ap1.NameClass, n)); } if (!checkElements) { return(false); } RdpElement ep1 = p1 as RdpElement; if (ep1 != null) { return(NameClassOverlap(ep1.NameClass, n)); } return(false); }
internal static string DebugRdpPattern(RdpPattern p, IDictionary <object, object> visitedPattern) { if (p is RdpText) { return("<text/>\n"); } if (p is RdpEmpty) { return("<empty/>\n"); } if (p is RdpNotAllowed) { return("<notAllowed/>\n"); } if (visitedPattern.ContainsKey(p)) { return("<" + p.PatternType + " ref='" + p.GetHashCode() + "'/>"); } visitedPattern.Add(p, p); string intl = "(id=" + p.GetHashCode() + ") "; RdpAbstractSingleContent s = p as RdpAbstractSingleContent; if (s != null) { intl = DebugRdpPattern(s.Child, visitedPattern); } RdpAbstractBinary b = p as RdpAbstractBinary; if (b != null) { intl = DebugRdpPattern(b.LValue, visitedPattern) + DebugRdpPattern(b.RValue, visitedPattern); } RdpData data = p as RdpData; if (data != null) { intl = String.Format("name={0},ns={1},type={2} {3}", data.Datatype.LocalName, data.Datatype.NamespaceURI, data.Datatype.GetType(), data is RdpDataExcept ? DebugRdpPattern(((RdpDataExcept)data).Except, visitedPattern) : String.Empty); } RdpValue value = p as RdpValue; if (value != null) { intl = String.Format("name={0},ns={1},value={2} type={3}", value.Datatype.LocalName, value.Datatype.NamespaceURI, value.Value, value.Datatype.GetType()); } RdpElement el = p as RdpElement; if (el != null) { intl = DebugNameClass(el.NameClass) + DebugRdpPattern(el.Children, visitedPattern); } RdpAttribute at = p as RdpAttribute; if (at != null) { intl = DebugNameClass(at.NameClass) + DebugRdpPattern(at.Children, visitedPattern); } string str = String.Format("<{0} id='id{1}'>\n{2}\n</{0}>", p.PatternType.ToString(), p.GetHashCode(), intl); return(str); }