-í
È<c       sì     d  Z  , / d k Z 0 d k Z 1 y 2 d k l Z Wn& 3 e j
 o 4 d k l Z n X6 d f  d „  ƒ  YZ L d f  d „  ƒ  YZ V d f  d „  ƒ  YZ i d	 f  d
 „  ƒ  YZ	 w d f  d „  ƒ  YZ
 Š d f  d „  ƒ  YZ d S(   sf  Iterate over records of a XML parse tree

The standard parser is callback based over all the elements of a file.
If the file contains records, many people would like to be able to
iterate over each record and only use the callback parser to analyze
the record.

If the expression is a 'ParseRecords', then the code to do this is
easy; use its make_reader to grab records and its record_expression to
parse them.  However, this isn't general enough.  The use of a
ParseRecords in the format definition should be strictly a
implementation decision for better memory use.  So there needs to be
an API which allows both full and record oriented parsers.

Here's an example use of the API:
>>> import sys
>>> import swissprot38  # one is in Martel/test/testformats
>>> from xml.dom import pulldom
>>> iterator = swissprot38.format.make_iterator("swissprot38_record")
>>> text = open("sample.swissprot").read()
>>> for record in iterator.iterateString(text, pulldom.SAX2DOM()):
..      print "Read a record with the following AC numbers:"
...     for acc in record.document.getElementsByTagName("ac_number"):
...         acc.writexml(sys.stdout)
...         sys.stdout.write("
")
...


There are several parts to this API.  First is the 'Iterator

There are two parts to the API.  One is the EventStream.  This
contains a single method called "next()" which returns a list of SAX
events in the 2-ple (event_name, args).  It is called multiple times
to return successive event lists and returns None if no events are
available.

The other is the Iterator

Sean McGrath has a RAX parser (Record API for XML) which uses a
concept similar to this.
N(   s   StringIOs   StoreEventsc      sk   6 t  Z 7 d „  Z : d „  Z < d „  Z ? d „  Z B d „  Z D d „  Z G d „  Z I d „  Z	 RS(	   Nc    s   7 8 g  |  _ d  S(   N(   s   selfs   events(   s   self(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   __init__7 s   c    s
   : ; d  S(   N(    (   s   self(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   startDocument: s   c    s
   < = d  S(   N(    (   s   self(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   endDocument< s   c    s    ? A |  i i d | f ƒ d  S(   Ns   startElement(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   startElement? s   c    s    B C |  i i d | f ƒ d  S(   Ns
   characters(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys
   charactersB s   c    s    D E |  i i d | f ƒ d  S(   Ns
   endElement(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys
   endElementD s   c    s    G H |  i i d | f ƒ d  S(   Ns   error(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   errorG s   c    s    I J |  i i d | f ƒ d  S(   Ns
   fatalError(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys
   fatalErrorI s   (
   s   __name__s
   __module__s   __init__s   startDocuments   endDocuments   startElements
   characterss
   endElements   errors
   fatalError(    (    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   StoreEvents6 s   	s   EventStreamc      s#   L t  Z M d „  Z O d „  Z RS(   Nc    s   M N | |  _ d  S(   N(   s
   event_lists   selfs   events(   s   selfs
   event_list(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   __init__M s   c    s>   O P |  i o# Q |  i } R t |  _ S | Sn T t Sd  S(   N(   s   selfs   eventss   xs   None(   s   selfs   x(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   nextO s
   (   s   __name__s
   __module__s   __init__s   next(    (    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   EventStreamL s   	s   Iteratorc      sD   V t  Z W d „  Z [ e d „ Z c e d „ Z f e d „ Z RS(   Nc    s   W X | |  _  Y | |  _ d  S(   N(   s   parsers   selfs   tag(   s   selfs   parsers   tag(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   __init__W s   c    sn   [ \ ] t  ƒ  } ^ |  i i | ƒ _ |  i i | ƒ ` |  i i | ƒ a t t	 | i ƒ |  i
 | ƒ Sd S(   s    create an iterator over a stringN(   s   StoreEventss   eventss   selfs   parsers   setContentHandlers   setErrorHandlers   parseStrings   ss   Iterates   EventStreams   tags   cont_handler(   s   selfs   ss   cont_handlers   events(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   iterateString[ s   c    s    c d |  i | i ƒ  | ƒ Sd  S(   N(   s   selfs   iterateStrings   fileobjs   reads   cont_handler(   s   selfs   fileobjs   cont_handler(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   iterateFilec s   c    s#   f g |  i t i | ƒ | ƒ Sd  S(   N(   s   selfs   iterateFiles   urllibs   urlopens   systemIds   cont_handler(   s   selfs   systemIds   cont_handler(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   iteratef s   (   s   __name__s
   __module__s   __init__s   Nones   iterateStrings   iterateFiles   iterate(    (    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   IteratorV s   	s   RecordEventStreamc      s#   i t  Z j d „  Z m d „  Z RS(   Nc    s   j k | |  _  l | |  _ d  S(   N(   s   readers   selfs   parser(   s   selfs   readers   parser(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   __init__j s   c    sƒ   m n |  i i ƒ  } o | t j o p t Sn q t ƒ  } r |  i i | ƒ s |  i i	 | ƒ t |  i i
 | ƒ u | i Sd  S(   N(   s   selfs   readers   nexts   texts   Nones   StoreEventss   eventss   parsers   setContentHandlers   setErrorHandlers   parseString(   s   selfs   texts   events(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   nextm s   (   s   __name__s
   __module__s   __init__s   next(    (    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   RecordEventStreami s   	s   IteratorRecordsc      sD   w t  Z x d „  Z ~ e d „ Z  e d „ Z ‡ e d „ Z RS(   Nc    s7   x y | |  _  z | |  _ { | |  _ | | |  _ d  S(   N(   s   record_parsers   selfs   make_readers   reader_argss
   marker_tag(   s   selfs   record_parsers   make_readers   reader_argss
   marker_tag(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   __init__x s   c    s    ~  |  i t | ƒ | ƒ Sd  S(   N(   s   selfs   iterateFiles   StringIOs   ss   cont_handler(   s   selfs   ss   cont_handler(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   iterateString~ s   c    sN    ‚ t  |  i ƒ | f |  i ƒ } „ t t | |  i ƒ … |  i	 | ƒ Sd  S(   N(   s   applys   selfs   make_readers   fileobjs   reader_argss   record_readers   Iterates   RecordEventStreams   record_parsers
   marker_tags   cont_handler(   s   selfs   fileobjs   cont_handlers   record_reader(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   iterateFile s   c    s#   ‡ ˆ |  i t i | ƒ | ƒ Sd  S(   N(   s   selfs   iterateFiles   urllibs   urlopens   systemIds   cont_handler(   s   selfs   systemIds   cont_handler(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   iterate‡ s   (   s   __name__s
   __module__s   __init__s   Nones   iterateStrings   iterateFiles   iterate(    (    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   IteratorRecordsw s   	s   Iteratec      s>   Š t  Z ‹ e d „ Z ˜ d „  Z á d „  Z è d „  Z RS(   Nc    s–   ‹ Œ | t j o  d  k } Ž | i ƒ  } n  | |  _  t |  _ ‘ | |  _ ’ | |  _  “ d |  _ ” d |  _ • d |  _	 – d |  _
 d  S(   Ni    (   s   cont_handlers   Nones   LAXs   event_streams   selfs   eventss   tags   _ns   start_positions   end_positions   current_position(   s   selfs   event_streams   tags   cont_handlers   LAX(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   __init__‹ s   c 	   sî  ˜ ™ |  i } š | o= › |  i i ƒ  } œ | t j o  t Sn ž | |  _ n   d } ¡ t | ƒ } £ xb£ d oW¤ | | j oM ¥ |  i i ƒ  } ¦ | t j o § Pn ¨ | i	 | ƒ © t | ƒ } n « | | \ } } ¬ | d j p
 | d j o ® t |  _ ¯ | d ‚ n ± | d j o | d |  i j oH² |  i |  _ ³ |  i } ´ | i ƒ  µ xýµ | | j  oì¶ | | \ } } · | d j oÓ º | d } » x§ » | | j  o– ¼ | | \ } } ½ | d j o | d |  i j o ¾ |  i | d 4¿ | ‚ n1 À | d j o  Á |  i t | d ƒ 7_ n Â | d } qÁWÄ t |  _ Å | ‚ nó Æ | d j o È t |  _ É | d ‚ nÆ Ë t t | | ƒ | ƒ Ì | d j o | d |  i j oK Í |  i |  _ Î |  i | d 4Ï | i ƒ  Ð |  i d |  _ Ñ | Sn1 Ò | d j o  Ó |  i t | d ƒ 7_ n Ô | d } q{WÖ t d t |  i ƒ ‚ n> Ù | d j o  Ú |  i t | d ƒ 7_ n Û | d } qu WÞ t |  _ ß t Sd  S(	   Ni    i   s   errors
   fatalErrors   startElements
   endElements
   characterss    no endElement(%s) and no errors?(   s   selfs   eventss   event_streams   nexts   Nones   is   lens   ns
   new_eventss   extends   names   argss   tags   current_positions   start_positions   cont_handlers   startDocuments   excs   applys   getattrs   end_positions   endDocuments   _ns   AssertionErrors   repr(	   s   selfs   names
   new_eventss   argss   ns   is   excs   eventss   cont_handler(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   next˜ sv   	 
$  $ $  c    sa   á â t  o | |  i j p
 t d ‚ ã |  i ƒ  } ä | t j o å t | ‚ n æ | Sd  S(   Ns   forward iteration only(	   s	   __debug__s   ns   selfs   _ns   AssertionErrors   nexts   xs   Nones
   IndexError(   s   selfs   ns   x(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   __getitem__á s
   $c    s   è é t  |  i t ƒ Sd  S(   N(   s   iters   selfs   nexts   None(   s   self(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   __iter__è s   (   s   __name__s
   __module__s   Nones   __init__s   nexts   __getitem__s   __iter__(    (    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   IterateŠ s   	I(   s   __doc__s   urllibs   Parsers	   cStringIOs   StringIOs   ImportErrors   StoreEventss   EventStreams   Iterators   RecordEventStreams   IteratorRecordss   Iterate(	   s   StoreEventss   RecordEventStreams   EventStreams   Iterators   StringIOs   Iterates   Parsers   IteratorRecordss   urllib(    (    s9   /mit/seven/lib/python2.2/site-packages/Martel/Iterator.pys   ?, s   
