blob: 209c4bc2b0f8187b1cc879da3d720107d8375d5a [file] [edit]
from __future__ import annotations
import json
from typing import TYPE_CHECKING
from mdformat.renderer import RenderContext, RenderTreeNode
if TYPE_CHECKING:
from markdown_it import MarkdownIt
UNFORMATTED_MARKDOWN = "\n\n# A header\n\n"
FORMATTED_MARKDOWN = "# A header\n"
class JSONFormatterPlugin:
"""A code formatter plugin that formats JSON."""
@staticmethod
def format_json(unformatted: str, _info_str: str) -> str:
parsed = json.loads(unformatted)
return json.dumps(parsed, indent=2) + "\n"
class TextEditorPlugin:
"""A plugin that makes all text the same."""
@staticmethod
def update_mdit(mdit: MarkdownIt):
pass
def _text_renderer( # type: ignore[misc]
tree: RenderTreeNode, context: RenderContext
) -> str:
return "All text is like this now!"
RENDERERS = {"text": _text_renderer}
class TablePlugin:
"""A plugin that adds table extension to the parser."""
@staticmethod
def update_mdit(mdit: MarkdownIt):
mdit.enable("table")
def _table_renderer( # type: ignore[misc]
tree: RenderTreeNode, context: RenderContext
) -> str:
return "dummy 21"
RENDERERS = {"table": _table_renderer}
class ASTChangingPlugin:
"""A plugin that makes AST breaking formatting changes."""
CHANGES_AST = True
TEXT_REPLACEMENT = "Content replaced completely. AST is now broken!"
@staticmethod
def update_mdit(mdit: MarkdownIt):
pass
def _text_renderer( # type: ignore[misc]
tree: RenderTreeNode, context: RenderContext
) -> str:
return ASTChangingPlugin.TEXT_REPLACEMENT
RENDERERS = {"text": _text_renderer}
class PrefixPostprocessPlugin:
"""A plugin that postprocesses text, adding a prefix."""
CHANGES_AST = True
@staticmethod
def update_mdit(mdit: MarkdownIt):
pass
def _text_postprocess( # type: ignore[misc]
text: str, tree: RenderTreeNode, context: RenderContext
) -> str:
return "Prefixed!" + text
RENDERERS: dict = {}
POSTPROCESSORS = {"text": _text_postprocess}
class SuffixPostprocessPlugin:
"""A plugin that postprocesses text, adding a suffix."""
CHANGES_AST = True
@staticmethod
def update_mdit(mdit: MarkdownIt):
pass
def _text_postprocess( # type: ignore[misc]
text: str, tree: RenderTreeNode, context: RenderContext
) -> str:
return text + "Suffixed!"
RENDERERS: dict = {}
POSTPROCESSORS = {"text": _text_postprocess}