Example #1
0
def _get_symbol_node(
        parser_config, src_url_fmt, path, symbol, h_level=2, full_path=True):
    src_link_nodes = []

    if src_url_fmt:
        output_url = src_url_fmt.format(
            relative_path=symbol.relative_path,
            line_number=symbol.line_number)
        link =  CWTagNode(
            'a', {'href': output_url, 'class': 'autodoc-source-link'},
            [CWTextNode('src')])
        src_link_nodes = [link]

    name_nodes = []

    if symbol.type in {'class', 'function'}:
        name_nodes.append(
            CWTagNode('span', {'class': 'autodoc-keyword'}, [
                CWTextNode(symbol.type + ' ')
            ]))

    name_nodes.append(
        CWTagNode('span', {'class': 'autodoc-identifier'}, [
            CWTextNode(path if full_path else symbol.name)
        ]))

    if symbol.string_inside_parens is not None:
        name_nodes.append(
            CWTagNode('span', {'class': 'autodoc-arguments'}, [
                CWTextNode('(' + symbol.string_inside_parens + ')')
            ]))

    if symbol.return_value:
        name_nodes.append(
            CWTagNode('span', {'class': 'autodoc-return-value'}, [
                CWTextNode(' → ', escape=False),
                CWTextNode(symbol.return_value)
            ]))

    heading_node = CWTagNode(
        'h{}'.format(h_level), {},
        [CWTagNode('code', {}, name_nodes)] + src_link_nodes
    )
    heading_node.data['ref_id_override'] = path

    children = [heading_node]

    if symbol.docstring:
        css_class = 'autodoc-{}-docstring-body'.format(symbol.type)
        docstring_children = cfm_to_cwdom(symbol.docstring, parser_config)
        children.append(CWTagNode(
            'div', {'class': css_class}, children=docstring_children))
    node = CWTagNode(
        'section', kwargs={'class': 'autodoc-{}'.format(symbol.type)},
        children=children)
    return node
Example #2
0
def _get_nav_html_part(
        config, options, library, tree, document_node, is_prev=False):
    entry_key = 'nav_previous_entry' if is_prev else 'nav_next_entry'
    if entry_key not in document_node.data:
        return ''

    entry = document_node.data[entry_key]
    ref_id = entry.ref_id
    if is_prev:
        css_class = 'previous-page'
        text = CWTextNode('← ', escape=False)
    else:
        css_class = 'next-page'
        text = CWTextNode(' →', escape=False)

    node = CWTagNode('nav', {'class': css_class}, [
        CWDocumentLinkNode(entry.heading_node.document_id, [
            text
        ]).deepcopy_children_from(entry.heading_node, at_end=is_prev)
    ])
    node.deep_set_document_id(document_node.document_id)
    return _get_subtree_html(config, options, library, tree, node)
Example #3
0
        def lang_pygments_convert(tree, node):
            if node.data.get('pygments_done', False):
                return

            split = (
                (node.kwargs.get('language', '') or '').split(maxsplit=1))
            language = split[0] if split else None

            try:
                lexer = get_lexer_by_name(language) if language else None
            except ClassNotFound:
                # do nothing; user specified a language but we can't parse it.
                # (we do parse no-language blocks.)
                return

            args = split[1] if len(split) > 1 else ''
            kwargs = _dumb_parse_args(args)

            figure_children = []

            if kwargs.get('filename', None):
                figure_children.append(
                    CWTagNode('figcaption', {'class': 'filename'}, [
                        CWTextNode(kwargs['filename'])
                    ]))

            if lexer:
                figure_children.append(CWTextNode(
                    pygments.highlight(
                        node.children[0].text, lexer, HtmlFormatter()),
                    escape=False))
            else:
                new_pre = CWTagNode('pre', {'class': 'raw'}, node.children)
                new_pre.data['pygments_done'] = True
                figure_children.append(new_pre)

            tree.replace_subtree(
                node,
                CWTagNode('figure', {'class': 'code'}, figure_children))