nvchecker/docs/myrst2man.py
2021-01-17 17:20:10 +08:00

75 lines
2.0 KiB
Python
Executable File

#!/usr/bin/python3
import time
import locale
import os
import sys
try:
locale.setlocale(locale.LC_ALL, '')
except:
pass
sys.path.insert(0, '..')
import nvchecker
from docutils.core import publish_cmdline, default_description
from docutils import nodes
from docutils.writers import manpage
from docutils.parsers.rst import roles
def ref_role(
role, rawtext, text, lineno, inliner,
options={}, content=[],
):
node = nodes.reference(rawtext, text.title(), **options)
return [node], []
def doc_role(
role, rawtext, text, lineno, inliner,
options={}, content=[],
):
node = nodes.reference(rawtext, text, **options)
return [node], []
roles.register_local_role('ref', ref_role)
roles.register_local_role('doc', doc_role)
class MyTranslator(manpage.Translator):
def visit_image(self, node):
raise nodes.SkipNode
def visit_topic(self, node):
self.body.append('\n')
raise nodes.SkipNode
def visit_title(self, node):
try:
super().visit_title(node)
except nodes.SkipNode:
if self.section_level == 0:
self._docinfo['title'] = 'nvchecker'
self._docinfo['subtitle'] = 'New version checker for software releases'
self._docinfo['title_upper'] = 'nvchecker'.upper()
self._docinfo['manual_section'] = '1'
# Make the generated man page reproducible. Based on the patch from
# https://sourceforge.net/p/docutils/patches/132/#5333
source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH')
if source_date_epoch:
self._docinfo['date'] = time.strftime('%Y-%m-%d', time.gmtime(int(source_date_epoch)))
else:
self._docinfo['date'] = time.strftime('%Y-%m-%d')
self._docinfo['version'] = nvchecker.__version__
raise
class MyWriter(manpage.Writer):
def __init__(self):
super().__init__()
self.translator_class = MyTranslator
def main():
description = ("Generates plain unix manual documents. " + default_description)
publish_cmdline(writer=MyWriter(), description=description)
if __name__ == '__main__':
main()