static void GetNameClassRepresentatives( RdpNameClass n, Hashtable names) { if (n is RdpAnyName) { names [illegalQName] = illegalQName; return; } RdpAnyNameExcept exc = n as RdpAnyNameExcept; if (exc != null) { GetNameClassRepresentatives(exc.ExceptNameClass, names); names [illegalQName] = illegalQName; return; } RdpNsName ns = n as RdpNsName; if (ns != null) { QName nn = new QName(String.Empty, ns.NamespaceURI); names [nn] = nn; return; } RdpNsNameExcept nse = n as RdpNsNameExcept; if (nse != null) { GetNameClassRepresentatives(nse.ExceptNameClass, names); QName nn = new QName(String.Empty, nse.NamespaceURI); names [nn] = nn; return; } RdpName name = n as RdpName; if (name != null) { QName qname = new QName(name.LocalName, name.NamespaceURI); names [qname] = qname; return; } else { RdpNameClassChoice c = (RdpNameClassChoice)n; GetNameClassRepresentatives(c.LValue, names); GetNameClassRepresentatives(c.RValue, names); return; } }
// Generating simplified pattern status (similar to XML representation). #region Debug private static string DebugNameClass(RdpNameClass n) { switch (n.NameClassType) { case RdpNameClassType.Name: RdpName nm = (RdpName)n; return("<name ns='" + nm.NamespaceURI + "'>" + nm.LocalName + "</name>\n"); case RdpNameClassType.NsName: return("<nsName ns='" + ((RdpNsName)n).NamespaceURI + "'/>\n"); case RdpNameClassType.NameClassChoice: RdpNameClassChoice nc = (RdpNameClassChoice)n; return("<choice>" + DebugNameClass(nc.LValue) + DebugNameClass(nc.RValue) + "</choice>"); default: return("<" + n.NameClassType.ToString() + "/>\n"); } }
internal RdpNameClass Compile (RelaxngGrammar g) { // Flatten names into RdpGroup. See 4.12. if (names.Count == 0) return null; RdpNameClass p = ((RelaxngNameClass) names [0]).Compile (g); for (int i=1; i<names.Count; i++) { p = new RdpNameClassChoice ( ((RelaxngNameClass) names [i]).Compile (g), p); } return p; }
internal override RdpNameClass Compile (RelaxngGrammar g) { // Flatten names into RdpChoice. See 4.12. if (names.Count == 0) return null; RdpNameClass p = ((RelaxngNameClass) names [0]).Compile (g); if (names.Count == 1) return p; for (int i=1; i<names.Count; i++) p = new RdpNameClassChoice (p, ((RelaxngNameClass) names [i]).Compile (g)); return p; }
static void GetNameClassRepresentatives( RdpNameClass n, IList <QName> names) { if (n is RdpAnyName) { if (!names.Contains(illegalQName)) { names.Add(illegalQName); } return; } RdpAnyNameExcept exc = n as RdpAnyNameExcept; if (exc != null) { GetNameClassRepresentatives(exc.ExceptNameClass, names); if (!names.Contains(illegalQName)) { names.Add(illegalQName); } return; } RdpNsName ns = n as RdpNsName; if (ns != null) { QName nn = new QName(String.Empty, ns.NamespaceURI); if (!names.Contains(nn)) { names.Add(nn); } return; } RdpNsNameExcept nse = n as RdpNsNameExcept; if (nse != null) { GetNameClassRepresentatives(nse.ExceptNameClass, names); QName nn = new QName(String.Empty, nse.NamespaceURI); if (!names.Contains(nn)) { names.Add(nn); } return; } RdpName name = n as RdpName; if (name != null) { QName qname = new QName(name.LocalName, name.NamespaceURI); if (!names.Contains(qname)) { names.Add(qname); } return; } else { RdpNameClassChoice c = (RdpNameClassChoice)n; GetNameClassRepresentatives(c.LValue, names); GetNameClassRepresentatives(c.RValue, names); return; } }