Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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