;ò VÉ]@c@s±dZdklZdkZdkZdkZdklZlZdk Z dk Z ydk l Z Wn e j odk l Z nXdfd„ƒYZdfd„ƒYZdS( sImplement Martel parsers. The classes in this module are used by other Martel modules and not typically by external users. There are two major parsers, 'Parser' and 'RecordParser.' The first is the standard one, which parses the file as one string in memory then generates the SAX events. The other reads a record at a time using a RecordReader and generates events after each read. The generated event callbacks are identical. At some level, both parsers use "_do_callback" to convert mxTextTools tags into SAX events. XXX finish this documentation XXX need a better way to get closer to the likely error position when parsing. XXX need to implement Locator (s generatorsN(shandlerssaxutils(sStringIOs IterRecordscBs>tZd„Zd„Zed„Zed„Zed„ZRS(NcCs(||_||_||_||_dS(N(s record_parsersselfs make_readers reader_argss marker_tag(sselfs record_parsers make_readers reader_argss marker_tag((sMartel/IterParser.pys__init__'s   cCs)t|iiƒ|i|i|iƒSdS(N(s IterRecordssselfs record_parserscopys make_readers reader_argss marker_tag(sself((sMartel/IterParser.pyscopy-scCs<ti|ƒ}|iƒp |iƒ}|i||ƒSdS(N( ssaxutilssprepare_input_sourcessourcesgetCharacterStreams getByteStreamsfilesselfs iterateFiles cont_handler(sselfssources cont_handlersfile((sMartel/IterParser.pysiterate3scCs|it|ƒ|ƒSdS(N(sselfs iterateFilesStringIOsss cont_handler(sselfsss cont_handler((sMartel/IterParser.pys iterateString8sccsXd|_|tjodk}|iƒ}n|ii|ƒ|i||i Œ}x¾no¶y|i ƒ}Wn(t ij oti|iƒ‚nX|tjoPn|it|ƒ|_y|ii|ƒWn(tij o}||i7}‚nX|V|i|_q^W|iƒ\}}|p |idƒoti|iƒ‚ndS(Nii(sselfsstart_positions cont_handlersNonesLAXs record_parserssetContentHandlers make_readersfileobjs reader_argssreadersnextsrecs RecordReaders ReaderErrorsParsersParserPositionExceptionslens end_positions parseStringsexcs remainders lookaheadsread(sselfsfileobjs cont_handlers lookaheadsLAXsreadersrecsexc((sMartel/IterParser.pys iterateFile;s2     (s__name__s __module__s__init__scopysNonesiterates iterateStrings iterateFile(((sMartel/IterParser.pys IterRecords&s     sIterHeaderFootercBs>tZd„Zd„Zed„Zed„Zed„ZRS(Nc Cs^||_||_||_||_||_||_||_||_| |_ | |_ dS(N( s header_parsersselfsmake_header_readers header_argss record_parsersmake_record_readers record_argss footer_parsersmake_footer_readers footer_argss marker_tag( sselfs header_parsersmake_header_readers header_argss record_parsersmake_record_readers record_argss footer_parsersmake_footer_readers footer_argss marker_tag((sMartel/IterParser.pys__init__Zs         c Cs™|i}|tj o|iƒ}n|iiƒ}|i}|tj o|iƒ}nt||i|i||i |i ||i |i |i ƒ SdS(N(sselfs header_parsersNonescopys record_parsers footer_parsersIterHeaderFootersmake_header_readers header_argssmake_record_readers record_argssmake_footer_readers footer_argss marker_tag(sselfs header_parsers footer_parsers record_parser((sMartel/IterParser.pyscopyms    cCs<ti|ƒ}|iƒp |iƒ}|i||ƒSdS(s"parse using the URL or file handleN( ssaxutilssprepare_input_sourcessourcesgetCharacterStreams getByteStreamsfilesselfs iterateFiles cont_handler(sselfssources cont_handlersfile((sMartel/IterParser.pysiterate|scCs|it|ƒ|ƒSdS(N(sselfs iterateFilesStringIOsss cont_handler(sselfsss cont_handler((sMartel/IterParser.pys iterateString‚sccsòd|_|_|tjodk}|iƒ}n|ii|ƒd}|i tj o¤|i ||i hd|<Ž}y|iƒ}Wn(tij oti|iƒ‚nX|it|ƒ|_|i i|ƒ|i|_|iƒ\}}n|i||ihd|<Ž}|i oÉx¾no¶y|iƒ}Wn(tij oti|iƒ‚nX|tjoPn|it|ƒ|_y|ii|ƒWn(tij o}||i7}‚nX|V|i|_q6WdSnx×noÏy|iƒ}Wn)tij o|iƒ\}}PnX| o|iƒ\}}Pny|ii|ƒWn3tij o$|iƒ\}}||}PnX|it|ƒ|_|V|i|_qÿW|i||ihd|<Ž}y|iƒ}Wn(tij oti|iƒ‚nX|tjoti|iƒ‚ny|ii|ƒWn(tij o}||i7}‚nX|it|ƒ|_|i|_|iƒ\}}|p |idƒoti|iƒ‚ndS(Niss lookaheadi( sselfsstart_positions end_positions cont_handlersNonesLAXs record_parserssetContentHandlers lookaheads header_parsersmake_header_readersfileobjs header_argssreadersnextsrecs RecordReaders ReaderErrorsParsersParserPositionExceptionslens parseStrings remaindersmake_record_readers record_argss footer_parsersexcsParserExceptionsmake_footer_readers footer_argssreadsParserIncompleteException(sselfsfileobjs cont_handlers lookaheadsLAXsreadersrecsexc((sMartel/IterParser.pys iterateFile…sŽ  ! !    !   (s__name__s __module__s__init__scopysNonesiterates iterateStrings iterateFile(((sMartel/IterParser.pysIterHeaderFooterYs     (s__doc__s __future__s generatorssurllibs tracebackssyssxml.saxshandlerssaxutilssParsers RecordReaders cStringIOsStringIOs ImportErrors IterRecordssIterHeaderFooter( s IterRecordssParsersStringIOs tracebacksurllibssysshandlers generatorss RecordReaderssaxutilssIterHeaderFooter((sMartel/IterParser.pys?s 3