class output_file(Thread): def __init__(self,pi): self.pout = POS(pi) self.file_name = FileReader(SC(System.in).nextLine()) def run(self): file_sc = SC(self.file_name) while file_sc.hasNext(): self.pout.write(file_sc.nextLine()+"\n")
class IncrementalParser(object): def __init__(self, encoding=ENCODING): self._depth = 0 self._buffer = '' self.handler = IncrementalHandler() self._encoding = encoding self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr) def close(self): self._initialized = False self.handler.reset() self._depth = 0 self._buffer = '' self._fed.close() self._feeder.close() self._er.close() self._sr.close() def reset(self): self.close() self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % self._encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr) def _parse(self, chunk, fragment=False): if chunk.startswith('<?xml '): chunk = chunk[chunk.find('?>')+2:] if not chunk: return self._fed.write(chunk) er = self._er consumed = False while er.hasNext(): if not fragment and self._feeder.available() == 0 and consumed: break event = er.next() etype = event.getEventType() if etype == XMLEvent.START_ELEMENT: consumed = False if not chunk.endswith('/>'): consumed = True self._depth += 1 element = event.asStartElement() self.handler.startElementNS(None, element.getName(), element.getAttributes()) elif etype == XMLEvent.END_ELEMENT: consumed = True self._depth -= 1 element = event.asEndElement() self.handler.endElementNS(None, element.getName()) if self._depth == 0: break elif etype == XMLEvent.CHARACTERS: consumed = False self.handler.characters(event.asCharacters().getData()) elif etype == XMLEvent.COMMENT: consumed = True self.handler.comment(event.getText()) elif etype == XMLEvent.PROCESSING_INSTRUCTION: consumed = True self.handler.processingInstruction(event.getTarget(), event.getData()) elif etype == XMLEvent.START_DOCUMENT: self.handler.startDocument() elif etype == XMLEvent.END_DOCUMENT: break def feed(self, chunk): if not chunk: return self._buffer = self._buffer + chunk pos = posa = 0 posb = -1 last_posb = 0 new_buffer = '' buf_len = len(self._buffer) while 1: found = False posa = self._buffer.find('<', pos) if posa > -1: posb = self._buffer.find('>', posa) if posb > -1: found = True pos = posb self._parse(self._buffer[last_posb:posb+1]) last_posb = posb+1 if not found and posb != buf_len: break self._buffer = self._buffer[last_posb:]
class IncrementalParser(object): def __init__(self, encoding=ENCODING): self._depth = 0 self._buffer = '' self.handler = IncrementalHandler() self._encoding = encoding self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr) def close(self): self._initialized = False self.handler.reset() self._depth = 0 self._buffer = '' self._fed.close() self._feeder.close() self._er.close() self._sr.close() def reset(self): self.close() self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % self._encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr) def _parse(self, chunk, fragment=False): if chunk.startswith('<?xml '): chunk = chunk[chunk.find('?>') + 2:] if not chunk: return self._fed.write(chunk) er = self._er consumed = False while er.hasNext(): if not fragment and self._feeder.available() == 0 and consumed: break event = er.next() etype = event.getEventType() if etype == XMLEvent.START_ELEMENT: consumed = False if not chunk.endswith('/>'): consumed = True self._depth += 1 element = event.asStartElement() self.handler.startElementNS(None, element.getName(), element.getAttributes()) elif etype == XMLEvent.END_ELEMENT: consumed = True self._depth -= 1 element = event.asEndElement() self.handler.endElementNS(None, element.getName()) if self._depth == 0: break elif etype == XMLEvent.CHARACTERS: consumed = False self.handler.characters(event.asCharacters().getData()) elif etype == XMLEvent.COMMENT: consumed = True self.handler.comment(event.getText()) elif etype == XMLEvent.PROCESSING_INSTRUCTION: consumed = True self.handler.processingInstruction(event.getTarget(), event.getData()) elif etype == XMLEvent.START_DOCUMENT: self.handler.startDocument() elif etype == XMLEvent.END_DOCUMENT: break def feed(self, chunk): if not chunk: return self._buffer = self._buffer + chunk pos = posa = 0 posb = -1 last_posb = 0 new_buffer = '' buf_len = len(self._buffer) while 1: found = False posa = self._buffer.find('<', pos) if posa > -1: posb = self._buffer.find('>', posa) if posb > -1: found = True pos = posb self._parse(self._buffer[last_posb:posb + 1]) last_posb = posb + 1 if not found and posb != buf_len: break self._buffer = self._buffer[last_posb:]