def processCommandLine(): """Process command line and return a `Publisher`.""" # Determine writer here so options can be given normally preWriter = writerDefault for arg in sys.argv: match = re.search(writerArgRE1, arg) if match: preWriter = match.group(1) pub = Publisher3Args() pub.set_reader('standalone', None, 'restructuredtext') pub.set_writer(preWriter) settingsSpec = SettingsSpec() settingsSpec.settings_spec = settings_spec settingsSpec.settings_defaults = settings_defaults pub.process_command_line(usage=usage, description=description, settings_spec=settingsSpec, config_section=config_section) if pub.settings.writer != preWriter: new_reporter('<cmdline>', pub.settings).severe("Internal error: Mismatch of pre-parsed (%r) and real (%r) writer" % ( preWriter, pub.settings.writer, )) pub.set_destination() return pub
def processCommandLine(): """Process command line and return a `Publisher`.""" # Determine writer here so options can be given normally preWriter = writerDefault for arg in sys.argv: match = re.search(writerArgRE1, arg) if match: preWriter = match.group(1) pub = Publisher3Args() pub.set_reader('standalone', None, 'restructuredtext') pub.set_writer(preWriter) settingsSpec = SettingsSpec() settingsSpec.settings_spec = settings_spec settingsSpec.settings_defaults = settings_defaults pub.process_command_line(usage=usage, description=description, settings_spec=settingsSpec, config_section=config_section) if pub.settings.writer != preWriter: new_reporter('<cmdline>', pub.settings).severe( "Internal error: Mismatch of pre-parsed (%r) and real (%r) writer" % ( preWriter, pub.settings.writer, )) pub.set_destination() return pub
def parse(self): """ No parsing to do; refurbish the document tree instead. Overrides the inherited method. """ self.document = self.input # Create fresh Transformer object, to be populated from Writer # component. self.document.transformer = transforms.Transformer(self.document) # Replace existing settings object with new one. self.document.settings = self.settings # Create fresh Reporter object because it is dependent on # (new) settings. self.document.reporter = utils.new_reporter(self.document.get("source", ""), self.document.settings)
def parse(self): """ No parsing to do; refurbish the document tree instead. Overrides the inherited method. """ self.document = self.input # Create fresh Transformer object, to be populated from Writer # component. self.document.transformer = transforms.Transformer(self.document) # Replace existing settings object with new one. self.document.settings = self.settings # Create fresh Reporter object because it is dependent on # (new) settings. self.document.reporter = utils.new_reporter( self.document.get('source', ''), self.document.settings)
def process(self, document, source_id='<process>', overrides={}, pickle_receiver=None): """ If there are extractors for this builder, apply them to the document. TODO: Return messages. `prepare_extractors` should have been run to initialize storages. """ if not self.extractors: logger.info("Process: no extractors to run. ") return u'' logger.debug("Processing %r. ", source_id) document.transformer = transforms.Transformer(document) # before extract, remove existing msg.level < reporter.report_level from tree #document.transformer.add_transform(universal.FilterMessages, priority=1) # Sanity check assert not document.parse_messages, '\n'.join(map(str, document.parse_messages)) if document.parse_messages: # print 'Parser messages:', map(str,document.parse_messages) for msg in document.parse_messages: #if msg.get('level') > 2: # 3=ERROR if msg.get('level') > 3: # 4= assert not msg, msg assert not document.transform_messages, '\n'.join(map(str, document.transform_messages)) # Populate with transforms. print self, self.extractors for tclass, storage in self.extractors: document.transformer.add_transform( tclass, unid=source_id, storage=storage, pickle_receiver=pickle_receiver) # Create an appropriate reporter. if overrides: #prsr = frontend.OptionParser(specs=(self, self.Reader, self.) # XXX: parser allows update of list attrs document.settings.update(overrides)#, prsr) document.reporter = utils.new_reporter('', document.settings) # Run extractor transforms on the document tree. document.transformer.apply_transforms() # clean doc if document.transform_messages: print 'document transformed', document.transform_messages document.transform = document.reporter = document.form_processor = None # FIXME: what about when FP needs run during process i.o. build? # what about values from FP then. if document.transform_messages: print 'Transformation messages:', map(str,document.transform_messages)
def createDiff(pub, oldTree, newTree): """Create and return a diff document from `oldTree` to `newTree`.""" realDebug = pub.settings.debug pub.settings.debug = pub.settings.dump_rstdiff reporter = new_reporter("RSTDIFF", pub.settings) pub.settings.debug = realDebug dispatcher = DocutilsDispatcher(reporter) opcodes = doDiff(dispatcher, oldTree, newTree) if pub.settings.dump_rstdiff: reporter.debug(oldTree.asdom().toprettyxml()) reporter.debug(newTree.asdom().toprettyxml()) reporter.debug(pformat(opcodes, 2, 40, None)) reporter.debug("^^^ Before cleaning vvv After cleaning") cleanOpcodes(opcodes, dispatcher, [oldTree], [newTree]) if pub.settings.dump_rstdiff: reporter.debug(pformat(opcodes, 2, 40, None)) if len(opcodes) != 1: raise TypeError( "Don't know how to merge documents which are not rootEq") opcode = Opcode(opcodes[0]) if opcode.getCommand() not in ( Opcode.Descend, Opcode.Equal, ): # TODO There should be a sense making message for this case # because this may happen due to up propagation of replacements raise TypeError("Don't know how to merge top level opcode of type %r" % (opcode.getCommand(), )) diffDoc = buildDocument(oldTree, newTree, pub.settings) if opcode.getCommand() == Opcode.Equal: # TODO Equality should be reported somehow diffDoc.extend([child.deepcopy() for child in newTree.children]) else: buildTree(dispatcher, diffDoc, opcode.getSubOpcodes(), oldTree, newTree) return diffDoc
def createDiff(pub, oldTree, newTree): """Create and return a diff document from `oldTree` to `newTree`.""" realDebug = pub.settings.debug pub.settings.debug = pub.settings.dump_rstdiff reporter = new_reporter("RSTDIFF", pub.settings) pub.settings.debug = realDebug dispatcher = DocutilsDispatcher(reporter) opcodes = doDiff(dispatcher, oldTree, newTree) if pub.settings.dump_rstdiff: reporter.debug(oldTree.asdom().toprettyxml()) reporter.debug(newTree.asdom().toprettyxml()) reporter.debug(pformat(opcodes, 2, 40, None)) reporter.debug("^^^ Before cleaning vvv After cleaning") cleanOpcodes(opcodes, dispatcher, [ oldTree ], [ newTree ]) if pub.settings.dump_rstdiff: reporter.debug(pformat(opcodes, 2, 40, None)) if len(opcodes) != 1: raise TypeError("Don't know how to merge documents which are not rootEq") opcode = Opcode(opcodes[0]) if opcode.getCommand() not in ( Opcode.Descend, Opcode.Equal, ): # TODO There should be a sense making message for this case # because this may happen due to up propagation of replacements raise TypeError("Don't know how to merge top level opcode of type %r" % ( opcode.getCommand(), )) diffDoc = buildDocument(oldTree, newTree, pub.settings) if opcode.getCommand() == Opcode.Equal: # TODO Equality should be reported somehow diffDoc.extend([ child.deepcopy() for child in newTree.children ]) else: buildTree(dispatcher, diffDoc, opcode.getSubOpcodes(), oldTree, newTree) return diffDoc