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)
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)
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)
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)
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))
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)
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)