mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-09-10 12:27:15 +02:00
Optimized sphinx and documentation
This commit is contained in:
@@ -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}
|
||||
|
||||
|
||||
|
||||
|
53
sphinx/markdown_include.py
Normal file
53
sphinx/markdown_include.py
Normal 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}
|
@@ -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())
|
||||
|
Reference in New Issue
Block a user