Loaders Based Plugin API
kk edited this page Oct 21, 2016
·
4 revisions
This is a proposal for a Plugin API based on loaders. Loader is used for convert raw files into html content.
# my_loader.py
class MyLoader:
def __init__(options):
"""Configure your loader with options"""
def accept(self, filename):
"""Decide load the file or not"""
def load(self, page):
"""Load page"""
# the page object contains all info of which should be load
# the return value contains all info of which should be write
return MkdocsResponse()
# setup.py
entry_points = {
'mkdocs.loaders': [
'my_loader = path.to.my_loader:MyLoader',
]
}
# mkdocs.yml
loaders:
- name: "my_loader"
options: "options"
# changes in mkdocs.config.load_config
def load_config(config_file=None, **kwargs):
# ...do somethings
loaders = []
# instance loaders
cfg["loaders"] = loaders
# changes in mkdocs.commands.build.py
def _build_page(page, config):
for loader in config["loaders"]:
if loader.accept(page.input_path):
return loader.load(page)
raise ValueError("Can't find loader for {}".format(page.input_path))
# also, create a markdown loader and register it as builtin loader
class MarkdownLoader:
def accept(self, filename):
# accept markdown file
pass
def load(page):
# some code of origin _build_page
pass
A autodoc loader.
Live Demo: http://restaction.readthedocs.io/zh_CN/latest/api/
docs/api.autodoc
mkdocs_autodoc
mkdocs_autodoc::Demo
mkdocs.yml
site_name: Demo
pages:
- Home: index.md
- API: api.autodoc
class AutodocLoader:
def accept(self, filename):
# accept *.autodoc file
pass
def load(page):
# parse *.autodoc file, generate html content
pass