Optimized sphinx and documentation

This commit is contained in:
2025-03-15 18:33:59 +01:00
parent 12e0367c66
commit c1aa6823b0
19 changed files with 76 additions and 252 deletions

View File

@@ -55,6 +55,7 @@ extensions = [
"myst_parser",
'local_md_files',
'roles_overview',
'markdown_include',
]
autosummary_generate = True
@@ -63,3 +64,14 @@ myst_enable_extensions = [
"colon_fence", # Für erweiterte Syntax wie ::: Hinweisboxen etc.
# weitere Erweiterungen nach Bedarf
]
def setup(app):
python_domain = app.registry.domains.get('py')
if python_domain is not None:
directive = python_domain.directives.get('currentmodule')
if directive is not None:
directive.optional_arguments = 10
return {'version': '1.0', 'parallel_read_safe': True}

View File

@@ -0,0 +1,53 @@
import os
from docutils import nodes
from docutils.parsers.rst import Directive
from sphinx.util import logging
logger = logging.getLogger(__name__)
from myst_parser.parsers.sphinx_ import MystParser
class MarkdownIncludeDirective(Directive):
required_arguments = 1 # Pfad zur Markdown-Datei
optional_arguments = 0
final_argument_whitespace = True
has_content = False
def run(self):
logger.info("markdown-include-Direktive wird ausgeführt")
env = self.state.document.settings.env
# Ermittle den absoluten Pfad der Datei.
rel_filename, filename = env.relfn2path(self.arguments[0])
logger.info("Markdown-Datei: %s", filename)
if not os.path.exists(filename):
error = self.state_machine.reporter.error(
f'File not found: {filename}',
nodes.literal_block(self.block_text, self.block_text),
line=self.lineno)
return [error]
try:
with open(filename, 'r', encoding='utf-8') as f:
markdown_content = f.read()
except Exception as e:
error = self.state_machine.reporter.error(
f'Error reading file {filename}: {e}',
nodes.literal_block(self.block_text, self.block_text),
line=self.lineno)
return [error]
# Parse den Markdown-Content mit MystParser.
parser = MystParser()
from docutils.frontend import OptionParser
from docutils.utils import new_document
settings = OptionParser(components=(MystParser,)).get_default_values()
# Hänge die Sphinx-Umgebung an die Einstellungen an, damit myst_parser funktioniert.
settings.env = self.state.document.settings.env
doc = new_document(filename, settings=settings)
parser.parse(markdown_content, doc)
logger.info("Markdown-Parsing erfolgreich abgeschlossen")
return doc.children
def setup(app):
app.add_directive("markdown-include", MarkdownIncludeDirective)
return {'version': '0.1', 'parallel_read_safe': True}

View File

@@ -60,7 +60,6 @@ class RolesOverviewDirective(Directive):
categories.setdefault(tag, []).append(role_entry)
else:
logger.warning(f"meta/main.yml not found for role {role_path}")
logger.info("For role %s, galaxy_info: %s", role_name, galaxy_info)
# Sort categories and roles alphabetically.
sorted_categories = sorted(categories.items(), key=lambda x: x[0].lower())