Source code for mdfy.elements.code
import logging
from ._base import MdElement
logger = logging.getLogger(__name__)
[docs]
class MdCode(MdElement):
"""Represents Markdown code or code block.
Attributes:
code (str): The code string.
inline (bool): Determines if the code should be represented as inline or block.
syntax (str): The programming language syntax for the code block.
Examples:
>>> code = MdCode("print('Hello World!')", inline=True)
>>> print(code)
`print('Hello World!')`
>>> code = MdCode("print('Hello World!')", inline=False, syntax="python")
>>> print(code)
```python
print('Hello World!')
```
"""
def __init__(self, code: str, inline: bool = False, syntax: str = "") -> None:
"""Initializes an instance of the MdCode class to represent Markdown code or code block.
Args:
code (str): The code string.
inline (bool, optional): Determines if the code should be represented as inline or block.
Defaults to block (False).
syntax (str, optional): The programming language syntax for the code block.
This only has an effect when inline is False.
"""
if code is None:
logger.warning("Code content is None, setting to empty string")
code = ""
self.code = code
self.inline = inline
self.syntax = syntax
# Check for newlines to override inline setting
if "\n" in code:
self.inline = False
[docs]
def __str__(self) -> str:
"""Returns a string representation of the code in Markdown format.
Returns:
str: String representation of the code.
Warnings:
If the code is None, it will log a warning and set the code to an empty string.
"""
code = self.code
if self.inline:
return f"`{code}`"
else:
return f"```{self.syntax}\n{code}\n```"