| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from importlib import import_module
- from typing import TYPE_CHECKING, Dict, Protocol, Union, cast
- if TYPE_CHECKING:
- from ..markdown import Markdown
- _plugins = {
- "speedup": "mistune.plugins.speedup.speedup",
- "strikethrough": "mistune.plugins.formatting.strikethrough",
- "mark": "mistune.plugins.formatting.mark",
- "insert": "mistune.plugins.formatting.insert",
- "superscript": "mistune.plugins.formatting.superscript",
- "subscript": "mistune.plugins.formatting.subscript",
- "footnotes": "mistune.plugins.footnotes.footnotes",
- "table": "mistune.plugins.table.table",
- "url": "mistune.plugins.url.url",
- "abbr": "mistune.plugins.abbr.abbr",
- "def_list": "mistune.plugins.def_list.def_list",
- "math": "mistune.plugins.math.math",
- "ruby": "mistune.plugins.ruby.ruby",
- "task_lists": "mistune.plugins.task_lists.task_lists",
- "spoiler": "mistune.plugins.spoiler.spoiler",
- }
- class Plugin(Protocol):
- def __call__(self, md: "Markdown") -> None: ...
- _cached_modules: Dict[str, Plugin] = {}
- PluginRef = Union[str, Plugin] # reference to register a plugin
- def import_plugin(name: PluginRef) -> Plugin:
- if callable(name):
- return name
- if name in _cached_modules:
- return _cached_modules[name]
- if name in _plugins:
- module_path, func_name = _plugins[name].rsplit(".", 1)
- else:
- module_path, func_name = name.rsplit(".", 1)
- module = import_module(module_path)
- plugin = cast(Plugin, getattr(module, func_name))
- _cached_modules[name] = plugin
- return plugin
|