private void checkInvalidAttrNameClass (RdpNameClass nc) { string xmlnsNS = "http://www.w3.org/2000/xmlns"; RdpNameClassChoice choice = nc as RdpNameClassChoice; if (choice != null) { checkInvalidAttrNameClass (choice.LValue); checkInvalidAttrNameClass (choice.RValue); return; } RdpAnyNameExcept except = nc as RdpAnyNameExcept; if (except != null) { checkInvalidAttrNameClass (except.ExceptNameClass); return; } if (nc is RdpAnyName) return; RdpName n = nc as RdpName; if (n != null) { if (n.NamespaceURI == xmlnsNS) throw new RelaxngException (this, "cannot specify \"" + xmlnsNS + "\" for name of attribute."); if (n.LocalName == "xmlns" && n.NamespaceURI == "") throw new RelaxngException (this, "cannot specify \"xmlns\" inside empty ns context."); } else { RdpNsName nn = nc as RdpNsName; if (nn.NamespaceURI == "http://www.w3.org/2000/xmlns") throw new RelaxngException (this, "cannot specify \"" + xmlnsNS + "\" for name of attribute."); RdpNsNameExcept x = nc as RdpNsNameExcept; if (x != null) checkInvalidAttrNameClass (x.ExceptNameClass); } }
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); }
internal bool FindInvalidType(RdpNameClass nc, bool allowNsName) { RdpNameClassChoice choice = nc as RdpNameClassChoice; if (choice != null) { return(FindInvalidType(choice.LValue, allowNsName) || FindInvalidType(choice.RValue, allowNsName)); } else if (nc is RdpAnyName) { return(true); } else if (nc is RdpNsName && !allowNsName) { return(true); } else { return(false); } }