'If *prop* is *None*, return a list of strings of all settable properies
and their valid values.  Format the output for ReST
If *prop* is not *None*, it is a valid property name and that
property will be returned as a string of property : valid
values.'

def pprint_setters_rest(self, prop=None, leadingspace=2):

    if leadingspace:
        pad = (u'    ' * leadingspace)
    else:
        pad = u''
    if (prop is not None):
        accepts = self.get_valid_values(prop)
        return (u'%s%s:    %s' % (pad, prop, accepts))
    attrs = self._get_setters_and_targets()
    attrs.sort()
    lines = []
    names = [self.aliased_name_rest(prop, target) for (prop, target) in attrs]
    accepts = [self.get_valid_values(prop) for (prop, target) in attrs]
    col0_len = max((len(n) for n in names))
    col1_len = max((len(a) for a in accepts))
    table_formatstr = (((pad + (u'=' * col0_len)) + u'            ') + (u'=' * col1_len))
    lines.append(u'')
    lines.append(table_formatstr)
    lines.append(((pad + u'Property'.ljust((col0_len + 3))) + u'Description'.ljust(col1_len)))
    lines.append(table_formatstr)
    lines.extend([((pad + n.ljust((col0_len + 3))) + a.ljust(col1_len)) for (n, a) in zip(names, accepts)])
    lines.append(table_formatstr)
    lines.append(u'')
    return lines
