def METHOD_NAME(self, parent, blocks):
    """ Process blocks of markdown text and attach to given etree node.
    Given a list of ``blocks``, each blockprocessor is stepped through
    until there are no blocks left. While an extension could potentially
    call this method directly, it's generally expected to be used
    internally.
    This is a public method as an extension may need to add/alter
    additional BlockProcessors which call this method to recursively
    parse a nested block.
    """
    while blocks:
        for processor in self.blockprocessors:
            if processor.test(parent, blocks[0]):
                if processor.run(parent, blocks) is not False:
                    # run returns True or None
                    break