mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-11-04 12:18:17 +00: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