Source code for mdfy.elements.text

from typing import Optional

from mdfy.elements._base import MdElement
from mdfy.elements.text_formatter import MdFormatter

try:
    from mdfy.elements.formatter.lark_formatter import MdTextFormatter

    _formatter_available = True
except ImportError:
    _formatter_available = False


[docs] class MdText(MdElement): """MdElementt class to handle the text and styling of text. Attributes: content (str): The content string containing potential style markers. formatter (MdFormatter): The formatter to apply styling to the content. Examples: >>> # If you have installed mdfy[styled-text] >>> from mdfy import MdText >>> try: >>> import lark >>> except ModuleNotFoundError: >>> print("Please install mdfy[styled-text] to use MdText with styles.") >>> exit(0) >>> >>> text = MdText("This is [bold:bold] text.") >>> print(text) This is **bold** text. >>> MdText("[This is underline text:underline].").to_str() <u>This is underline text</u>. >>> MdText("[This is [nested:bold] style text:underline].").to_str() <u>This is **nested** style text</u>. >>> MdText("You can use aliases e.g. [st:st] [bd:bo].").to_str() You can use aliases e.g. ***st*** **bd**. Note: Available style patterns: - strong: bold text (e.g. `***strong***`) - bold: bold text (e.g. `**bold**`) - italic: italic text (e.g. `*italic*`) - not: strike-through text (e.g. `~~strike-through~~`) - underline: underlined text (e.g. `<u>underlined</u>`) - code: inline code (e.g. `code`) Also, the following aliases are available for the style patterns: - strong: st - bold: bo, bd - italic: it - not: no, nt - underline: un, ul - code: cd, quote """ def __init__( self, content: str, formatter: Optional[MdFormatter] = None, no_style: bool = False, ) -> None: """Initializes an instance of the MdText class to handle the text and styling of text. Args: content (str): The content string containing potential style markers. formatter (MdFormatter, optional): The formatter to apply styling to the content. Defaults to None. no_style (bool, optional): If True, no style will be applied to the content. Defaults to False. """ self.content = content self.formatter = formatter self.no_style = no_style if self.formatter is None and _formatter_available and not no_style: self.formatter = MdTextFormatter()
[docs] def __str__(self) -> str: """Returns the styled content as per the specified style markers. Returns: str: Formatted markdown string with the appropriate styles applied. """ result = self.content if self.formatter and not self.no_style: result = self.formatter.format(result) return result
[docs] def __add__(self, other: "MdText") -> "MdText": """Adds two MdText objects together. Args: other (MdText): The other MdText object to be added. Returns: MdText: A new MdText object containing the concatenated content of the two objects. """ return MdText(str(self) + str(other))