summaryrefslogtreecommitdiff
path: root/quote.py
blob: 56ae0bc5bd738d13e710bb14053d17030988fe76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
"""
Encapsulates text in a <div> html tag with the class "quote" and between two paragraphs which contain a quote (").
These all can be styled in css.

Usage (without the backslashes):
\"""my quote\"""
or
\"""my quote "" source \"""
"""
from marko import inline
from marko.helpers import MarkoExtension


class QuoteElement(inline.InlineElement):
    pattern = '"""([^"]*)(?:""([^"]*))?"""'
    parse_children = True

    def __init__(self, match):
        self.quote = match.group(1)
        self.source = match.group(2) if match.group(2) is not None and not match.group(2).isspace() else None



class QuoteRenderer:
    def render_quote_element(self, element: QuoteElement):
        source = f'<p class="quote-source">-- {element.source}</p>' if element.source is not None else ''
        return f'<div class="quote"><div class="quote-main"><p>"</p><p>{element.quote}</p><p>"</p></div>{source}</div>'


Quote = MarkoExtension(
    elements=[QuoteElement],
    renderer_mixins=[QuoteRenderer]
)