Source code for pybloqs.block.text
"""
Module for blocks with text-only content
"""
import textwrap
import bs4
import markdown
from pybloqs import BaseBlock
from pybloqs.html import parse
[docs]
class Raw(BaseBlock):
def __init__(self, contents: str, dedent: bool = True, **kwargs) -> None:
"""
Writes out the content as raw text or HTML.
:param contents: Raw text. Can contain arbitrary HTML.
:param kwargs: Optional styling arguments. The `style` keyword argument has special
meaning in that it allows styling to be grouped as one argument.
It is also useful in case a styling parameter name clashes with a standard
block parameter.
"""
super().__init__(**kwargs)
if not isinstance(contents, str):
raise ValueError("Expected string content type but got %s", type(contents))
if dedent:
contents = textwrap.dedent(contents)
self._contents = self._process_raw_contents(contents)
def _process_raw_contents(self, contents: str) -> str:
return contents
def _write_contents(self, container: bs4.Tag, *_args, **_kwargs) -> None:
for child in list(parse(self._contents).children):
container.append(child)
[docs]
class Pre(Raw):
"""
Renders the content with a fixed-width font, preserving whitespace.
"""
container_tag = "pre"
[docs]
class Span(Raw):
"""
Renders a piece of text with formatting.
"""
container_tag = "span"
[docs]
class Markdown(Raw):
"""
Renders Markdown into HTML content.
"""
encoding = "UTF-8"
def _process_raw_contents(self, contents: str) -> str:
return markdown.markdown(contents, output_format="html")