コード例 #1
0
ファイル: RelaxngPattern.cs プロジェクト: raj581/Marvin
		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);
		}
コード例 #2
0
 private void PrepareState()
 {
     if (vState != null)
     {
         return;
     }
     if (!pattern.IsCompiled)
     {
         pattern.Compile();
     }
     if (vState == null)
     {
         vState = pattern.StartPattern;
     }
 }
コード例 #3
0
ファイル: RelaxngPattern.cs プロジェクト: raj581/Marvin
		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;

		}
コード例 #4
0
        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();
                }
            }
        }
コード例 #5
0
 internal RdpPattern Compile(RelaxngGrammar grammar)
 {
     return(p.Compile(grammar));
 }
コード例 #6
0
        // 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);
        }
コード例 #7
0
ファイル: xmltool.cs プロジェクト: nobled/mono
		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 ();
			}
		}