markji.editor.paragraph 源代码

# :project: markji-py
# :author: L-ING
# :copyright: (C) 2025 L-ING <hlf01@icloud.com>
# :license: MIT, see LICENSE for more details.

from markji.editor.media import AudioBuilder
from markji.editor.font import FontBuilder
from markji.editor.cloze import ClozeBuilder
from markji.editor.reference import ReferenceBuilder


[文档] class ParagraphBuilder: """ 段落构建器 """ def __init__( self, content: str | FontBuilder | ClozeBuilder | AudioBuilder | ReferenceBuilder, ): """ 段落构建器 :param str | FontBuilder | ClozeBuilder | AudioBuilder | ReferenceBuilder content: 内容 纯文字段落 .. code-block:: python from markji.editor import ParagraphBuilder ParagraphBuilder("Hello, World!").heading().center().build() 字体段落 .. code-block:: python from markji.editor import FontBuilder, FontColor, FontBackgroundColor, ParagraphBuilder font_builder = FontBuilder("Hello, World!").bold().color(FontColor.RED).background( FontBackgroundColor.YELLOW ) ParagraphBuilder(font_builder).heading().center().build() 完形填空段落 .. code-block:: python from markji.editor import ClozeBuilder, ParagraphBuilder cloze_builder = ClozeBuilder("Hello, World!", 1) ParagraphBuilder(cloze_builder).heading().build() 音频段落 .. code-block:: python from markji.editor import AudioBuilder, ParagraphBuilder audio = await client.upload_file("example.mp3") ParagraphBuilder(AudioBuilder(audio.id, "example")).heading().build() 卡片引用段落 .. code-block:: python from markji.editor import ReferenceBuilder, ParagraphBuilder cards, _ = await client.search_cards("Internet", self_only=False) ParagraphBuilder(ReferenceBuilder("Hello, World!", cards[0])).heading().build() """ self._content = content self._heading: bool = False self._center: bool = False self._list: bool = False
[文档] def heading(self): """ 标题一 :return: 自身 :rtype: ParagraphBuilder """ self._heading = True return self
[文档] def center(self): """ 居中 :return: 自身 :rtype: ParagraphBuilder """ self._center = True return self
[文档] def list(self): """ 无序列表 :return: 自身 :rtype: ParagraphBuilder """ self._list = True return self
[文档] def build(self) -> str: """ 构建 :return: 包装后的内容 :rtype: str """ if isinstance( self._content, (FontBuilder, ClozeBuilder, AudioBuilder, ReferenceBuilder) ): content = self._content.build() else: content = self._content result = [] if self._heading: result.append("H1") if self._center: result.append("center") if self._list: result.append("L") result = ",".join(result) return f"[P#{result}#{content}]"