'Initial setup.  If any of `reader`, `parser`, or `writer` are not
specified, the corresponding ``set_...`` method should be called with
a component name (`set_reader` sets the parser as well).'

def __init__(self, reader=None, parser=None, writer=None, source=None, source_class=io.FileInput, destination=None, destination_class=io.FileOutput, settings=None):

    self.document = None
    'The    document    tree    (`docutils.nodes`    objects).'
    self.reader = reader
    'A    `docutils.readers.Reader`    instance.'
    self.parser = parser
    'A    `docutils.parsers.Parser`    instance.'
    self.writer = writer
    'A    `docutils.writers.Writer`    instance.'
    for component in ('reader', 'parser', 'writer'):
        assert (not isinstance(getattr(self, component), StringType)), ('passed    string    "%s"    as    "%s"    parameter;    pass    an    instance,    or    use    the    "%s_name"    parameter    instead    (in    docutils.core.publish_*    convenience    functions).' % (getattr(self, component), component, component))
    self.source = source
    'The    source    of    input    data,    a    `docutils.io.Input`    instance.'
    self.source_class = source_class
    'The    class    for    dynamically    created    source    objects.'
    self.destination = destination
    'The    destination    for    docutils    output,    a    `docutils.io.Output`\n                                instance.'
    self.destination_class = destination_class
    'The    class    for    dynamically    created    destination    objects.'
    self.settings = settings
    'An    object    containing    Docutils    settings    as    instance    attributes.\n                                Set    by    `self.process_command_line()`    or    `self.get_settings()`.'
