internal override RdpPattern Compile (RelaxngGrammar grammar) { IsCompiled = true; RdpNameClass cnc = nc.Compile (grammar); this.checkInvalidAttrNameClass (cnc); return new RdpAttribute (cnc, (p != null) ? p.Compile (grammar) : RdpText.Instance); }
private void PrepareState() { if (vState != null) { return; } if (!pattern.IsCompiled) { pattern.Compile(); } if (vState == null) { vState = pattern.StartPattern; } }
internal override RdpPattern Compile (RelaxngGrammar grammar) { grammar.CheckIncludeRecursion (Href); grammar.IncludedUris.Add (Href, Href); if (grammar.Resolver == null) throw new RelaxngException (this, "To compile 'include' element, XmlResolver is required."); Uri uri = grammar.Resolver.ResolveUri (BaseUri != String.Empty ? new Uri (BaseUri) : null, Href); RelaxngPattern p = ReadExternalResource (grammar, uri, ns); p.DataProvider = grammar.Provider; RdpPattern ret = p.Compile (grammar); grammar.IncludedUris.Remove (Href); return ret; }
static void ValidateRelaxng(RelaxngPattern p, string [] args) { p.Compile(); if (args.Length < 2) { return; } for (int i = 2; i < args.Length; i++) { XmlTextReader xtr = new XmlTextReader(args [i]); RelaxngValidatingReader vr = new RelaxngValidatingReader(xtr, p); if (Environment.GetEnvironmentVariable("MONO_XMLTOOL_ERROR_DETAILS") == "yes") { vr.ReportDetails = true; } else { vr.InvalidNodeFound += delegate(XmlReader source, string message) { IXmlLineInfo li = source as IXmlLineInfo; Console.WriteLine("ERROR: {0} (at {1} line {2} column {3})", message, source.BaseURI, li != null && li.HasLineInfo() ? li.LineNumber : 0, li != null && li.HasLineInfo() ? li.LinePosition : 0); return(true); } }; while (!vr.EOF) { vr.Read(); } } }
internal RdpPattern Compile(RelaxngGrammar grammar) { return(p.Compile(grammar)); }
// Compile from this simplified syntax to derivatives. internal override RdpPattern Compile(RelaxngGrammar grammar) { ResetCompileState(); parentGrammar = grammar; // First, process includes and divs. RELAX NG 4.1 - 4.15. ArrayList compiledDivs = new ArrayList(); foreach (RelaxngInclude inc in includes) { compiledDivs.Add(inc.Compile(this)); } compiledDivs.AddRange(divs); foreach (RelaxngDiv div in compiledDivs) { div.Compile(this); } // Check constraints. RELAX NG 4.16 foreach (RelaxngStart start in starts) { start.Pattern.CheckConstraints(); } foreach (RelaxngDefine define in defs) { foreach (RelaxngPattern p in define.Patterns) { p.CheckConstraints(); } } // Assemble combine into the same name defines/start. // see RELAX NG 4.17. AssembleCombine(); // 4.18 : <grammar> must have at least one <start>. if (assembledStart == null) { throw new RelaxngException("A grammar elements must contain at least one start element."); } compiledStart = assembledStart.Compile(this); // Assemble all define components into top grammar and // return start patterns for descendant grammars. // see RELAX NG 4.18. CollectGrammars(); if (parentGrammar != null) { return(compiledStart); } assembledStart = null; // no use anymore // 4.19 (a) remove non-reachable defines /* * compiledStart.MarkReachableDefs (); * ArrayList tmp = new ArrayList (); * foreach (DictionaryEntry entry in this.assembledDefs) * if (!reachableDefines.ContainsKey (entry.Key)) * tmp.Add (entry.Key); * foreach (string key in tmp) * assembledDefs.Remove (key); */ // 4.19 (b) check illegal recursion CheckRecursion(compiledStart, 0); // here we collected element-replaced definitions foreach (DictionaryEntry entry in elementReplacedDefs) { assembledDefs.Add(entry.Key, entry.Value); } startPattern = compiledStart; // 4.20,21 reduce notAllowed and empty. bool b; do { b = false; startPattern = startPattern.ReduceEmptyAndNotAllowed(ref b, new Hashtable()); }while (b); Hashtable ht = new Hashtable(); startPattern.setInternTable(ht); // Check Constraints: RELAX NG spec 7 // 7.1.1-4, 7.3, 7.4 startPattern.CheckConstraints(false, false, false, false, false, false); // 7.1.5 CheckStartPatternContent(startPattern); // 4.19 (c) expandRef - actual replacement startPattern = compiledStart.ExpandRef(assembledDefs); // 7.2 RdpContentType ct = startPattern.ContentType; // return its start pattern. IsCompiled = true; return(startPattern); }
static void ValidateRelaxng (RelaxngPattern p, string [] args) { p.Compile (); if (args.Length < 2) return; for (int i = 2; i < args.Length; i++) { XmlTextReader xtr = new XmlTextReader (args [i]); RelaxngValidatingReader vr = new RelaxngValidatingReader (xtr, p); if (Environment.GetEnvironmentVariable ("MONO_XMLTOOL_ERROR_DETAILS") == "yes") vr.ReportDetails = true; else vr.InvalidNodeFound += delegate (XmlReader source, string message) { IXmlLineInfo li = source as IXmlLineInfo; Console.WriteLine ("ERROR: {0} (at {1} line {2} column {3})", message, source.BaseURI, li != null && li.HasLineInfo () ? li.LineNumber : 0, li != null && li.HasLineInfo () ? li.LinePosition : 0); return true; }; while (!vr.EOF) vr.Read (); } }