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); }