import os

LANGUAGES = []


def get_renderer(filename):
    _, ext = os.path.splitext(filename)
    for extensions, renderer in LANGUAGES:
        if ext in extensions:
            return renderer


def can_render(filename):
    return get_renderer(filename) is not None


def render(filename, content=None):
    if content is None:
        content = open(filename).read()

    return get_renderer(filename)(content)


def _load_markdown():
    try:
        import markdown
    except ImportError:
        return

    def render_markdown(content):
        return markdown.markdown(content, extensions=["toc", "extra"])

    LANGUAGES.append(([".md", ".mkdn", ".mdwn", ".markdown"], render_markdown))


def _load_restructured_text():
    try:
        from docutils.core import publish_parts
        from docutils.writers.html4css1 import Writer
    except ImportError:
        return

    def render_rest(content):
        # start by h2 and ignore invalid directives and so on
        # (most likely from Sphinx)
        settings = {"initial_header_level": 2, "report_level": 0}
        return publish_parts(content, writer=Writer(), settings_overrides=settings).get(
            "html_body"
        )

    LANGUAGES.append(([".rst", ".rest"], render_rest))


for loader in [_load_markdown, _load_restructured_text]:
    loader()
