예제 #1
0
 private void ProcessPara(ParagraphInfo startPI)
 {
     ParagraphInfo parent = startPI;
     _domIter.MoveNext();
     ParagraphInfo current = _domIter.Current;
     while (true)
     {
         if (IsChild(parent, current))
         {
             current.Start(_xmlWriter);
             _stack.Push(parent);
             parent = current;
             _domIter.MoveNext();
             current = _domIter.Current;
         }
         else
         {
             parent.End(_xmlWriter);
             if (_stack.Count == 0)
             {
                 System.Diagnostics.Debug.Assert(current.IsEndMarker);
                 break;
             }
             parent = _stack.Pop();
         }
     }
 }
예제 #2
0
 // recursive version takes 13/8 times as long as stack version above
 private void ProcessParaRecursive(ParagraphInfo parent)
 {
     ParagraphInfo current;
     parent.Start(_xmlWriter);
     _domIter.MoveNext();
     while (IsChild(parent, (current = _domIter.Current)))
     {
         ProcessPara(current);
     }
     parent.End(_xmlWriter);
 }
예제 #3
0
 private bool IsChild(ParagraphInfo parent, ParagraphInfo child)
 {
     return !child.IsEndMarker && parent.IsChild(child);
 }
예제 #4
0
 public bool IsChild(ParagraphInfo child)
 {
     return _strategy.DoIsChild(child, this);
 }