sphinx_gemini_builder/sphinx_gemini_builder/__init__.py

60 lines
1.4 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Build Gemini blog from Sphinx.
"""
__version_info__ = (0, 0, 1)
__version__ = '.'.join([str(val) for val in __version_info__])
from typing import Set, Dict, Any
from urllib.parse import quote
from sphinx.builders.text import TextBuilder
from sphinx.util import logging
from sphinx.locale import __
from sphinx.application import Sphinx
from .writer import GeminiTranslator, GeminiWriter
logger = logging.getLogger(__name__)
class GeminiBuilder(TextBuilder):
"""
Gemini builder, based on native TextBuilder code from Sphinx
"""
name = 'gemini'
format = 'gemini'
epilog = __('The gemini files are in %(outdir)s.')
out_suffix = '.gmi'
allow_parallel = True
default_translator_class = GeminiTranslator
current_docname = None
def __init__(self, app) -> None:
super().__init__(app)
self.baseurl = self.config.gemini_baseurl
def prepare_writing(self, docnames: Set[str]) -> None:
self.writer = GeminiWriter(self)
def get_target_uri(self, docname: str, typ: str = None) -> str:
return self.baseurl + quote(docname) + self.out_suffix
def setup(app: Sphinx) -> Dict[str, Any]:
app.add_builder(GeminiBuilder)
app.add_config_value('gemini_footer', '', 'env')
app.add_config_value('gemini_baseurl', '', 'env')
return {
'version': __version__,
'parallel_read_safe': True,
'parallel_write_safe': True
}