示例#1
0
    def test_render_titles_hierarchy_text(self):
        """ Test the ``render_titles_hierarchy_text`` utility. """
        document_tree = RootTreeNode()
        a = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title a'})
        a.new_child(None, TextTreeNode, content='Title a')
        b = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title b'})
        b.new_child(None, TextTreeNode, content='Title b')
        c = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title c'})
        c.new_child(None, TextTreeNode, content='Title c')
        d = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title d'})
        d.new_child(None, TextTreeNode, content='Title d')
        e = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title e'})
        e.new_child(None, TextTreeNode, content='Title e')
        f = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title f'})
        f.new_child(None, TextTreeNode, content='Title f')
        g = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title g'})
        g.new_child(None, TextTreeNode, content='Title g')
        h = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title h'})
        h.new_child(None, TextTreeNode, content='Title h')
        i = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title i'})
        i.new_child(None, TextTreeNode, content='Title i')
        j = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title j'})
        j.new_child(None, TextTreeNode, content='Title j')
        k = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title k'})
        k.new_child(None, TextTreeNode, content='Title k')
        l = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title l'})
        l.new_child(None, TextTreeNode, content='Title l')
        m = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title m'})
        m.new_child(None, TextTreeNode, content='Title m')
        n = document_tree.new_child('title', generate_title_cls(2))
        n.new_child(None, TextTreeNode, content='Title n')
        titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n]
        titles_hierarchy = make_titles_hierarchy(titles)
        output = render_titles_hierarchy_text(titles_hierarchy)
        expected_output = """# Title a
## Title b
# Title c
## Title d
### Title e
## Title f
### Title g
# Title h
## Title i
# Title j
# Title k
## Title l
### Title m
## Title n"""
        self.assertEqual(expected_output, output)
示例#2
0
 def test_make_titles_hierarchy(self):
     """ Test the ``make_titles_hierarchy`` utility. """
     document_tree = RootTreeNode()
     a = document_tree.new_child('title', generate_title_cls(3))
     b = document_tree.new_child('title', generate_title_cls(4))
     c = document_tree.new_child('title', generate_title_cls(1))
     d = document_tree.new_child('title', generate_title_cls(2))
     e = document_tree.new_child('title', generate_title_cls(3))
     f = document_tree.new_child('title', generate_title_cls(2))
     g = document_tree.new_child('title', generate_title_cls(3))
     h = document_tree.new_child('title', generate_title_cls(1))
     i = document_tree.new_child('title', generate_title_cls(2))
     j = document_tree.new_child('title', generate_title_cls(1))
     k = document_tree.new_child('title', generate_title_cls(1))
     l = document_tree.new_child('title', generate_title_cls(3))
     m = document_tree.new_child('title', generate_title_cls(4))
     n = document_tree.new_child('title', generate_title_cls(2))
     titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n]
     titles_hierarchy = make_titles_hierarchy(titles)
     self.assertEqual([
         (a, [
             (b, [])
         ]),
         (c, [
             (d, [
                 (e, [])
             ]),
             (f, [
                 (g, [])
             ])
         ]),
         (h, [
             (i, [])
         ]),
         (j, []),
         (k, [
             (l, [
                 (m, [])
             ]), (n, [])
         ])
     ], titles_hierarchy)
示例#3
0
 def test_make_titles_hierarchy(self):
     """ Test the ``make_titles_hierarchy`` utility. """
     document_tree = RootTreeNode()
     a = document_tree.new_child('title', generate_title_cls(3))
     b = document_tree.new_child('title', generate_title_cls(4))
     c = document_tree.new_child('title', generate_title_cls(1))
     d = document_tree.new_child('title', generate_title_cls(2))
     e = document_tree.new_child('title', generate_title_cls(3))
     f = document_tree.new_child('title', generate_title_cls(2))
     g = document_tree.new_child('title', generate_title_cls(3))
     h = document_tree.new_child('title', generate_title_cls(1))
     i = document_tree.new_child('title', generate_title_cls(2))
     j = document_tree.new_child('title', generate_title_cls(1))
     k = document_tree.new_child('title', generate_title_cls(1))
     l = document_tree.new_child('title', generate_title_cls(3))
     m = document_tree.new_child('title', generate_title_cls(4))
     n = document_tree.new_child('title', generate_title_cls(2))
     titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n]
     titles_hierarchy = make_titles_hierarchy(titles)
     self.assertEqual([(a, [(b, [])]), (c, [(d, [(e, [])]),
                                            (f, [(g, [])])]),
                       (h, [(i, [])]), (j, []),
                       (k, [(l, [(m, [])]), (n, [])])], titles_hierarchy)
示例#4
0
def home_page(request,
              template_name='home/home.html',
              test_input_form=TestSkCodeInputForm,
              extra_context=None):
    """
    PySkCode tester home page with form for testing the parser.
    :param request: The current request.
    :param template_name: The template name to be used.
    :param test_input_form: The test input form class to be used.
    :param extra_context: Any extra template context information.
    :return: TemplateResponse
    """

    # Default values
    output_content_html = ''
    output_content_text = ''
    summary_content_html = ''
    summary_content_text = ''
    footnotes_content_html = ''
    footnotes_content_text = ''
    document_has_errors = False

    # Handle the form
    if request.method == "POST":
        form = test_input_form(request.POST, request.FILES)
        if form.is_valid():

            # Parse the input text
            newline_node_cls = HardNewlineTreeNode if form.cleaned_data['hard_newline'] else NewlineTreeNode
            html_error_template = DEFAULT_ERROR_HTML_TEMPLATE if form.cleaned_data['preview_mode'] else SUPPRESS_ERROR_HTML_TEMPLATE
            document = parse_skcode(form.cleaned_data['content'],
                                    allow_tagvalue_attr=form.cleaned_data['allow_tagvalue_attr'],
                                    allow_self_closing_tags=form.cleaned_data['allow_self_closing_tags'],
                                    mark_unclosed_tags_as_erroneous=form.cleaned_data['mark_unclosed_tags'],
                                    newline_node_cls=newline_node_cls)
            document_has_errors = document.has_errors()

            # Handle smileys and cosmetics
            if form.cleaned_data['replace_cosmetics']:
                setup_cosmetics_replacement(document)
            if form.cleaned_data['replace_smileys']:

                def _base_url(filename):
                    return static('images/smileys/' + filename)
                setup_smileys_replacement(document, _base_url)

            # Handle relative urls
            if form.cleaned_data['convert_relative_url_to_absolute']:
                current_site = get_current_site(request)
                setup_relative_urls_conversion(document, 'http://%s/' % current_site.domain)

            # Get requested render mode
            rendering_mode = form.cleaned_data['rendering_mode']

            # Apply paragraph utilities
            if form.cleaned_data['make_paragraphs']:
                make_paragraphs(document)

            # Apply footnotes utilities
            if form.cleaned_data['render_footnotes_html']:

                # Extract all footnotes
                footnotes = extract_footnotes(document)

                # Render all footnotes
                if rendering_mode == RENDERING_MODE_HTML:
                    footnotes_content_html = render_footnotes_html(footnotes,
                                                                   html_error_template=html_error_template)
                elif rendering_mode == RENDERING_MODE_TEXT:
                    footnotes_content_text = render_footnotes_text(footnotes)

            # Apply titles utilities (part 1 of 2)
            if form.cleaned_data['make_auto_title_ids']:
                make_auto_title_ids(document)

            # Apply titles utilities (part 2 of 2)
            if form.cleaned_data['extract_titles']:

                # Extract all titles
                titles = extract_titles(document)

                # Turn the titles list into a hierarchy
                titles_hierarchy = list(make_titles_hierarchy(titles))

                # Render the output
                if rendering_mode == RENDERING_MODE_HTML:
                    summary_content_html = render_titles_hierarchy_html(titles_hierarchy)
                elif rendering_mode == RENDERING_MODE_TEXT:
                    summary_content_text = render_titles_hierarchy_text(titles_hierarchy)

            # Render the document
            if rendering_mode == RENDERING_MODE_HTML:
                output_content_html = render_to_html(document, html_error_template=html_error_template)
            elif rendering_mode == RENDERING_MODE_TEXT:
                output_content_text = render_to_text(document)

    else:
        form = test_input_form()

    print(output_content_html)

    # Render the template
    context = {
        'form': form,
        'document_has_errors': document_has_errors,
        'output_content_html': output_content_html,
        'output_content_text': output_content_text,
        'summary_content_html': summary_content_html,
        'summary_content_text': summary_content_text,
        'footnotes_content_html': footnotes_content_html,
        'footnotes_content_text': footnotes_content_text,
        'title': _('Home page'),
    }
    if extra_context is not None:
        context.update(extra_context)

    return TemplateResponse(request, template_name, context)
示例#5
0
 def test_make_titles_hierarchy_no_titles(self):
     """ Test the ``make_titles_hierarchy`` utility. """
     titles = []
     titles_hierarchy = make_titles_hierarchy(titles)
     self.assertEqual([], list(titles_hierarchy))
示例#6
0
    def test_render_titles_hierarchy_html_custom_class(self):
        """ Test the ``render_titles_hierarchy_html`` utility. """
        document_tree = RootTreeNode()
        a = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title a'})
        a.new_child(None, TextTreeNode, content='Title a')
        b = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title b'})
        b.new_child(None, TextTreeNode, content='Title b')
        c = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title c'})
        c.new_child(None, TextTreeNode, content='Title c')
        d = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title d'})
        d.new_child(None, TextTreeNode, content='Title d')
        e = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title e'})
        e.new_child(None, TextTreeNode, content='Title e')
        f = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title f'})
        f.new_child(None, TextTreeNode, content='Title f')
        g = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title g'})
        g.new_child(None, TextTreeNode, content='Title g')
        h = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title h'})
        h.new_child(None, TextTreeNode, content='Title h')
        i = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title i'})
        i.new_child(None, TextTreeNode, content='Title i')
        j = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title j'})
        j.new_child(None, TextTreeNode, content='Title j')
        k = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title k'})
        k.new_child(None, TextTreeNode, content='Title k')
        l = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title l'})
        l.new_child(None, TextTreeNode, content='Title l')
        m = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title m'})
        m.new_child(None, TextTreeNode, content='Title m')
        n = document_tree.new_child('title', generate_title_cls(2))
        n.new_child(None, TextTreeNode, content='Title n')
        titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n]
        titles_hierarchy = make_titles_hierarchy(titles)
        output = render_titles_hierarchy_html(titles_hierarchy,
                                              root_ul_class_name='custom_summary',
                                              li_class_name='custom_summary-entry',
                                              a_class_name='custom_summary-link',
                                              ul_class_name='custom_summary-subentry')
        expected_output = """<ul class="custom_summary">
<li class="custom_summary-entry">
<a href="#title-a" class="custom_summary-link">Title a</a>
<ul class="custom_summary-subentry">
<li class="custom_summary-entry">
<a href="#title-b" class="custom_summary-link">Title b</a>
</li>
</ul>
</li>
<li class="custom_summary-entry">
<a href="#title-c" class="custom_summary-link">Title c</a>
<ul class="custom_summary-subentry">
<li class="custom_summary-entry">
<a href="#title-d" class="custom_summary-link">Title d</a>
<ul class="custom_summary-subentry">
<li class="custom_summary-entry">
<a href="#title-e" class="custom_summary-link">Title e</a>
</li>
</ul>
</li>
<li class="custom_summary-entry">
<a href="#title-f" class="custom_summary-link">Title f</a>
<ul class="custom_summary-subentry">
<li class="custom_summary-entry">
<a href="#title-g" class="custom_summary-link">Title g</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="custom_summary-entry">
<a href="#title-h" class="custom_summary-link">Title h</a>
<ul class="custom_summary-subentry">
<li class="custom_summary-entry">
<a href="#title-i" class="custom_summary-link">Title i</a>
</li>
</ul>
</li>
<li class="custom_summary-entry">
<a href="#title-j" class="custom_summary-link">Title j</a>
</li>
<li class="custom_summary-entry">
<a href="#title-k" class="custom_summary-link">Title k</a>
<ul class="custom_summary-subentry">
<li class="custom_summary-entry">
<a href="#title-l" class="custom_summary-link">Title l</a>
<ul class="custom_summary-subentry">
<li class="custom_summary-entry">
<a href="#title-m" class="custom_summary-link">Title m</a>
</li>
</ul>
</li>
<li class="custom_summary-entry">
<a href="#" class="custom_summary-link">Title n</a>
</li>
</ul>
</li>
</ul>"""
        self.assertEqual(expected_output, output)
示例#7
0
    def test_render_titles_hierarchy_html(self):
        """ Test the ``render_titles_hierarchy_text`` utility. """
        document_tree = RootTreeNode()
        a = document_tree.new_child('title',
                                    generate_title_cls(3),
                                    attrs={'id': 'Title a'})
        a.new_child(None, TextTreeNode, content='Title a')
        b = document_tree.new_child('title',
                                    generate_title_cls(4),
                                    attrs={'id': 'Title b'})
        b.new_child(None, TextTreeNode, content='Title b')
        c = document_tree.new_child('title',
                                    generate_title_cls(1),
                                    attrs={'id': 'Title c'})
        c.new_child(None, TextTreeNode, content='Title c')
        d = document_tree.new_child('title',
                                    generate_title_cls(2),
                                    attrs={'id': 'Title d'})
        d.new_child(None, TextTreeNode, content='Title d')
        e = document_tree.new_child('title',
                                    generate_title_cls(3),
                                    attrs={'id': 'Title e'})
        e.new_child(None, TextTreeNode, content='Title e')
        f = document_tree.new_child('title',
                                    generate_title_cls(2),
                                    attrs={'id': 'Title f'})
        f.new_child(None, TextTreeNode, content='Title f')
        g = document_tree.new_child('title',
                                    generate_title_cls(3),
                                    attrs={'id': 'Title g'})
        g.new_child(None, TextTreeNode, content='Title g')
        h = document_tree.new_child('title',
                                    generate_title_cls(1),
                                    attrs={'id': 'Title h'})
        h.new_child(None, TextTreeNode, content='Title h')
        i = document_tree.new_child('title',
                                    generate_title_cls(2),
                                    attrs={'id': 'Title i'})
        i.new_child(None, TextTreeNode, content='Title i')
        j = document_tree.new_child('title',
                                    generate_title_cls(1),
                                    attrs={'id': 'Title j'})
        j.new_child(None, TextTreeNode, content='Title j')
        k = document_tree.new_child('title',
                                    generate_title_cls(1),
                                    attrs={'id': 'Title k'})
        k.new_child(None, TextTreeNode, content='Title k')
        l = document_tree.new_child('title',
                                    generate_title_cls(3),
                                    attrs={'id': 'Title l'})
        l.new_child(None, TextTreeNode, content='Title l')
        m = document_tree.new_child('title',
                                    generate_title_cls(4),
                                    attrs={'id': 'Title m'})
        m.new_child(None, TextTreeNode, content='Title m')
        n = document_tree.new_child('title', generate_title_cls(2))
        n.new_child(None, TextTreeNode, content='Title n')
        titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n]
        titles_hierarchy = make_titles_hierarchy(titles)
        output = render_titles_hierarchy_html(titles_hierarchy)
        expected_output = """<ul class="titles-summary">
<li class="titles-summary-entry">
<a href="#title-a" class="titles-summary-link">Title a</a>
<ul class="titles-summary-subentry">
<li class="titles-summary-entry">
<a href="#title-b" class="titles-summary-link">Title b</a>
</li>
</ul>
</li>
<li class="titles-summary-entry">
<a href="#title-c" class="titles-summary-link">Title c</a>
<ul class="titles-summary-subentry">
<li class="titles-summary-entry">
<a href="#title-d" class="titles-summary-link">Title d</a>
<ul class="titles-summary-subentry">
<li class="titles-summary-entry">
<a href="#title-e" class="titles-summary-link">Title e</a>
</li>
</ul>
</li>
<li class="titles-summary-entry">
<a href="#title-f" class="titles-summary-link">Title f</a>
<ul class="titles-summary-subentry">
<li class="titles-summary-entry">
<a href="#title-g" class="titles-summary-link">Title g</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="titles-summary-entry">
<a href="#title-h" class="titles-summary-link">Title h</a>
<ul class="titles-summary-subentry">
<li class="titles-summary-entry">
<a href="#title-i" class="titles-summary-link">Title i</a>
</li>
</ul>
</li>
<li class="titles-summary-entry">
<a href="#title-j" class="titles-summary-link">Title j</a>
</li>
<li class="titles-summary-entry">
<a href="#title-k" class="titles-summary-link">Title k</a>
<ul class="titles-summary-subentry">
<li class="titles-summary-entry">
<a href="#title-l" class="titles-summary-link">Title l</a>
<ul class="titles-summary-subentry">
<li class="titles-summary-entry">
<a href="#title-m" class="titles-summary-link">Title m</a>
</li>
</ul>
</li>
<li class="titles-summary-entry">
<a href="#" class="titles-summary-link">Title n</a>
</li>
</ul>
</li>
</ul>"""
        self.assertEqual(expected_output, output)
示例#8
0
 def test_make_titles_hierarchy_no_titles(self):
     """ Test the ``make_titles_hierarchy`` utility. """
     titles = []
     titles_hierarchy = make_titles_hierarchy(titles)
     self.assertEqual([], list(titles_hierarchy))
示例#9
0
    def test_render_titles_hierarchy_text(self):
        """ Test the ``render_titles_hierarchy_text`` utility. """
        document_tree = RootTreeNode()
        a = document_tree.new_child('title',
                                    generate_title_cls(3),
                                    attrs={'id': 'Title a'})
        a.new_child(None, TextTreeNode, content='Title a')
        b = document_tree.new_child('title',
                                    generate_title_cls(4),
                                    attrs={'id': 'Title b'})
        b.new_child(None, TextTreeNode, content='Title b')
        c = document_tree.new_child('title',
                                    generate_title_cls(1),
                                    attrs={'id': 'Title c'})
        c.new_child(None, TextTreeNode, content='Title c')
        d = document_tree.new_child('title',
                                    generate_title_cls(2),
                                    attrs={'id': 'Title d'})
        d.new_child(None, TextTreeNode, content='Title d')
        e = document_tree.new_child('title',
                                    generate_title_cls(3),
                                    attrs={'id': 'Title e'})
        e.new_child(None, TextTreeNode, content='Title e')
        f = document_tree.new_child('title',
                                    generate_title_cls(2),
                                    attrs={'id': 'Title f'})
        f.new_child(None, TextTreeNode, content='Title f')
        g = document_tree.new_child('title',
                                    generate_title_cls(3),
                                    attrs={'id': 'Title g'})
        g.new_child(None, TextTreeNode, content='Title g')
        h = document_tree.new_child('title',
                                    generate_title_cls(1),
                                    attrs={'id': 'Title h'})
        h.new_child(None, TextTreeNode, content='Title h')
        i = document_tree.new_child('title',
                                    generate_title_cls(2),
                                    attrs={'id': 'Title i'})
        i.new_child(None, TextTreeNode, content='Title i')
        j = document_tree.new_child('title',
                                    generate_title_cls(1),
                                    attrs={'id': 'Title j'})
        j.new_child(None, TextTreeNode, content='Title j')
        k = document_tree.new_child('title',
                                    generate_title_cls(1),
                                    attrs={'id': 'Title k'})
        k.new_child(None, TextTreeNode, content='Title k')
        l = document_tree.new_child('title',
                                    generate_title_cls(3),
                                    attrs={'id': 'Title l'})
        l.new_child(None, TextTreeNode, content='Title l')
        m = document_tree.new_child('title',
                                    generate_title_cls(4),
                                    attrs={'id': 'Title m'})
        m.new_child(None, TextTreeNode, content='Title m')
        n = document_tree.new_child('title', generate_title_cls(2))
        n.new_child(None, TextTreeNode, content='Title n')
        titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n]
        titles_hierarchy = make_titles_hierarchy(titles)
        output = render_titles_hierarchy_text(titles_hierarchy)
        expected_output = """# Title a
## Title b
# Title c
## Title d
### Title e
## Title f
### Title g
# Title h
## Title i
# Title j
# Title k
## Title l
### Title m
## Title n"""
        self.assertEqual(expected_output, output)