def _create_paragraph_styles(): return [ styles.map_word_style("Heading1").to(styles.top_level_element("h1")), styles.map_word_style("Heading2").to(styles.top_level_element("h2")), styles.map_word_style("Heading3").to(styles.top_level_element("h3")), styles.map_word_style("Heading4").to(styles.top_level_element("h4")), styles.map_word_style("ListParagraph", numbering_level=0).to(styles.unordered_list(depth=1)), styles.map_word_style("ListParagraph", numbering_level=1).to(styles.unordered_list(depth=2)), styles.map_word_style("ListParagraph", numbering_level=2).to(styles.unordered_list(depth=3)), styles.map_word_style("ListParagraph", numbering_level=3).to(styles.unordered_list(depth=4)), ]
def style_mapping_is_used_to_generate_html_for_paragraph_with_style(): paragraph = _paragraph_of_text("Hello", style="Heading1") expected_html = html.fragment([ html.element("h1", [html.text("Hello")]) ]) generator = HtmlGenerator(paragraph_styles=[ styles.map_word_style("Heading1").to(styles.top_level_element("h1")) ]) assert_equal(expected_html, generator.html_for_paragraph(paragraph))
return self._html_for(self._generate_paragraph_html, paragraph) def _html_for(self, generator, element): html_stack = HtmlStack() generator(element, html_stack) return html_stack.to_html_fragment() def _generate_document_html(self, document, html_stack): for paragraph in document.paragraphs: self._generate_paragraph_html(paragraph, html_stack) def _generate_paragraph_html(self, paragraph, html_stack): style = self._find_paragraph_style(paragraph) style.start(html_stack) for run in paragraph.runs: for text in run.texts: html_stack.text(text.text) style.end(html_stack) def _find_paragraph_style(self, paragraph): for mapping in self._paragraph_styles: if mapping.matches(paragraph): return mapping.style return _default_paragraph_mapping _default_paragraph_mapping = styles.top_level_element("p")