Exemplo n.º 1
0
        // 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);
        }
Exemplo n.º 2
0
        // 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);
        }
Exemplo n.º 3
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);
        }