Beispiel #1
0
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")