コード例 #1
0
        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);
        }