Ejemplo n.º 1
0
    def write_index(self):
        index = self.screenshot_root.child('index.rst')
        if self.ref:
            content = ".. _{0}:\n\n".format(self.ref)
        else:
            content = ""
        content += rstgen.header(1, self.title)
        content += "\n\n\n"
        if self.intro:
            content += unindent(self.intro)
            content += "\n\n\n"

        for name, caption, before, after in self.screenshots:
            content += "\n\n"
            content += rstgen.header(2, caption)
            content += """

{before}

.. image:: {name}
    :alt: {caption}
    :width: 500

{after}

""".format(**locals())

        index.write_file(content.encode('utf-8'))
Ejemplo n.º 2
0
    def write_index(self):
        index = self.screenshot_root.child('index.rst')
        if self.ref:
            content = ".. _{0}:\n\n".format(self.ref)
        else:
            content = ""
        content += rstgen.header(1, self.title)
        content += "\n\n\n"
        if self.intro:
            content += unindent(self.intro)
            content += "\n\n\n"

        for name, caption, before, after in self.screenshots:
            content += "\n\n"
            content += rstgen.header(2, caption)
            content += """

{before}

.. image:: {name}
    :alt: {caption}
    :width: 500

{after}

""".format(**locals())

        index.write_file(content.encode('utf-8'))
Ejemplo n.º 3
0
    def table2story(self, ar, column_names=None, header_level=None,
                    header_links=None, nosummary=False, stripped=True,
                    show_links=False, **kwargs):
        """
        Render the given table request as reStructuredText to stdout.  See
        :meth:`ar.show <lino.core.request.BaseRequest.show>`.
        """

        if ar.actor.master is not None and not nosummary:
            if ar.actor.display_mode == 'summary':
                s = to_rst(
                    ar.actor.get_table_summary(ar.master_instance, ar),
                    stripped=stripped)
                if stripped:
                    s = s.strip()
                yield s
                return

        fields, headers, widths = ar.get_field_info(column_names)

        sums = [fld.zero for fld in fields]
        rows = []
        recno = 0
        for row in ar.sliced_data_iterator:
            recno += 1
            if show_links:
                rows.append([
                    to_rst(x) for x in ar.row2html(
                        recno, fields, row, sums)])
            else:
                rows.append([x for x in ar.row2text(fields, row, sums)])

        if header_level is not None:
            h = rstgen.header(header_level, ar.get_title())
            if stripped:
                h = h.strip()
            yield h
            # s = h + "\n" + s
            # s = tostring(E.h2(ar.get_title())) + s

        if len(rows) == 0:
            s = str(ar.no_data_text)
            if not stripped:
                s = "\n" + s + "\n"
            yield s
            return

        if not ar.actor.hide_sums:
            has_sum = False
            for i in sums:
                if i:
                    #~ print '20120914 zero?', repr(i)
                    has_sum = True
                    break
            if has_sum:
                rows.append([x for x in ar.sums2html(fields, sums)])

        t = RstTable(headers, **kwargs)
        yield t.to_rst(rows)
Ejemplo n.º 4
0
    def table2story(self,
                    ar,
                    column_names=None,
                    header_level=None,
                    nosummary=False,
                    stripped=True,
                    show_links=False,
                    **kwargs):
        """
        Render the given table request as reStructuredText to stdout.  See
        :meth:`ar.show <lino.core.request.BaseRequest.show>`.
        """

        if ar.actor.master is not None and not nosummary:
            if ar.actor.display_mode == 'summary':
                s = to_rst(ar.actor.get_table_summary(ar.master_instance, ar),
                           stripped=stripped)
                if stripped:
                    s = s.strip()
                return s

        fields, headers, widths = ar.get_field_info(column_names)

        sums = [fld.zero for fld in fields]
        rows = []
        recno = 0
        for row in ar.sliced_data_iterator:
            recno += 1
            if show_links:
                rows.append(
                    [to_rst(x) for x in ar.row2html(recno, fields, row, sums)])
            else:
                rows.append([x for x in ar.row2text(fields, row, sums)])
        if len(rows) == 0:
            s = str(ar.no_data_text)
            if not stripped:
                s = "\n" + s + "\n"
            return s

        if not ar.actor.hide_sums:
            has_sum = False
            for i in sums:
                if i:
                    #~ print '20120914 zero?', repr(i)
                    has_sum = True
                    break
            if has_sum:
                rows.append([x for x in ar.sums2html(fields, sums)])

        t = RstTable(headers, **kwargs)
        s = t.to_rst(rows)
        if header_level is not None:
            h = rstgen.header(header_level, ar.get_title())
            if stripped:
                h = h.strip()
            s = h + "\n" + s
            # s = tostring(E.h2(ar.get_title())) + s
        return s
Ejemplo n.º 5
0
    def write_index(self):
        index = self.screenshot_root.child('index.rst')
        if self.ref:
            content = ".. _{0}:\n\n".format(self.ref)
        else:
            content = ""
        content += rstgen.header(1, self.title)
        content += "\n\n\n"
        if self.intro:
            content += unindent(self.intro)
            content += "\n\n\n"

        for name, caption, before, after in self.screenshots:
            content += "\n\n"
            content += rstgen.header(2, caption)
            content += """

{before}

.. image:: {name}
    :alt: {caption}
    :width: 500

{after}

""".format(**locals())

        if self.error_message:
            content += "\n\n"
            if self.ref:
                content += ".. _{0}.oops:\n\n".format(self.ref)
            content += rstgen.header(2, "Not finished")
            content += "\n\n"
            content += "Oops, we had a problem when generating this document::\n"
            isep = '\n    '
            content += isep
            content += isep.join(self.error_message.splitlines())
            content += "\n\n"

        if six.PY2:
            content = content.encode('utf-8')
        index.write_file(content)
Ejemplo n.º 6
0
    def write_index(self):
        index = self.screenshot_root.child('index.rst')
        if self.ref:
            content = ".. _{0}:\n\n".format(self.ref)
        else:
            content = ""
        content += rstgen.header(1, self.title)
        content += "\n\n\n"
        if self.intro:
            content += unindent(self.intro)
            content += "\n\n\n"

        for name, caption, before, after in self.screenshots:
            content += "\n\n"
            content += rstgen.header(2, caption)
            content += """

{before}

.. image:: {name}
    :alt: {caption}
    :width: 500

{after}

""".format(**locals())

        if self.error_message:
            content += "\n\n"
            if self.ref:
                content += ".. _{0}.oops:\n\n".format(self.ref)
            content += rstgen.header(2, "Not finished")
            content += "\n\n"
            content += "Oops, we had a problem when generating this document::\n"
            isep = '\n    '
            content += isep
            content += isep.join(self.error_message.splitlines())
            content += "\n\n"

        if six.PY2:
            content = content.encode('utf-8')
        index.write_file(content)
Ejemplo n.º 7
0
def edit_blog_entry(ctx, today=None):
    """Edit today's blog entry, create an empty file if it doesn't yet exist.

    :today: Useful when a working day lasted longer than midnight, or
            when you start some work in the evening, knowing that you
            won't commit it before the next morning.  Note that you
            must specify the date using the YYYYMMDD format.

            Usage example::

                $ fab blog:20150727

    """
    if not ctx.editor_command:
        raise MissingConfig("editor_command")
    today = get_current_date(today)
    entry = get_blog_entry(ctx, today)
    if not entry.path.exists():
        if ctx.languages is None:
            # txt = today.strftime(ctx.long_date_format)
            lng = 'en'
        else:
            lng = ctx.languages[0]
        txt = format_date(today, format='full', locale=lng)
        txt = txt[0].upper() + txt[1:]  # estonian weekdays
        content = rstgen.header(1, txt)
        content = ":date: {0}\n\n".format(today) + content
        msg = "{0}\nCreate file {1}?".format(content, entry.path)
        if not confirm(msg):
            return
        # for every year we create a new directory.
        yd = entry.path.parent
        if not yd.exists():
            if not confirm("Happy New Year! Create directory %s?" % yd):
                return
            yd.mkdir()
            txt = ".. blogger_year::\n"
            yd.child('index.rst').write_file(txt.encode('utf-8'))

        if six.PY2:
            content = content.encode('utf-8')
        entry.path.write_file(content)
        # touch it for Sphinx:
        entry.path.parent.child('index.rst').set_times()
    args = [ctx.editor_command.format(entry.path)]
    args += [entry.path]
    # raise Exception("20160324 %s", args)
    ctx.run(' '.join(args), pty=True)
Ejemplo n.º 8
0
def edit_blog_entry(today=None):
    """Edit today's blog entry, create an empty file if it doesn't yet exist.

    :today: Useful when a working day lasted longer than midnight, or
            when you start some work in the evening, knowing that you
            won't commit it before the next morning.  Note that you
            must specify the date using the YYYYMMDD format.
        
            Usage example::
        
                $ fab blog:20150727

    """
    if not env.editor_command:
        raise MissingConfig("editor_command")
    today = get_current_date(today)
    entry = get_blog_entry(today)
    if not entry.path.exists():
        if not confirm("Create file %s?" % entry.path):
            return
        # for every year we create a new directory.
        yd = entry.path.parent
        if not yd.exists():
            if not confirm("Happy New Year! Create directory %s?" % yd):
                return
            yd.mkdir()
            txt = ".. blogger_year::\n"
            yd.child('index.rst').write_file(txt.encode('utf-8'))
            
        if env.languages is None:
            txt = today.strftime(env.long_date_format)
        else:
            txt = format_date(
                today, format='full', locale=env.languages[0])
        entry.path.write_file(rstgen.header(1, txt).encode('utf-8'))
        # touch it for Sphinx:
        entry.path.parent.child('index.rst').set_times()
    args = [env.editor_command]
    args += [entry.path]
    local(' '.join(args))
Ejemplo n.º 9
0
def edit_blog_entry(today=None):
    """
    Edit today's blog entry, create an empty file if it doesn't yet exist.
    """
    if today is None:
        today = get_current_date()
    else:
        today = i2d(today)
    entry = get_blog_entry(today)
    if not entry.path.exists():
        if not confirm("Create file %s?" % entry.path):
            return
        if env.languages is None:
            txt = today.strftime(env.long_date_format)
        else:
            txt = format_date(
                today, format='full', locale=env.languages[0])
        entry.path.write_file(rstgen.header(1, txt).encode('utf-8'))
        # touch it for Sphinx:
        entry.path.parent.child('index.rst').set_times()
    args = [os.environ['EDITOR']]
    args += [entry.path]
    local(' '.join(args))
Ejemplo n.º 10
0
def write_readme(ctx):
    """Generate or update `README.txt` or `README.rst` file from `SETUP_INFO`. """
    if not atelier.current_project.main_package:
        return
    atelier.current_project.load_info()
    info = atelier.current_project.SETUP_INFO
    if not info.get('long_description'):
        return
    # if len(ctx.doc_trees) == 0:
    #     # when there are no docs, then the README file is manually maintained
    #     return
    if ctx.revision_control_system == 'git':
        readme = ctx.root_dir.child('README.rst')
    else:
        readme = ctx.root_dir.child('README.txt')

    # for k in ('name', 'description', 'long_description', 'url'):
    #     if k not in env.current_project.SETUP_INFO:
    #         msg = "SETUP_INFO for {0} has no key '{1}'"
    #         raise Exception(msg.format(env.current_project, k))

    title = rstgen.header(1, "The ``{}`` package".format(info['name']))

    txt = """\
{title}

{long_description}
""".format(title=title, **info)
    if six.PY2:
        txt = txt.encode('utf-8')
    if readme.exists() and readme.read_file() == txt:
        return
    must_confirm("Overwrite %s" % readme.absolute())
    readme.write_file(txt)
    docs_index = ctx.root_dir.child('docs', 'index.rst')
    if docs_index.exists():
        docs_index.set_times()
Ejemplo n.º 11
0
    def get_rst(self):
        #~ from actordoc import get_actor_description
        #~ from django.conf import settings
        #~ from djangosite.dbutils import set_language
        with translation.override(self.language):
            level, cls = resolve_name(self.content[0])
            if isinstance(cls, models.Field):
                fld = cls
                s = ''
                name = str(fld.model) + '.' + fld.name
                title = force_text(fld.verbose_name).strip()
                
                s += "\n.. index::\n   single: "
                s += str(_('%(field)s (field in %(model)s)') % dict(
                    field=title, model=model_ref(fld.model)))
                s += '\n\n'
                s += rstgen.header(level, _("%s (field)") % title)
                if len(self.content) > 1:
                    s += '\n'.join(self.content[1:])
                    s += '\n\n'
                return s

            if isinstance(cls, Plugin):
                s = ''
                title = str(cls.verbose_name)
                s += "\n.. index::\n   single: "
                s += str(_('%s (app)') % title)
                s += '\n\n.. _' + name + ':\n'
                s += '\n'
                s += rstgen.header(level, _("%s (app)") % title)
                return s

            if not isinstance(cls, type):
                raise Exception("%s is not an actor." % self.content[0])

            if issubclass(cls, models.Model):
                model = cls

                s = ''
                name = model_name(model).lower()
                title = force_text(model._meta.verbose_name)
                s += "\n.. index::\n   single: "
                s += str(_('%(model)s (model in %(app)s)') % dict(
                    model=title, app=model._meta.app_label))

                s += '\n\n'

                s += '\n\n.. _' + name + ':\n'

                s += '\n'
                s += rstgen.header(level, _("%s (model)") % title)

                s += '\n'
                s += '\n:Internal name: ``%s``\n' % full_model_name(cls)
                s += '\n:Implemented by: %s\n' % typeref(cls)
                s += '\n'

                if len(self.content) > 1:
                    s += '\n'.join(self.content[1:])
                    s += '\n\n'

                model_reports = [
                    r for r in kernel.master_tables if r.model is cls]
                model_reports += [r for r in kernel.slave_tables
                                  if r.model is cls]
                s += rstgen.boldheader(_("Views on %s") %
                                       cls._meta.verbose_name)
                s += actors_overview_ul(model_reports)

                s += rstgen.boldheader(_("Fields in %s") %
                                       cls._meta.verbose_name)
                s += fields_ul(cls._meta.fields)

                action_list = cls.get_default_table().get_actions()
                action_list = [
                    ba for ba in action_list
                    if not isinstance(ba.action, IGNORED_ACTIONS)]
                if action_list:
                    s += '\n'
                    s += rstgen.boldheader(_("Actions on %s") %
                                           cls._meta.verbose_name)
                    s += actions_ul(action_list)

                slave_tables = getattr(cls, '_lino_slaves', {}).values()
                if slave_tables:
                    s += rstgen.boldheader(_("Tables referring to %s") %
                                           cls._meta.verbose_name)
                    s += actors_overview_ul(slave_tables)

                return s

            if issubclass(cls, actors.Actor):

                title = force_text(cls.label or cls.title)
                indextext = _('%(actor)s (view in %(app)s)') % dict(
                    actor=title, app=cls.app_label)
                name = actor_name(cls)
                #~ if name == 'welfare.reception.waitingvisitors':
                    #~ self.debug = True
                #~ print(20130907, name)
                self.index_entries.append(('single', indextext, name, ''))
                #~ self.add_ref_target(name,name)

                s = ''
                s += '\n\n.. _%s:\n\n' % name
                s += rstgen.header(level, _("%s (view)") % title)
                s += '\n:Internal name: ``%s`` (%s)\n' % (cls, typeref(cls))

                if len(self.content) > 1:
                    s += '\n'.join(self.content[1:])
                    s += '\n\n'

                s += '\n\n'
                s += get_actor_description(cls)
                s += '\n\n'
                return s
            raise Exception("Cannot handle actor %r." % cls)
Ejemplo n.º 12
0
def html2rst(e, stripped=False):
    """
    Convert an element tree to reStructuredText.
    """
    #~ print("20120613 html2odftext()", e.tag, e.text)
    rst = ''
    if e.tag in ('p', 'li'):
        if not stripped:
            rst += '\n\n'

    elif e.tag in ('ul', 'ol'):
        rst += '\n'
    elif e.tag == 'br':
        if stripped:
            rst += '\n'
        else:
            rst += ' |br| \n'
    elif e.tag == 'b':
        rst += '**'
    elif e.tag == 'em' or e.tag == 'i':
        rst += '*'
    elif e.tag == 'a':
        rst += '`'

    if e.text:
        rst += e.text
    for child in e:
        rst += html2rst(child, stripped)

    if e.tag in NEWLINE_TAGS:
        if stripped:
            rst += '\n'
        else:
            rst += '\n\n'
    elif e.tag in ('h1', 'h2', 'h3', 'h4', 'h5', 'h6'):
        rst = rstgen.header(int(e.tag[1]), rst.strip()).strip()
        if stripped:
            rst += '\n'
        else:
            rst = '\n\n' + rst + '\n\n'
    elif e.tag == 'b':
        if rst == '**':
            rst = ''
        else:
            rst += '**'
    elif e.tag == 'em' or e.tag == 'i':
        if rst == '*':
            rst = ''
        else:
            rst += '*'
    elif e.tag == 'a':
        rst += ' <%s>`__' % e.get('href')
    elif e.tag == 'img':
        text = e.get('alt') or e.get('src')
        rst += '[img %s]' % text
    elif e.tag in ('td', 'th'):
        rst += ' '
    else:
        if e.tag not in IGNORED_TAGS:
            raise Exception("20150723 %s" % e.tag)

    if e.tail:
        rst += e.tail

    return rst
Ejemplo n.º 13
0
    def get_rst(self):
        #~ from actordoc import get_actor_description
        #~ from django.conf import settings
        #~ from djangosite.dbutils import set_language
        with translation.override(self.language):
            level, cls = resolve_name(self.content[0])
            if isinstance(cls, models.Field):
                fld = cls
                s = ''
                name = str(fld.model) + '.' + fld.name
                title = force_unicode(fld.verbose_name).strip()

                s += "\n.. index::\n   single: "
                s += unicode(
                    _('%(field)s (field in %(model)s)') %
                    dict(field=title, model=model_ref(fld.model)))
                s += '\n\n'
                s += rstgen.header(level, _("%s (field)") % title)
                if len(self.content) > 1:
                    s += '\n'.join(self.content[1:])
                    s += '\n\n'
                return s

            if isinstance(cls, Plugin):
                s = ''
                title = unicode(cls.verbose_name)
                s += "\n.. index::\n   single: "
                s += unicode(_('%s (app)') % title)
                s += '\n\n.. _' + name + ':\n'
                s += '\n'
                s += rstgen.header(level, _("%s (app)") % title)
                return s

            if not isinstance(cls, type):
                raise Exception("%s is not an actor." % self.content[0])

            if issubclass(cls, models.Model):
                model = cls

                s = ''
                name = model_name(model).lower()
                title = force_unicode(model._meta.verbose_name)
                s += "\n.. index::\n   single: "
                s += unicode(
                    _('%(model)s (model in %(app)s)') %
                    dict(model=title, app=model._meta.app_label))

                s += '\n\n'

                s += '\n\n.. _' + name + ':\n'

                s += '\n'
                s += rstgen.header(level, _("%s (model)") % title)

                s += '\n'
                s += '\n:Internal name: ``%s``\n' % full_model_name(cls)
                s += '\n:Implemented by: %s\n' % typeref(cls)
                s += '\n'

                if len(self.content) > 1:
                    s += '\n'.join(self.content[1:])
                    s += '\n\n'

                model_reports = [
                    r for r in dbtables.master_reports if r.model is cls
                ]
                model_reports += [
                    r for r in dbtables.slave_reports if r.model is cls
                ]
                s += rstgen.boldheader(
                    _("Views on %s") % cls._meta.verbose_name)
                s += actors_overview_ul(model_reports)

                s += rstgen.boldheader(
                    _("Fields in %s") % cls._meta.verbose_name)
                s += fields_ul(cls._meta.fields)

                action_list = cls.get_default_table().get_actions()
                action_list = [
                    ba for ba in action_list
                    if not isinstance(ba.action, IGNORED_ACTIONS)
                ]
                if action_list:
                    s += '\n'
                    s += rstgen.boldheader(
                        _("Actions on %s") % cls._meta.verbose_name)
                    s += actions_ul(action_list)

                slave_tables = getattr(cls, '_lino_slaves', {}).values()
                if slave_tables:
                    s += rstgen.boldheader(
                        _("Tables referring to %s") % cls._meta.verbose_name)
                    s += actors_overview_ul(slave_tables)

                return s

            if issubclass(cls, actors.Actor):

                title = force_unicode(cls.label or cls.title)
                indextext = _('%(actor)s (view in %(app)s)') % dict(
                    actor=title, app=cls.app_label)
                name = actor_name(cls)
                #~ if name == 'welfare.reception.waitingvisitors':
                #~ self.debug = True
                #~ print(20130907, name)
                self.index_entries.append(('single', indextext, name, ''))
                #~ self.add_ref_target(name,name)

                s = ''
                s += '\n\n.. _%s:\n\n' % name
                s += rstgen.header(level, _("%s (view)") % title)
                s += '\n:Internal name: ``%s`` (%s)\n' % (cls, typeref(cls))

                if len(self.content) > 1:
                    s += '\n'.join(self.content[1:])
                    s += '\n\n'

                s += '\n\n'
                s += get_actor_description(cls)
                s += '\n\n'
                return s
            raise Exception("Cannot handle actor %r." % cls)
Ejemplo n.º 14
0
def html2rst(e, stripped=False):
    """The html2rst function."""
    # ~ print "20120613 html2odftext()", e.tag, e.text
    rst = ""
    if e.tag in ("p", "li"):
        if not stripped:
            rst += "\n\n"

    elif e.tag in ("ul", "ol"):
        rst += "\n"
    elif e.tag == "br":
        if stripped:
            rst += "\n"
        else:
            rst += " |br| \n"
    elif e.tag == "b":
        rst += "**"
    elif e.tag == "em" or e.tag == "i":
        rst += "*"
    elif e.tag == "a":
        rst += "`"

    if e.text:
        rst += e.text
    for child in e:
        rst += html2rst(child, stripped)

    if e.tag in NEWLINE_TAGS:
        if stripped:
            rst += "\n"
        else:
            rst += "\n\n"
    elif e.tag in ("h1", "h2", "h3", "h4", "h5", "h6"):
        rst = rstgen.header(int(e.tag[1]), rst.strip()).strip()
        if stripped:
            rst += "\n"
        else:
            rst = "\n\n" + rst + "\n\n"
    elif e.tag == "b":
        if rst == "**":
            rst = ""
        else:
            rst += "**"
    elif e.tag == "em" or e.tag == "i":
        if rst == "*":
            rst = ""
        else:
            rst += "*"
    elif e.tag == "a":
        rst += " <%s>`__" % e.get("href")
    elif e.tag == "img":
        text = e.get("alt") or e.get("src")
        rst += "[img %s]" % text
    elif e.tag in ("td", "th"):
        rst += " "
    else:
        if e.tag not in IGNORED_TAGS:
            raise Exception("20150723 %s" % e.tag)

    if e.tail:
        rst += e.tail

    return rst
Ejemplo n.º 15
0
 def get_rst(self):
     #~ from actordoc import get_actor_description
     #~ from django.conf import settings
     #~ from djangosite.dbutils import set_language
     with translation.override(self.state.document.settings.env.config.language):
     #~ lng = self.state.document.settings.env.config.language
     #~ set_language(lng)
         level, cls = resolve_name(self.content[0])
         if isinstance(cls,models.Field):
             fld = cls
             s = ''
             name = str(fld.model)+'.'+fld.name
             title = force_unicode(fld.verbose_name).strip()
             s += "\n.. index::\n   single: " 
             s += unicode(_('%s (field in "%s")') % (title,fld.model))
             s += '\n\n'
             s += rstgen.header(level,_("The **%s** field") % title)
             if len(self.content) > 1:
                 s += '\n'.join(self.content[1:])
                 s += '\n\n'
             return s
             
         if isinstance(cls,dd.__class__): # it's a module (an app)
             s = ''
             name = app_name(cls)
             app = getattr(cls,'App',None)
             if app is None:
                 title = name
             else:
                 title = unicode(app.verbose_name)
             
             s += "\n.. index::\n   single: " 
             s += unicode(_('%s (app)') % title)
             s += '\n\n.. _'+ name + ':\n'
             s += '\n'
             s += rstgen.header(level,_("The %s app") % title)
             return s
             
         if not isinstance(cls,type):
             raise Exception("%s is not an actor." % self.content[0])
             
         if issubclass(cls,models.Model):
             model = cls
             #~ if full_model_name(cls) == 'newcomers.Broker':
                 #~ self.debug = True
             #~ self.add_model_index_entry(cls)
             
             s = ''
             name = model_name(model).lower()
             title = force_unicode(model._meta.verbose_name)
             s += "\n.. index::\n   single: " 
             s += unicode(_('%s (model in app "%s")') % (title,model._meta.app_label))
             s += '\n\n'
             
             #~ title = unicode(cls._meta.verbose_name)
             #~ indextext = _('%s (%s)') % (full_model_name(cls),title)
             #~ name = model_name(cls)
             #~ self.index_entries.append(('single', indextext, name, ''))
             #~ self.add_ref_target(name,name)
             s += '\n\n.. _'+ name + ':\n'
             
             s += '\n'
             s += rstgen.header(level,_("The %s model") % title)
             #~ print(s)
             #~ s += rstgen.header(3,_('%s (%s)') % (title,full_model_name(cls)))
             s += '\n'
             s += '\n:Internal name: ``%s``\n' % full_model_name(cls)
             s += '\n:Implemented by: %s\n' % typeref(cls)
             s += '\n'
             
             if len(self.content) > 1:
                 s += '\n'.join(self.content[1:])
                 s += '\n\n'
                 
             model_reports = [r for r in dbtables.master_reports if r.model is cls]
             model_reports += [r for r in dbtables.slave_reports if r.model is cls]
             #~ s += rstgen.boldheader(_("Tables on a %s") % cls._meta.verbose_name)
             s += rstgen.boldheader(_("Views on %s") % cls._meta.verbose_name)
             s += actors_overview_ul(model_reports)
                 
             s += rstgen.boldheader(_("Fields in %s") % cls._meta.verbose_name)
             s += fields_ul(cls._meta.fields)
             
             action_list = cls._lino_default_table.get_actions()
             #~ action_list = [ba for ba in action_list if ba.action.sort_index >= 30]
             action_list = [ba for ba in action_list if not isinstance(ba.action,IGNORED_ACTIONS)]
             if action_list:
                 s += '\n'
                 s += rstgen.boldheader(_("Actions on %s") % cls._meta.verbose_name)
                 s += actions_ul(action_list)
                 
             slave_tables = getattr(cls,'_lino_slaves',{}).values()
             if slave_tables:
                 s += rstgen.boldheader(_("Tables referring to %s") % cls._meta.verbose_name)
                 #~ for tb in slave_tables:
                     #~ s += '\n.. _'+ settings.SITE.userdocs_prefix + str(tb) + ':\n'
                 #~ s += '\n'
                 #~ s += rstgen.header(4,_("Slave tables of %s") % cls._meta.verbose_name)
                 
                 #~ s += "\n\n**%s**\n\n" % _("Tables referring to %s") % cls._meta.verbose_name
                 s += actors_overview_ul(slave_tables)
                 
             
             #~ if model_reports:
                 #~ s += '\nMaster tables: %s\n' % rptlist(model_reports)
             #~ if slave_tables:
                 #~ s += '\nSlave tables: %s\n' % rptlist(slave_tables)
 
             return s
             
         if issubclass(cls,actors.Actor):
           
             title = force_unicode(cls.label or cls.title)
             indextext = _('%s (table in module %s)') % (title,cls.app_label)
             name = actor_name(cls)
             #~ if name == 'welfare.reception.waitingvisitors':
                 #~ self.debug = True
             #~ print(20130907, name)
             self.index_entries.append(('single', indextext, name, ''))
             #~ self.add_ref_target(name,name)
             
             s = ''
             s += '\n\n.. _%s:\n\n' % name
             s += rstgen.header(level,_("The %s view") % title)
             s += '\n:Internal name: ``%s`` (%s)\n' % (cls,typeref(cls))
             
             if len(self.content) > 1:
                 s += '\n'.join(self.content[1:])
                 s += '\n\n'
             
             s += '\n\n'
             s += get_actor_description(cls)
             s += '\n\n'
             return s
         raise Exception("Cannot handle actor %r." % cls)
Ejemplo n.º 16
0
def html2rst(e, stripped=False):
    """The html2rst function."""
    #~ print "20120613 html2odftext()", e.tag, e.text
    rst = ''
    if e.tag in ('p', 'li'):
        if not stripped:
            rst += '\n\n'

    elif e.tag in ('ul', 'ol'):
        rst += '\n'
    elif e.tag == 'br':
        if stripped:
            rst += '\n'
        else:
            rst += ' |br| \n'
    elif e.tag == 'b':
        rst += '**'
    elif e.tag == 'em' or e.tag == 'i':
        rst += '*'
    elif e.tag == 'a':
        rst += '`'

    if e.text:
        rst += e.text
    for child in e:
        rst += html2rst(child, stripped)

    if e.tag in NEWLINE_TAGS:
        if stripped:
            rst += '\n'
        else:
            rst += '\n\n'
    elif e.tag in ('h1', 'h2', 'h3', 'h4', 'h5', 'h6'):
        rst = rstgen.header(int(e.tag[1]), rst.strip()).strip()
        if stripped:
            rst += '\n'
        else:
            rst = '\n\n' + rst + '\n\n'
    elif e.tag == 'b':
        if rst == '**':
            rst = ''
        else:
            rst += '**'
    elif e.tag == 'em':
        if rst == '*':
            rst = ''
        else:
            rst += '*'
    elif e.tag == 'a':
        rst += ' <%s>`__' % e.get('href')
    elif e.tag == 'img':
        text = e.get('alt') or e.get('src')
        rst += '[img %s]' % text
    elif e.tag in ('td', 'th'):
        rst += ' '
    else:
        if e.tag not in IGNORED_TAGS:
            raise Exception("20150723 %s" % e.tag)

    if e.tail:
        rst += e.tail

    return rst