pbwest 2002/11/07 07:30:50
Modified: src/org/apache/fop/xml Tag: FOP_0-20-0_Alt-Design
SyncedFoXmlEventsBuffer.java
Log:
Added getStartElement(BitSet, boolean) and
expectStartElement(BitSet, boolean) for processing of FO sets within
fo:page-sequence descendants.
Revision Changes Path
No revision
No revision
1.1.2.2 +68 -2
xml-fop/src/org/apache/fop/xml/Attic/SyncedFoXmlEventsBuffer.java
Index: SyncedFoXmlEventsBuffer.java
===================================================================
RCS file:
/home/cvs/xml-fop/src/org/apache/fop/xml/Attic/SyncedFoXmlEventsBuffer.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- SyncedFoXmlEventsBuffer.java 24 Oct 2002 14:39:11 -0000 1.1.2.1
+++ SyncedFoXmlEventsBuffer.java 7 Nov 2002 15:30:50 -0000 1.1.2.2
@@ -7,6 +7,7 @@
import java.util.NoSuchElementException;
import java.util.LinkedList;
import java.util.Iterator;
+import java.util.BitSet;
/*
* $Id$
@@ -749,6 +750,71 @@
// Found it!
if (ev != null) return ev;
}
+ return null;
+ }
+
+ /**
+ * Get one of a <tt>BitSet</tt> of possible STARTELEMENT events. Scan
+ * and discard events until a STARTELEMENT event is found which is in
+ * the fo: namespace and whose FO type matches one of those in the
+ * argument <tt>BitSet</tt>.
+ * @param set a <tt>BitSet</tt> containing FO types one of which is
+ * required.
+ * @param discardWhiteSpace - if true, discard any <tt>characters</tt>
+ * events which contain only whitespace.
+ * @return the next matching STARTELEMENT event from the buffer.
+ * @exception FOPException if buffer errors or interrupts occur
+ * @exception NoSuchElementException if the event is not found
+ */
+ public FoXMLEvent getStartElement(BitSet set, boolean discardWhiteSpace)
+ throws FOPException
+ {
+ FoXMLEvent ev;
+ do {
+ ev = expectStartElement(set, discardWhiteSpace);
+ if (ev != null) return ev;
+ // The non-matching event has been pushed back.
+ // Get it and discard. Note that if the first attempt to
+ // getEvent() returns null, the expectStartElement() calls
+ // will throw a NoSuchElementException
+ ev = getEvent();
+ } while (ev != null);
+ // Exit from this while loop is only by discovery of null event
+ throw new NoSuchElementException
+ ("StartElement from BitSet not found.");
+ }
+
+ /**
+ * Expect one of an <tt>BitSet</tt> of possible STARTELEMENT events.
+ * The next STARTELEMENT must be in the fo: namespace, and must have an
+ * FO type which matches one of those in the argument <tt>BitSet</tt>.
+ * <p>TODO:<br>
+ * This method should be retro-fitted to list and array versions.
+ *
+ * @param set a <tt>BitSet</tt> containing the FO types
+ * of possible events, one of which must be the next returned.
+ * @param discardWhiteSpace - if true, discard any <tt>characters</tt>
+ * events which contain only whitespace.
+ * @return the matching STARTELEMENT event.If the next
+ * event detected is not of the required type, <tt>null</tt> is returned.
+ * The erroneous event is pushed back.
+ * @exception FOPException if buffer errors or interrupts occur
+ * @exception NoSuchElementException if end of buffer detected.
+ */
+ public FoXMLEvent expectStartElement
+ (BitSet set, boolean discardWhiteSpace)
+ throws FOPException
+ {
+ FoXMLEvent ev;
+ ev = expectTypedEvent(XMLEvent.STARTELEMENT, discardWhiteSpace);
+ if (ev == null) return ev;
+
+ for (int i = set.nextSetBit(0); i >= 0; i = set.nextSetBit(++i)) {
+ if (ev.foType == i)
+ return ev; // Found it!
+ }
+ // Not found - push the STARTELEMENT event back
+ pushBack(ev);
return null;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]