コード例 #1
0
ファイル: DocXParser.cs プロジェクト: killbug2004/WSProf
 public Parser(Stream inputStream, XMLConsumer startConsumer, IConsumer destination)
 {
     m_inputStream = inputStream;
     m_documentReader = XmlReader.Create(inputStream);
     if (startConsumer == null)
         throw new ArgumentNullException("Start consumer is not allowed to be null");
     m_startXMLConsumer = startConsumer;
     if (m_startXMLConsumer.Context != null)
         m_startXMLConsumer.Context.Reader = m_documentReader;
     m_consumer = destination;
 }
コード例 #2
0
ファイル: DocXReader.cs プロジェクト: killbug2004/WSProf
 private void ParseStream(Stream inStream, XMLConsumer handler)
 {
     using (Parser parser = new Parser(inStream, handler , Consumer))
     {
         parser.Parse();
     }
 }
コード例 #3
0
        //[Test]
        //public void TestTable_SimpleSingle()
        //{
        //    using (Stream sIn = new FileStream(TESTFILE_DIR + "TableSimple2By2.xml", FileMode.Open))
        //    {
        //        DocXReaderTestWriter writerOut = new DocXReaderTestWriter(null);

        //        tbl_Handler objectConsumer = new tbl_Handler(null);
        //        Helper_ParseFileIntoConsumer(sIn, writerOut, objectConsumer);

        //        Assert.IsFalse(objectConsumer.HasNonDocElements(), "tbl tag should not generate any nondoc elements");
        //        Helper_VerifySingleDocElementWasDispatchedOfType(writerOut, typeof(Table));
        //        Assert.IsTrue(writerOut.Elements[0].IsContent);
        //        Assert.IsFalse(writerOut.Elements[0].IsStart);
        //    }
        //}


        #region Helpers
        private static void Helper_ParseFileIntoConsumer(Stream sIn, DocXReaderTestWriter writerOut, XMLConsumer objectConsumer)
        {
            Parser pft = new Parser(sIn, objectConsumer, writerOut);
            
            pft.StopOnTopLevelTargetFinished();
            pft.Parse();
            Assert.AreEqual(0, pft.m_targets.Count, "Should have completed any subtargets");
            Assert.IsFalse(objectConsumer.HasElementsToDispatch(), "All doc elements should have been dispatched by completion");
        }
コード例 #4
0
ファイル: DocXParser.cs プロジェクト: killbug2004/WSProf
        private bool DealWithTargetFinished(ref XMLConsumer target)
        {
            if (m_bStopOnTopLevelTargetFinished && m_targets.Count == 0)
                return false;

            if (target.GetSubConsumer() != null)
                throw new DocXReadException("A target that had finished also specified an available subconsumer");

            Queue<object> NonDocElements = target.GetNonDocElements();

            if (m_targets.Count == 0 && NonDocElements.Count > 0)
            {
                throw new DocXReadException("The last target has finished (stack empty) and has output that will not be used");
            }

            if (m_targets.Count == 0)
                return false;

            if (target is p_Handler)
                InsertSectionFormattingPlaceholdersIfRequired();

            target.Dispose();
            target = m_targets.Pop();

            while (NonDocElements.Count > 0)
            {
                object consumerOutput = NonDocElements.Dequeue();
                target.OnSubConsumerComplete(consumerOutput);

                // the fact that the sub-consumer is complete may allow the higher level consumer
                // to dispatch an element
                while (target.HasElementsToDispatch())
                    AddObject(target.GetNextElementToDispatch());
            }
            return true;
        }