[{"data":1,"prerenderedAt":68},["Reactive",2],{"blog-post-markdown-document-templates-automation-complete-guide":3},{"slug":4,"title":5,"description":6,"excerpt":7,"date":8,"category":9,"author":10,"keywords":11,"readingMinutes":12,"html":13,"headings":14,"tools":43,"related":44},"markdown-document-templates-automation-complete-guide","Markdown Document Templates and Automation: Complete Guide for Streamlined Content Creation and Workflow Optimization","Master Markdown document templates and automation techniques to streamline content creation workflows. Learn template design patterns, variable substitution, automated generation, and integration with modern development tools for efficient documentation systems.","Markdown document templates and automation systems transform repetitive content creation tasks into efficient, standardized workflows that ensure consistency, reduce errors, and dramatically…","2025-11-30","Tutorial","Matthew Rathbone","markdown templates, markdown automation, document templates markdown, markdown workflow automation, markdown templating systems, automated markdown generation, markdown content management",20,"\u003Cp>Markdown document templates and automation systems transform repetitive content creation tasks into efficient, standardized workflows that ensure consistency, reduce errors, and dramatically accelerate documentation production across technical teams, content organizations, and publishing platforms. By implementing sophisticated template engines, variable substitution systems, and automated generation pipelines, content creators can establish scalable documentation architectures that maintain quality standards while enabling rapid iteration and collaborative content development at enterprise scale.\u003C/p>\n\u003Ch2 id=\"why-master-markdown-template-automation\">Why Master Markdown Template Automation?\u003C/h2>\n\u003Cp>Professional template automation provides essential benefits for modern content creation workflows:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Consistency Enforcement\u003C/strong>: Standardize document structure, formatting, and metadata across all content\u003C/li>\n\u003Cli>\u003Cstrong>Time Efficiency\u003C/strong>: Reduce content creation time by 70-90% through automated template generation\u003C/li>\n\u003Cli>\u003Cstrong>Quality Assurance\u003C/strong>: Eliminate formatting errors and ensure compliance with style guidelines\u003C/li>\n\u003Cli>\u003Cstrong>Scalability\u003C/strong>: Support large-scale documentation projects with minimal manual intervention\u003C/li>\n\u003Cli>\u003Cstrong>Collaboration\u003C/strong>: Enable distributed teams to contribute content using standardized templates\u003C/li>\n\u003Cli>\u003Cstrong>Maintenance\u003C/strong>: Update template designs once and automatically propagate changes across all documents\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"foundation-template-design-principles\">Foundation Template Design Principles\u003C/h2>\n\u003Ch3 id=\"template-structure-architecture\">Template Structure Architecture\u003C/h3>\n\u003Cp>Understanding modular template design for maximum flexibility and maintainability:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-comment\"># template-structure.yml - Hierarchical template organization\u003C/span>\n\u003Cspan class=\"hljs-attr\">templates:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">base:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">metadata:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">title:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-template-variable\">{{ title }}\u003C/span>&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">description:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-template-variable\">{{ description }}\u003C/span>&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">author:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-template-variable\">{{ author | default: &#x27;Team&#x27; }}\u003C/span>&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">date:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-template-variable\">{{ date | default: &#x27;today&#x27; }}\u003C/span>&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">tags:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-template-variable\">{{ tags | join: &#x27;, &#x27; }}\u003C/span>&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">structure:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">header:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-template-variable\">{{ include &#x27;header.md&#x27; }}\u003C/span>&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-template-variable\">{{ content }}\u003C/span>&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">footer:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-template-variable\">{{ include &#x27;footer.md&#x27; }}\u003C/span>&quot;\u003C/span>\n  \n  \u003Cspan class=\"hljs-attr\">specialized:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">api_documentation:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">extends:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;base&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">sections:\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">overview\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">authentication\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">endpoints\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">examples\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">error_codes\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">tutorial:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">extends:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;base&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">sections:\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">prerequisites\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">objectives\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">steps\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">verification\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">troubleshooting\u003C/span>\n    \n    \u003Cspan class=\"hljs-attr\">meeting_notes:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">extends:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;base&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">sections:\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">attendees\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">agenda\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">discussion\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">action_items\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">next_steps\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"variable-substitution-systems\">Variable Substitution Systems\u003C/h3>\n\u003Cp>Implementing sophisticated templating with dynamic content generation:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-python\">\u003Cspan class=\"hljs-comment\"># markdown_templating_engine.py - Advanced template processing system\u003C/span>\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> re\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> json\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> yaml\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> datetime \u003Cspan class=\"hljs-keyword\">import\u003C/span> datetime, date\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> typing \u003Cspan class=\"hljs-keyword\">import\u003C/span> \u003Cspan class=\"hljs-type\">Dict\u003C/span>, \u003Cspan class=\"hljs-type\">List\u003C/span>, \u003Cspan class=\"hljs-type\">Any\u003C/span>, \u003Cspan class=\"hljs-type\">Optional\u003C/span>\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> pathlib \u003Cspan class=\"hljs-keyword\">import\u003C/span> Path\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> jinja2\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> dataclasses \u003Cspan class=\"hljs-keyword\">import\u003C/span> dataclass, field\n\n\u003Cspan class=\"hljs-meta\">@dataclass\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">TemplateContext\u003C/span>:\n    \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Context object for template rendering with validation.&quot;&quot;&quot;\u003C/span>\n    variables: \u003Cspan class=\"hljs-type\">Dict\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>, \u003Cspan class=\"hljs-type\">Any\u003C/span>] = field(default_factory=\u003Cspan class=\"hljs-built_in\">dict\u003C/span>)\n    metadata: \u003Cspan class=\"hljs-type\">Dict\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>, \u003Cspan class=\"hljs-type\">Any\u003C/span>] = field(default_factory=\u003Cspan class=\"hljs-built_in\">dict\u003C/span>)\n    includes: \u003Cspan class=\"hljs-type\">Dict\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>, \u003Cspan class=\"hljs-built_in\">str\u003C/span>] = field(default_factory=\u003Cspan class=\"hljs-built_in\">dict\u003C/span>)\n    functions: \u003Cspan class=\"hljs-type\">Dict\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>, \u003Cspan class=\"hljs-built_in\">callable\u003C/span>] = field(default_factory=\u003Cspan class=\"hljs-built_in\">dict\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">__post_init__\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Initialize default functions and metadata.&quot;&quot;&quot;\u003C/span>\n        self.functions.update({\n            \u003Cspan class=\"hljs-string\">&#x27;today&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span>: date.today().isoformat(),\n            \u003Cspan class=\"hljs-string\">&#x27;now&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span>: datetime.now().isoformat(),\n            \u003Cspan class=\"hljs-string\">&#x27;slugify&#x27;\u003C/span>: self._slugify,\n            \u003Cspan class=\"hljs-string\">&#x27;title_case&#x27;\u003C/span>: self._title_case,\n            \u003Cspan class=\"hljs-string\">&#x27;word_count&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span> text: \u003Cspan class=\"hljs-built_in\">len\u003C/span>(text.split()),\n            \u003Cspan class=\"hljs-string\">&#x27;reading_time&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span> text: \u003Cspan class=\"hljs-built_in\">max\u003C/span>(\u003Cspan class=\"hljs-number\">1\u003C/span>, \u003Cspan class=\"hljs-built_in\">len\u003C/span>(text.split()) // \u003Cspan class=\"hljs-number\">200\u003C/span>)\n        })\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;date&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> self.variables:\n            self.variables[\u003Cspan class=\"hljs-string\">&#x27;date&#x27;\u003C/span>] = date.today().isoformat()\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_slugify\u003C/span>(\u003Cspan class=\"hljs-params\">self, text: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Convert text to URL-friendly slug.&quot;&quot;&quot;\u003C/span>\n        slug = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;[^\\w\\s-]&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>, text.lower())\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> re.sub(\u003Cspan class=\"hljs-string\">r&#x27;[-\\s]+&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span>, slug).strip(\u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_title_case\u003C/span>(\u003Cspan class=\"hljs-params\">self, text: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Convert text to title case with proper handling of articles.&quot;&quot;&quot;\u003C/span>\n        minor_words = {\u003Cspan class=\"hljs-string\">&#x27;a&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;an&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;and&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;as&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;at&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;but&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;by&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;for&#x27;\u003C/span>, \n                      \u003Cspan class=\"hljs-string\">&#x27;if&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;in&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;nor&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;of&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;on&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;or&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;so&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;the&#x27;\u003C/span>, \n                      \u003Cspan class=\"hljs-string\">&#x27;to&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;up&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;yet&#x27;\u003C/span>}\n        \n        words = text.lower().split()\n        title_words = []\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> i, word \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">enumerate\u003C/span>(words):\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> i == \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-keyword\">or\u003C/span> i == \u003Cspan class=\"hljs-built_in\">len\u003C/span>(words) - \u003Cspan class=\"hljs-number\">1\u003C/span> \u003Cspan class=\"hljs-keyword\">or\u003C/span> word \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> minor_words:\n                word = word.capitalize()\n            title_words.append(word)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>.join(title_words)\n\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTemplateEngine\u003C/span>:\n    \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Advanced Markdown template processing with extensible functionality.&quot;&quot;&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">__init__\u003C/span>(\u003Cspan class=\"hljs-params\">self, template_directory: \u003Cspan class=\"hljs-built_in\">str\u003C/span> = \u003Cspan class=\"hljs-string\">&quot;templates&quot;\u003C/span>\u003C/span>):\n        self.template_dir = Path(template_directory)\n        self.template_cache = {}\n        self.partial_cache = {}\n        self.jinja_env = self._setup_jinja_environment()\n        \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_setup_jinja_environment\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; jinja2.Environment:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Configure Jinja2 environment with Markdown-specific features.&quot;&quot;&quot;\u003C/span>\n        loader = jinja2.FileSystemLoader(self.template_dir)\n        env = jinja2.Environment(\n            loader=loader,\n            trim_blocks=\u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            lstrip_blocks=\u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            keep_trailing_newline=\u003Cspan class=\"hljs-literal\">True\u003C/span>\n        )\n        \n        \u003Cspan class=\"hljs-comment\"># Add custom filters for Markdown processing\u003C/span>\n        env.filters.update({\n            \u003Cspan class=\"hljs-string\">&#x27;markdown_escape&#x27;\u003C/span>: self._escape_markdown,\n            \u003Cspan class=\"hljs-string\">&#x27;code_fence&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span> text, lang=\u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">f&#x27;```\u003Cspan class=\"hljs-subst\">{lang}\u003C/span>\\n\u003Cspan class=\"hljs-subst\">{text}\u003C/span>\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;inline_code&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span> text: \u003Cspan class=\"hljs-string\">f&#x27;`\u003Cspan class=\"hljs-subst\">{text}\u003C/span>`&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;bold&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span> text: \u003Cspan class=\"hljs-string\">f&#x27;**\u003Cspan class=\"hljs-subst\">{text}\u003C/span>**&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;italic&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span> text: \u003Cspan class=\"hljs-string\">f&#x27;*\u003Cspan class=\"hljs-subst\">{text}\u003C/span>*&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;link&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span> text, url: \u003Cspan class=\"hljs-string\">f&#x27;[\u003Cspan class=\"hljs-subst\">{text}\u003C/span>](\u003Cspan class=\"hljs-subst\">{url}\u003C/span>)&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;image&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span> alt, url, title=\u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">f&#x27;![\u003Cspan class=\"hljs-subst\">{alt}\u003C/span>](\u003Cspan class=\"hljs-subst\">{url}\u003C/span>\u003Cspan class=\"hljs-subst\">{\u003Cspan class=\"hljs-string\">f&quot; \\&quot;\u003Cspan class=\"hljs-subst\">{title}\u003C/span>\\&quot;&quot;\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> title \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C/span>}\u003C/span>)&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;heading&#x27;\u003C/span>: \u003Cspan class=\"hljs-keyword\">lambda\u003C/span> text, level=\u003Cspan class=\"hljs-number\">1\u003C/span>: \u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{\u003Cspan class=\"hljs-string\">&quot;#&quot;\u003C/span> * level}\u003C/span> \u003Cspan class=\"hljs-subst\">{text}\u003C/span>&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;bullet_list&#x27;\u003C/span>: self._format_bullet_list,\n            \u003Cspan class=\"hljs-string\">&#x27;numbered_list&#x27;\u003C/span>: self._format_numbered_list,\n            \u003Cspan class=\"hljs-string\">&#x27;table&#x27;\u003C/span>: self._format_table,\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: self._format_frontmatter\n        })\n        \n        \u003Cspan class=\"hljs-comment\"># Add global functions\u003C/span>\n        env.\u003Cspan class=\"hljs-built_in\">globals\u003C/span>.update({\n            \u003Cspan class=\"hljs-string\">&#x27;include_partial&#x27;\u003C/span>: self._include_partial,\n            \u003Cspan class=\"hljs-string\">&#x27;render_template&#x27;\u003C/span>: self._render_nested_template,\n            \u003Cspan class=\"hljs-string\">&#x27;get_metadata&#x27;\u003C/span>: self._get_template_metadata,\n            \u003Cspan class=\"hljs-string\">&#x27;validate_required&#x27;\u003C/span>: self._validate_required_fields\n        })\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> env\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_escape_markdown\u003C/span>(\u003Cspan class=\"hljs-params\">self, text: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Escape special Markdown characters.&quot;&quot;&quot;\u003C/span>\n        escape_chars = \u003Cspan class=\"hljs-string\">r&#x27;\\`*_{}[]()#+-.!&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> char \u003Cspan class=\"hljs-keyword\">in\u003C/span> escape_chars:\n            text = text.replace(char, \u003Cspan class=\"hljs-string\">f&#x27;\\\\\u003Cspan class=\"hljs-subst\">{char}\u003C/span>&#x27;\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> text\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_format_bullet_list\u003C/span>(\u003Cspan class=\"hljs-params\">self, items: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>], indent: \u003Cspan class=\"hljs-built_in\">int\u003C/span> = \u003Cspan class=\"hljs-number\">0\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Format list of items as Markdown bullet list.&quot;&quot;&quot;\u003C/span>\n        prefix = \u003Cspan class=\"hljs-string\">&#x27;  &#x27;\u003C/span> * indent + \u003Cspan class=\"hljs-string\">&#x27;- &#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>.join(\u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{prefix}\u003C/span>\u003Cspan class=\"hljs-subst\">{item}\u003C/span>&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">for\u003C/span> item \u003Cspan class=\"hljs-keyword\">in\u003C/span> items)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_format_numbered_list\u003C/span>(\u003Cspan class=\"hljs-params\">self, items: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>], indent: \u003Cspan class=\"hljs-built_in\">int\u003C/span> = \u003Cspan class=\"hljs-number\">0\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Format list of items as Markdown numbered list.&quot;&quot;&quot;\u003C/span>\n        prefix = \u003Cspan class=\"hljs-string\">&#x27;  &#x27;\u003C/span> * indent\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>.join(\u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{prefix}\u003C/span>\u003Cspan class=\"hljs-subst\">{i+\u003Cspan class=\"hljs-number\">1\u003C/span>}\u003C/span>. \u003Cspan class=\"hljs-subst\">{item}\u003C/span>&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">for\u003C/span> i, item \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">enumerate\u003C/span>(items))\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_format_table\u003C/span>(\u003Cspan class=\"hljs-params\">self, headers: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>], rows: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>]], align: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>] = \u003Cspan class=\"hljs-literal\">None\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Format data as Markdown table.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> headers \u003Cspan class=\"hljs-keyword\">or\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> rows:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Determine column widths\u003C/span>\n        all_rows = [headers] + rows\n        col_widths = [\u003Cspan class=\"hljs-built_in\">max\u003C/span>(\u003Cspan class=\"hljs-built_in\">len\u003C/span>(\u003Cspan class=\"hljs-built_in\">str\u003C/span>(cell)) \u003Cspan class=\"hljs-keyword\">for\u003C/span> cell \u003Cspan class=\"hljs-keyword\">in\u003C/span> col) \u003Cspan class=\"hljs-keyword\">for\u003C/span> col \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">zip\u003C/span>(*all_rows)]\n        \n        \u003Cspan class=\"hljs-comment\"># Create header row\u003C/span>\n        header_row = \u003Cspan class=\"hljs-string\">&#x27;| &#x27;\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27; | &#x27;\u003C/span>.join(h.ljust(w) \u003Cspan class=\"hljs-keyword\">for\u003C/span> h, w \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">zip\u003C/span>(headers, col_widths)) + \u003Cspan class=\"hljs-string\">&#x27; |&#x27;\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Create separator row with alignment\u003C/span>\n        separator_parts = []\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> i, width \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">enumerate\u003C/span>(col_widths):\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> align \u003Cspan class=\"hljs-keyword\">and\u003C/span> i &lt; \u003Cspan class=\"hljs-built_in\">len\u003C/span>(align):\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> align[i] == \u003Cspan class=\"hljs-string\">&#x27;center&#x27;\u003C/span>:\n                    separator_parts.append(\u003Cspan class=\"hljs-string\">&#x27;:&#x27;\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span> * (width - \u003Cspan class=\"hljs-number\">2\u003C/span>) + \u003Cspan class=\"hljs-string\">&#x27;:&#x27;\u003C/span>)\n                \u003Cspan class=\"hljs-keyword\">elif\u003C/span> align[i] == \u003Cspan class=\"hljs-string\">&#x27;right&#x27;\u003C/span>:\n                    separator_parts.append(\u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span> * (width - \u003Cspan class=\"hljs-number\">1\u003C/span>) + \u003Cspan class=\"hljs-string\">&#x27;:&#x27;\u003C/span>)\n                \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n                    separator_parts.append(\u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span> * width)\n            \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n                separator_parts.append(\u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span> * width)\n        \n        separator_row = \u003Cspan class=\"hljs-string\">&#x27;| &#x27;\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27; | &#x27;\u003C/span>.join(separator_parts) + \u003Cspan class=\"hljs-string\">&#x27; |&#x27;\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Create data rows\u003C/span>\n        data_rows = []\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> row \u003Cspan class=\"hljs-keyword\">in\u003C/span> rows:\n            padded_row = [\u003Cspan class=\"hljs-built_in\">str\u003C/span>(cell).ljust(col_widths[i]) \u003Cspan class=\"hljs-keyword\">for\u003C/span> i, cell \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">enumerate\u003C/span>(row)]\n            data_rows.append(\u003Cspan class=\"hljs-string\">&#x27;| &#x27;\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27; | &#x27;\u003C/span>.join(padded_row) + \u003Cspan class=\"hljs-string\">&#x27; |&#x27;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>.join([header_row, separator_row] + data_rows)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_format_frontmatter\u003C/span>(\u003Cspan class=\"hljs-params\">self, metadata: \u003Cspan class=\"hljs-type\">Dict\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>, \u003Cspan class=\"hljs-type\">Any\u003C/span>]\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Format metadata as YAML frontmatter.&quot;&quot;&quot;\u003C/span>\n        yaml_content = yaml.dump(metadata, default_flow_style=\u003Cspan class=\"hljs-literal\">False\u003C/span>, sort_keys=\u003Cspan class=\"hljs-literal\">False\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">f&#x27;---\\n\u003Cspan class=\"hljs-subst\">{yaml_content}\u003C/span>---&#x27;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_include_partial\u003C/span>(\u003Cspan class=\"hljs-params\">self, partial_name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, context: \u003Cspan class=\"hljs-type\">Dict\u003C/span> = \u003Cspan class=\"hljs-literal\">None\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Include and render partial template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> partial_name \u003Cspan class=\"hljs-keyword\">in\u003C/span> self.partial_cache:\n            template = self.partial_cache[partial_name]\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n            partial_path = self.template_dir / \u003Cspan class=\"hljs-string\">&#x27;partials&#x27;\u003C/span> / \u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{partial_name}\u003C/span>.md&#x27;\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> partial_path.exists():\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">f&#x27;&lt;!-- Partial not found: \u003Cspan class=\"hljs-subst\">{partial_name}\u003C/span> --&gt;&#x27;\u003C/span>\n            \n            template = self.jinja_env.get_template(\u003Cspan class=\"hljs-string\">f&#x27;partials/\u003Cspan class=\"hljs-subst\">{partial_name}\u003C/span>.md&#x27;\u003C/span>)\n            self.partial_cache[partial_name] = template\n        \n        render_context = context \u003Cspan class=\"hljs-keyword\">or\u003C/span> {}\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> template.render(**render_context)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_render_nested_template\u003C/span>(\u003Cspan class=\"hljs-params\">self, template_name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, context: \u003Cspan class=\"hljs-type\">Dict\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Render nested template with given context.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span>:\n            template = self.jinja_env.get_template(\u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{template_name}\u003C/span>.md&#x27;\u003C/span>)\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> template.render(**context)\n        \u003Cspan class=\"hljs-keyword\">except\u003C/span> jinja2.TemplateNotFound:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">f&#x27;&lt;!-- Template not found: \u003Cspan class=\"hljs-subst\">{template_name}\u003C/span> --&gt;&#x27;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_get_template_metadata\u003C/span>(\u003Cspan class=\"hljs-params\">self, template_name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Extract metadata from template file.&quot;&quot;&quot;\u003C/span>\n        template_path = self.template_dir / \u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{template_name}\u003C/span>.md&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> template_path.exists():\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> {}\n        \n        content = template_path.read_text()\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> content.startswith(\u003Cspan class=\"hljs-string\">&#x27;---&#x27;\u003C/span>):\n            \u003Cspan class=\"hljs-comment\"># Extract frontmatter\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">try\u003C/span>:\n                _, frontmatter, _ = content.split(\u003Cspan class=\"hljs-string\">&#x27;---&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">2\u003C/span>)\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> yaml.safe_load(frontmatter) \u003Cspan class=\"hljs-keyword\">or\u003C/span> {}\n            \u003Cspan class=\"hljs-keyword\">except\u003C/span> (ValueError, yaml.YAMLError):\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> {}\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {}\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_validate_required_fields\u003C/span>(\u003Cspan class=\"hljs-params\">self, context: \u003Cspan class=\"hljs-type\">Dict\u003C/span>, required: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>]\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">bool\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Validate that required fields are present in context.&quot;&quot;&quot;\u003C/span>\n        missing = [field \u003Cspan class=\"hljs-keyword\">for\u003C/span> field \u003Cspan class=\"hljs-keyword\">in\u003C/span> required \u003Cspan class=\"hljs-keyword\">if\u003C/span> field \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> context]\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> missing:\n            \u003Cspan class=\"hljs-keyword\">raise\u003C/span> ValueError(\u003Cspan class=\"hljs-string\">f&quot;Required fields missing: \u003Cspan class=\"hljs-subst\">{\u003Cspan class=\"hljs-string\">&#x27;, &#x27;\u003C/span>.join(missing)}\u003C/span>&quot;\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">True\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">render_template\u003C/span>(\u003Cspan class=\"hljs-params\">self, template_name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, context: TemplateContext\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Render template with full context and validation.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span>:\n            template = self.jinja_env.get_template(\u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{template_name}\u003C/span>.md&#x27;\u003C/span>)\n            \n            \u003Cspan class=\"hljs-comment\"># Combine all context data\u003C/span>\n            render_context = {\n                **context.variables,\n                **context.metadata,\n                **context.includes,\n                **context.functions\n            }\n            \n            \u003Cspan class=\"hljs-comment\"># Add template-specific metadata\u003C/span>\n            template_metadata = self._get_template_metadata(template_name)\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;required_fields&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> template_metadata:\n                self._validate_required_fields(\n                    render_context, \n                    template_metadata[\u003Cspan class=\"hljs-string\">&#x27;required_fields&#x27;\u003C/span>]\n                )\n            \n            rendered = template.render(**render_context)\n            \n            \u003Cspan class=\"hljs-comment\"># Post-process for Markdown-specific formatting\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> self._post_process_markdown(rendered)\n            \n        \u003Cspan class=\"hljs-keyword\">except\u003C/span> jinja2.TemplateError \u003Cspan class=\"hljs-keyword\">as\u003C/span> e:\n            \u003Cspan class=\"hljs-keyword\">raise\u003C/span> ValueError(\u003Cspan class=\"hljs-string\">f&quot;Template rendering error: \u003Cspan class=\"hljs-subst\">{e}\u003C/span>&quot;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_post_process_markdown\u003C/span>(\u003Cspan class=\"hljs-params\">self, content: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Apply post-processing to rendered Markdown content.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-comment\"># Remove excessive blank lines\u003C/span>\n        content = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;\\n{3,}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;\\n\\n&#x27;\u003C/span>, content)\n        \n        \u003Cspan class=\"hljs-comment\"># Ensure proper spacing around headers\u003C/span>\n        content = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;\\n(#{1,6})&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">r&#x27;\\n\\n\\1&#x27;\u003C/span>, content)\n        content = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;(#{1,6}[^\\n]*)\\n([^#\\n])&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">r&#x27;\\1\\n\\n\\2&#x27;\u003C/span>, content)\n        \n        \u003Cspan class=\"hljs-comment\"># Clean up list formatting\u003C/span>\n        content = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;\\n(\\s*[-*+])&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">r&#x27;\\n\\n\\1&#x27;\u003C/span>, content)\n        content = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;\\n(\\s*\\d+\\.)&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">r&#x27;\\n\\n\\1&#x27;\u003C/span>, content)\n        \n        \u003Cspan class=\"hljs-comment\"># Ensure code blocks have proper spacing\u003C/span>\n        content = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;\\n(```)&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">r&#x27;\\n\\n\\1&#x27;\u003C/span>, content)\n        content = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;(```)\\n([^`])&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">r&#x27;\\1\\n\\n\\2&#x27;\u003C/span>, content)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> content.strip()\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">create_template_from_schema\u003C/span>(\u003Cspan class=\"hljs-params\">self, schema: \u003Cspan class=\"hljs-type\">Dict\u003C/span>, template_name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Generate template file from schema definition.&quot;&quot;&quot;\u003C/span>\n        template_content = self._generate_template_content(schema)\n        \n        template_path = self.template_dir / \u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{template_name}\u003C/span>.md&#x27;\u003C/span>\n        template_path.parent.mkdir(parents=\u003Cspan class=\"hljs-literal\">True\u003C/span>, exist_ok=\u003Cspan class=\"hljs-literal\">True\u003C/span>)\n        template_path.write_text(template_content)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> template_path\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_generate_template_content\u003C/span>(\u003Cspan class=\"hljs-params\">self, schema: \u003Cspan class=\"hljs-type\">Dict\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Generate template content from schema specification.&quot;&quot;&quot;\u003C/span>\n        sections = []\n        \n        \u003Cspan class=\"hljs-comment\"># Add frontmatter if specified\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> schema:\n            frontmatter_vars = []\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> field, config \u003Cspan class=\"hljs-keyword\">in\u003C/span> schema[\u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>].items():\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-built_in\">isinstance\u003C/span>(config, \u003Cspan class=\"hljs-built_in\">dict\u003C/span>):\n                    default = config.get(\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>)\n                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> config.get(\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>, \u003Cspan class=\"hljs-literal\">False\u003C/span>):\n                        frontmatter_vars.append(\u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{field}\u003C/span>: &quot;{{{{ \u003Cspan class=\"hljs-subst\">{field}\u003C/span> }}}}&quot;&#x27;\u003C/span>)\n                    \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n                        frontmatter_vars.append(\u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{field}\u003C/span>: &quot;{{{{ \u003Cspan class=\"hljs-subst\">{field}\u003C/span> | default(\\&#x27;\u003Cspan class=\"hljs-subst\">{default}\u003C/span>\\&#x27;) }}}}&quot;&#x27;\u003C/span>)\n                \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n                    frontmatter_vars.append(\u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{field}\u003C/span>: &quot;{{{{ \u003Cspan class=\"hljs-subst\">{field}\u003C/span> }}}}&quot;&#x27;\u003C/span>)\n            \n            sections.append(\u003Cspan class=\"hljs-string\">&#x27;---\\n&#x27;\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>.join(frontmatter_vars) + \u003Cspan class=\"hljs-string\">&#x27;\\n---&#x27;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-comment\"># Add main content sections\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> schema:\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> section_name, section_config \u003Cspan class=\"hljs-keyword\">in\u003C/span> schema[\u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span>].items():\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-built_in\">isinstance\u003C/span>(section_config, \u003Cspan class=\"hljs-built_in\">dict\u003C/span>):\n                    level = section_config.get(\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">2\u003C/span>)\n                    heading = \u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{\u003Cspan class=\"hljs-string\">&quot;#&quot;\u003C/span> * level}\u003C/span> {{{{ \u003Cspan class=\"hljs-subst\">{section_name}\u003C/span>_title | default(&quot;\u003Cspan class=\"hljs-subst\">{section_name.replace(\u003Cspan class=\"hljs-string\">&quot;_&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot; &quot;\u003C/span>).title()}\u003C/span>&quot;) }}}}&#x27;\u003C/span>\n                    \n                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> section_config.get(\u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>) == \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>:\n                        content = \u003Cspan class=\"hljs-string\">f&#x27;{{%- for item in \u003Cspan class=\"hljs-subst\">{section_name}\u003C/span> %}}\\n- {{{{ item }}}}\\n{{% endfor %}&#x27;\u003C/span>\n                    \u003Cspan class=\"hljs-keyword\">elif\u003C/span> section_config.get(\u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>) == \u003Cspan class=\"hljs-string\">&#x27;table&#x27;\u003C/span>:\n                        content = \u003Cspan class=\"hljs-string\">f&#x27;{{{{ \u003Cspan class=\"hljs-subst\">{section_name}\u003C/span> | table }}}}&#x27;\u003C/span>\n                    \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n                        content = \u003Cspan class=\"hljs-string\">f&#x27;{{{{ \u003Cspan class=\"hljs-subst\">{section_name}\u003C/span> }}}}&#x27;\u003C/span>\n                    \n                    sections.append(\u003Cspan class=\"hljs-string\">f&#x27;\u003Cspan class=\"hljs-subst\">{heading}\u003C/span>\\n\\n\u003Cspan class=\"hljs-subst\">{content}\u003C/span>&#x27;\u003C/span>)\n                \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n                    sections.append(\u003Cspan class=\"hljs-string\">f&#x27;## \u003Cspan class=\"hljs-subst\">{section_name.replace(\u003Cspan class=\"hljs-string\">&quot;_&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot; &quot;\u003C/span>).title()}\u003C/span>\\n\\n{{{{ \u003Cspan class=\"hljs-subst\">{section_name}\u003C/span> }}}}&#x27;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;\\n\\n&#x27;\u003C/span>.join(sections)\n\n\u003Cspan class=\"hljs-comment\"># Template collection for common document types\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">TemplateLibrary\u003C/span>:\n    \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Collection of pre-built templates for common use cases.&quot;&quot;&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">__init__\u003C/span>(\u003Cspan class=\"hljs-params\">self, engine: MarkdownTemplateEngine\u003C/span>):\n        self.engine = engine\n        self.templates = {\n            \u003Cspan class=\"hljs-string\">&#x27;api_documentation&#x27;\u003C/span>: self._api_documentation_schema(),\n            \u003Cspan class=\"hljs-string\">&#x27;technical_tutorial&#x27;\u003C/span>: self._technical_tutorial_schema(),\n            \u003Cspan class=\"hljs-string\">&#x27;meeting_notes&#x27;\u003C/span>: self._meeting_notes_schema(),\n            \u003Cspan class=\"hljs-string\">&#x27;project_readme&#x27;\u003C/span>: self._project_readme_schema(),\n            \u003Cspan class=\"hljs-string\">&#x27;bug_report&#x27;\u003C/span>: self._bug_report_schema(),\n            \u003Cspan class=\"hljs-string\">&#x27;feature_proposal&#x27;\u003C/span>: self._feature_proposal_schema(),\n            \u003Cspan class=\"hljs-string\">&#x27;code_review&#x27;\u003C/span>: self._code_review_schema(),\n            \u003Cspan class=\"hljs-string\">&#x27;release_notes&#x27;\u003C/span>: self._release_notes_schema()\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_api_documentation_schema\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Schema for API documentation template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;version&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;1.0.0&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;description&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;base_url&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>}\n            },\n            \u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;overview&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;authentication&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;endpoints&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;custom&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;error_codes&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;table&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;examples&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;sdk_information&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>}\n            }\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_technical_tutorial_schema\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Schema for technical tutorial template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;difficulty&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;intermediate&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;estimated_time&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;prerequisites&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>}\n            },\n            \u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;overview&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;prerequisites&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;objectives&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;step_by_step_guide&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;verification&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;troubleshooting&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;next_steps&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>}\n            }\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_meeting_notes_schema\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Schema for meeting notes template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;meeting_title&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;date&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;{{ today() }}&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;facilitator&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;note_taker&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;{{ author }}&#x27;\u003C/span>}\n            },\n            \u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;attendees&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;agenda&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;discussion_notes&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;action_items&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;decisions_made&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;next_meeting&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>}\n            }\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_project_readme_schema\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Schema for project README template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;project_name&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;version&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;0.1.0&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;description&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;license&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;MIT&#x27;\u003C/span>}\n            },\n            \u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;description&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;installation&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;usage&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;api_reference&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;contributing&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;license&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;changelog&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>}\n            }\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_bug_report_schema\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Schema for bug report template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;severity&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;medium&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;component&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;reported_by&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;{{ author }}&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;date&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;{{ today() }}&#x27;\u003C/span>}\n            },\n            \u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;description&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;steps_to_reproduce&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;expected_behavior&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;actual_behavior&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;environment&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;additional_information&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>}\n            }\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_feature_proposal_schema\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Schema for feature proposal template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;priority&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;medium&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;proposed_by&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;{{ author }}&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;date&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;{{ today() }}&#x27;\u003C/span>}\n            },\n            \u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;summary&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;motivation&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;detailed_design&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;implementation_plan&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;testing_strategy&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;risks_and_considerations&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;alternatives_considered&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>}\n            }\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_code_review_schema\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Schema for code review template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;pull_request&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;reviewer&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;{{ author }}&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;date&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;{{ today() }}&#x27;\u003C/span>}\n            },\n            \u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;summary&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;code_quality&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;security_considerations&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;performance_impact&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;testing_coverage&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;documentation_updates&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;recommendations&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>}\n            }\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">_release_notes_schema\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Schema for release notes template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;version&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;required&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;release_date&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;{{ today() }}&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;minor&#x27;\u003C/span>}\n            },\n            \u003Cspan class=\"hljs-string\">&#x27;sections&#x27;\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;overview&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;new_features&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;improvements&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;bug_fixes&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;breaking_changes&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;migration_guide&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>},\n                \u003Cspan class=\"hljs-string\">&#x27;known_issues&#x27;\u003C/span>: {\u003Cspan class=\"hljs-string\">&#x27;heading_level&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>}\n            }\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">create_template\u003C/span>(\u003Cspan class=\"hljs-params\">self, template_type: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, template_name: \u003Cspan class=\"hljs-built_in\">str\u003C/span> = \u003Cspan class=\"hljs-literal\">None\u003C/span>\u003C/span>) -&gt; Path:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Create a new template file from predefined schemas.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> template_type \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> self.templates:\n            \u003Cspan class=\"hljs-keyword\">raise\u003C/span> ValueError(\u003Cspan class=\"hljs-string\">f&quot;Unknown template type: \u003Cspan class=\"hljs-subst\">{template_type}\u003C/span>&quot;\u003C/span>)\n        \n        name = template_name \u003Cspan class=\"hljs-keyword\">or\u003C/span> template_type\n        schema = self.templates[template_type]\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> self.engine.create_template_from_schema(schema, name)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">render_document\u003C/span>(\u003Cspan class=\"hljs-params\">self, template_type: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, variables: \u003Cspan class=\"hljs-type\">Dict\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Render a document using predefined template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> template_type \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> self.templates:\n            \u003Cspan class=\"hljs-keyword\">raise\u003C/span> ValueError(\u003Cspan class=\"hljs-string\">f&quot;Unknown template type: \u003Cspan class=\"hljs-subst\">{template_type}\u003C/span>&quot;\u003C/span>)\n        \n        context = TemplateContext(variables=variables)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> self.engine.render_template(template_type, context)\n\u003C/code>\u003C/pre>\u003Ch2 id=\"automation-pipeline-integration\">Automation Pipeline Integration\u003C/h2>\n\u003Ch3 id=\"continuous-integration-template-generation\">Continuous Integration Template Generation\u003C/h3>\n\u003Cp>Implementing automated template processing in CI/CD workflows:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-comment\"># .github/workflows/template-automation.yml - GitHub Actions workflow\u003C/span>\n\u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Markdown\u003C/span> \u003Cspan class=\"hljs-string\">Template\u003C/span> \u003Cspan class=\"hljs-string\">Automation\u003C/span>\n\n\u003Cspan class=\"hljs-attr\">on:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">push:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">paths:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;content/templates/**&#x27;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;data/**&#x27;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">pull_request:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">paths:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;content/templates/**&#x27;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;data/**&#x27;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">workflow_dispatch:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">inputs:\u003C/span>\n      \u003Cspan class=\"hljs-attr\">template_type:\u003C/span>\n        \u003Cspan class=\"hljs-attr\">description:\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;Template type to generate&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-attr\">required:\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span>\n        \u003Cspan class=\"hljs-attr\">type:\u003C/span> \u003Cspan class=\"hljs-string\">choice\u003C/span>\n        \u003Cspan class=\"hljs-attr\">options:\u003C/span>\n          \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">api_documentation\u003C/span>\n          \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">technical_tutorial\u003C/span>\n          \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">meeting_notes\u003C/span>\n          \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">project_readme\u003C/span>\n      \u003Cspan class=\"hljs-attr\">output_path:\u003C/span>\n        \u003Cspan class=\"hljs-attr\">description:\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;Output path for generated document&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-attr\">required:\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span>\n        \u003Cspan class=\"hljs-attr\">type:\u003C/span> \u003Cspan class=\"hljs-string\">string\u003C/span>\n\n\u003Cspan class=\"hljs-attr\">jobs:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">template-validation:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">runs-on:\u003C/span> \u003Cspan class=\"hljs-string\">ubuntu-latest\u003C/span>\n    \u003Cspan class=\"hljs-attr\">steps:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Checkout\u003C/span> \u003Cspan class=\"hljs-string\">repository\u003C/span>\n        \u003Cspan class=\"hljs-attr\">uses:\u003C/span> \u003Cspan class=\"hljs-string\">actions/checkout@v4\u003C/span>\n      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Set\u003C/span> \u003Cspan class=\"hljs-string\">up\u003C/span> \u003Cspan class=\"hljs-string\">Python\u003C/span>\n        \u003Cspan class=\"hljs-attr\">uses:\u003C/span> \u003Cspan class=\"hljs-string\">actions/setup-python@v4\u003C/span>\n        \u003Cspan class=\"hljs-attr\">with:\u003C/span>\n          \u003Cspan class=\"hljs-attr\">python-version:\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;3.11&#x27;\u003C/span>\n      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Install\u003C/span> \u003Cspan class=\"hljs-string\">dependencies\u003C/span>\n        \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n          pip install -r requirements.txt\n          pip install pyyaml jinja2 markdown\n\u003C/span>      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Validate\u003C/span> \u003Cspan class=\"hljs-string\">template\u003C/span> \u003Cspan class=\"hljs-string\">syntax\u003C/span>\n        \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n          python scripts/validate_templates.py\n\u003C/span>      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Test\u003C/span> \u003Cspan class=\"hljs-string\">template\u003C/span> \u003Cspan class=\"hljs-string\">rendering\u003C/span>\n        \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n          python scripts/test_template_rendering.py\n\u003C/span>\n  \u003Cspan class=\"hljs-attr\">auto-generate-docs:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">runs-on:\u003C/span> \u003Cspan class=\"hljs-string\">ubuntu-latest\u003C/span>\n    \u003Cspan class=\"hljs-attr\">if:\u003C/span> \u003Cspan class=\"hljs-string\">github.event_name\u003C/span> \u003Cspan class=\"hljs-string\">==\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;workflow_dispatch&#x27;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">needs:\u003C/span> \u003Cspan class=\"hljs-string\">template-validation\u003C/span>\n    \u003Cspan class=\"hljs-attr\">steps:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Checkout\u003C/span> \u003Cspan class=\"hljs-string\">repository\u003C/span>\n        \u003Cspan class=\"hljs-attr\">uses:\u003C/span> \u003Cspan class=\"hljs-string\">actions/checkout@v4\u003C/span>\n      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Set\u003C/span> \u003Cspan class=\"hljs-string\">up\u003C/span> \u003Cspan class=\"hljs-string\">Python\u003C/span>\n        \u003Cspan class=\"hljs-attr\">uses:\u003C/span> \u003Cspan class=\"hljs-string\">actions/setup-python@v4\u003C/span>\n        \u003Cspan class=\"hljs-attr\">with:\u003C/span>\n          \u003Cspan class=\"hljs-attr\">python-version:\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;3.11&#x27;\u003C/span>\n      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Install\u003C/span> \u003Cspan class=\"hljs-string\">dependencies\u003C/span>\n        \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n          pip install -r requirements.txt\n\u003C/span>      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Generate\u003C/span> \u003Cspan class=\"hljs-string\">document\u003C/span> \u003Cspan class=\"hljs-string\">from\u003C/span> \u003Cspan class=\"hljs-string\">template\u003C/span>\n        \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n          python scripts/generate_document.py \\\n            --template-type &quot;${{ github.event.inputs.template_type }}&quot; \\\n            --output-path &quot;${{ github.event.inputs.output_path }}&quot; \\\n            --auto-populate\n\u003C/span>      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Commit\u003C/span> \u003Cspan class=\"hljs-string\">generated\u003C/span> \u003Cspan class=\"hljs-string\">document\u003C/span>\n        \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n          git config --local user.email &quot;action@github.com&quot;\n          git config --local user.name &quot;GitHub Action&quot;\n          git add &quot;${{ github.event.inputs.output_path }}&quot;\n          git commit -m &quot;Auto-generate ${{ github.event.inputs.template_type }} documentation&quot;\n          git push\n\u003C/span>\n  \u003Cspan class=\"hljs-attr\">scheduled-updates:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">runs-on:\u003C/span> \u003Cspan class=\"hljs-string\">ubuntu-latest\u003C/span>\n    \u003Cspan class=\"hljs-attr\">if:\u003C/span> \u003Cspan class=\"hljs-string\">github.event_name\u003C/span> \u003Cspan class=\"hljs-string\">==\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;schedule&#x27;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">steps:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Checkout\u003C/span> \u003Cspan class=\"hljs-string\">repository\u003C/span>\n        \u003Cspan class=\"hljs-attr\">uses:\u003C/span> \u003Cspan class=\"hljs-string\">actions/checkout@v4\u003C/span>\n      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Set\u003C/span> \u003Cspan class=\"hljs-string\">up\u003C/span> \u003Cspan class=\"hljs-string\">Python\u003C/span>\n        \u003Cspan class=\"hljs-attr\">uses:\u003C/span> \u003Cspan class=\"hljs-string\">actions/setup-python@v4\u003C/span>\n        \u003Cspan class=\"hljs-attr\">with:\u003C/span>\n          \u003Cspan class=\"hljs-attr\">python-version:\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;3.11&#x27;\u003C/span>\n      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Install\u003C/span> \u003Cspan class=\"hljs-string\">dependencies\u003C/span>\n        \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n          pip install -r requirements.txt\n\u003C/span>      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Update\u003C/span> \u003Cspan class=\"hljs-string\">dynamic\u003C/span> \u003Cspan class=\"hljs-string\">content\u003C/span>\n        \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n          python scripts/update_dynamic_content.py\n\u003C/span>      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Regenerate\u003C/span> \u003Cspan class=\"hljs-string\">template-based\u003C/span> \u003Cspan class=\"hljs-string\">documents\u003C/span>\n        \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n          python scripts/regenerate_all_templates.py\n\u003C/span>      \n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Create\u003C/span> \u003Cspan class=\"hljs-string\">pull\u003C/span> \u003Cspan class=\"hljs-string\">request\u003C/span> \u003Cspan class=\"hljs-string\">with\u003C/span> \u003Cspan class=\"hljs-string\">updates\u003C/span>\n        \u003Cspan class=\"hljs-attr\">uses:\u003C/span> \u003Cspan class=\"hljs-string\">peter-evans/create-pull-request@v5\u003C/span>\n        \u003Cspan class=\"hljs-attr\">with:\u003C/span>\n          \u003Cspan class=\"hljs-attr\">title:\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;Automated template content updates&#x27;\u003C/span>\n          \u003Cspan class=\"hljs-attr\">body:\u003C/span> \u003Cspan class=\"hljs-string\">|\n            Automated updates to template-generated content:\n\u003C/span>            \n            \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">Updated\u003C/span> \u003Cspan class=\"hljs-string\">dynamic\u003C/span> \u003Cspan class=\"hljs-string\">content\u003C/span> \u003Cspan class=\"hljs-string\">(dates,\u003C/span> \u003Cspan class=\"hljs-string\">versions,\u003C/span> \u003Cspan class=\"hljs-string\">etc.)\u003C/span>\n            \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">Regenerated\u003C/span> \u003Cspan class=\"hljs-string\">template-based\u003C/span> \u003Cspan class=\"hljs-string\">documentation\u003C/span>\n            \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">Applied\u003C/span> \u003Cspan class=\"hljs-string\">latest\u003C/span> \u003Cspan class=\"hljs-string\">template\u003C/span> \u003Cspan class=\"hljs-string\">formatting\u003C/span>\n          \u003Cspan class=\"hljs-attr\">branch:\u003C/span> \u003Cspan class=\"hljs-string\">auto-template-updates\u003C/span>\n          \u003Cspan class=\"hljs-attr\">delete-branch:\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"build-system-integration\">Build System Integration\u003C/h3>\n\u003Cp>Connecting template automation with modern build tools:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// vite.config.js - Vite integration for template processing\u003C/span>\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> { defineConfig } \u003Cspan class=\"hljs-keyword\">from\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;vite&#x27;\u003C/span>;\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> { spawn } \u003Cspan class=\"hljs-keyword\">from\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;child_process&#x27;\u003C/span>;\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> { existsSync, readFileSync, writeFileSync } \u003Cspan class=\"hljs-keyword\">from\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>;\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> { join } \u003Cspan class=\"hljs-keyword\">from\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>;\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> yaml \u003Cspan class=\"hljs-keyword\">from\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;js-yaml&#x27;\u003C/span>;\n\n\u003Cspan class=\"hljs-comment\">// Custom Vite plugin for Markdown template processing\u003C/span>\n\u003Cspan class=\"hljs-keyword\">function\u003C/span> \u003Cspan class=\"hljs-title function_\">markdownTemplatePlugin\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n  \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n    \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;markdown-template-processor&#x27;\u003C/span>,\n    \u003Cspan class=\"hljs-title function_\">buildStart\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n      \u003Cspan class=\"hljs-comment\">// Process templates on build start\u003C/span>\n      \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addWatchFile\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;templates/**/*.md&#x27;\u003C/span>);\n      \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addWatchFile\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;data/**/*.{yml,yaml,json}&#x27;\u003C/span>);\n    },\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">generateBundle\u003C/span>(\u003Cspan class=\"hljs-params\">options, bundle\u003C/span>) {\n      \u003Cspan class=\"hljs-comment\">// Generate documents from templates during build\u003C/span>\n      \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title function_\">processTemplates\u003C/span>();\n    },\n    \n    \u003Cspan class=\"hljs-title function_\">handleHotUpdate\u003C/span>(\u003Cspan class=\"hljs-params\">{ file, server }\u003C/span>) {\n      \u003Cspan class=\"hljs-keyword\">if\u003C/span> (file.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;/templates/&#x27;\u003C/span>) || file.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;/data/&#x27;\u003C/span>)) {\n        \u003Cspan class=\"hljs-comment\">// Regenerate templates on hot reload\u003C/span>\n        \u003Cspan class=\"hljs-title function_\">processTemplates\u003C/span>().\u003Cspan class=\"hljs-title function_\">then\u003C/span>(\u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> {\n          server.\u003Cspan class=\"hljs-property\">ws\u003C/span>.\u003Cspan class=\"hljs-title function_\">send\u003C/span>({\n            \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;full-reload&#x27;\u003C/span>\n          });\n        });\n      }\n    }\n  };\n}\n\n\u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-keyword\">function\u003C/span> \u003Cspan class=\"hljs-title function_\">processTemplates\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n  \u003Cspan class=\"hljs-keyword\">const\u003C/span> templateEngine = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTemplateEngine\u003C/span>();\n  \u003Cspan class=\"hljs-keyword\">const\u003C/span> dataFiles = [\u003Cspan class=\"hljs-string\">&#x27;data/config.yml&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;data/content.yml&#x27;\u003C/span>];\n  \n  \u003Cspan class=\"hljs-comment\">// Load data sources\u003C/span>\n  \u003Cspan class=\"hljs-keyword\">const\u003C/span> data = {};\n  \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> file \u003Cspan class=\"hljs-keyword\">of\u003C/span> dataFiles) {\n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-title function_\">existsSync\u003C/span>(file)) {\n      \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = \u003Cspan class=\"hljs-title function_\">readFileSync\u003C/span>(file, \u003Cspan class=\"hljs-string\">&#x27;utf8&#x27;\u003C/span>);\n      \u003Cspan class=\"hljs-keyword\">const\u003C/span> parsed = yaml.\u003Cspan class=\"hljs-title function_\">load\u003C/span>(content);\n      \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">assign\u003C/span>(data, parsed);\n    }\n  }\n  \n  \u003Cspan class=\"hljs-comment\">// Process each template\u003C/span>\n  \u003Cspan class=\"hljs-keyword\">const\u003C/span> templates = [\u003Cspan class=\"hljs-string\">&#x27;api-docs&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;user-guide&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;contributing&#x27;\u003C/span>];\n  \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> template \u003Cspan class=\"hljs-keyword\">of\u003C/span> templates) {\n    \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n      \u003Cspan class=\"hljs-keyword\">const\u003C/span> rendered = \u003Cspan class=\"hljs-keyword\">await\u003C/span> templateEngine.\u003Cspan class=\"hljs-title function_\">render\u003C/span>(template, data);\n      \u003Cspan class=\"hljs-keyword\">const\u003C/span> outputPath = \u003Cspan class=\"hljs-string\">`docs/\u003Cspan class=\"hljs-subst\">${template}\u003C/span>.md`\u003C/span>;\n      \u003Cspan class=\"hljs-title function_\">writeFileSync\u003C/span>(outputPath, rendered);\n      \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Generated: \u003Cspan class=\"hljs-subst\">${outputPath}\u003C/span>`\u003C/span>);\n    } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n      \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">error\u003C/span>(\u003Cspan class=\"hljs-string\">`Failed to process template \u003Cspan class=\"hljs-subst\">${template}\u003C/span>:`\u003C/span>, error);\n    }\n  }\n}\n\n\u003Cspan class=\"hljs-comment\">// webpack.config.js - Webpack integration alternative\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> path = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> { execSync } = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;child_process&#x27;\u003C/span>);\n\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTemplateWebpackPlugin\u003C/span> {\n  \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">options = {}\u003C/span>) {\n    \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span> = {\n      \u003Cspan class=\"hljs-attr\">templateDir\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;templates&#x27;\u003C/span>,\n      \u003Cspan class=\"hljs-attr\">outputDir\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;dist/docs&#x27;\u003C/span>,\n      \u003Cspan class=\"hljs-attr\">dataFiles\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;data/**/*.{yml,yaml,json}&#x27;\u003C/span>],\n      ...options\n    };\n  }\n  \n  \u003Cspan class=\"hljs-title function_\">apply\u003C/span>(\u003Cspan class=\"hljs-params\">compiler\u003C/span>) {\n    compiler.\u003Cspan class=\"hljs-property\">hooks\u003C/span>.\u003Cspan class=\"hljs-property\">beforeRun\u003C/span>.\u003Cspan class=\"hljs-title function_\">tapPromise\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;MarkdownTemplateWebpackPlugin&#x27;\u003C/span>, \u003Cspan class=\"hljs-keyword\">async\u003C/span> () =&gt; {\n      \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processTemplates\u003C/span>();\n    });\n    \n    compiler.\u003Cspan class=\"hljs-property\">hooks\u003C/span>.\u003Cspan class=\"hljs-property\">watchRun\u003C/span>.\u003Cspan class=\"hljs-title function_\">tapPromise\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;MarkdownTemplateWebpackPlugin&#x27;\u003C/span>, \u003Cspan class=\"hljs-keyword\">async\u003C/span> () =&gt; {\n      \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processTemplates\u003C/span>();\n    });\n  }\n  \n  \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">processTemplates\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n    \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n      \u003Cspan class=\"hljs-title function_\">execSync\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;python scripts/process_templates.py&#x27;\u003C/span>, {\n        \u003Cspan class=\"hljs-attr\">cwd\u003C/span>: compiler.\u003Cspan class=\"hljs-property\">context\u003C/span>,\n        \u003Cspan class=\"hljs-attr\">stdio\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;inherit&#x27;\u003C/span>\n      });\n    } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n      \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">error\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Template processing failed:&#x27;\u003C/span>, error);\n    }\n  }\n}\n\n\u003Cspan class=\"hljs-variable language_\">module\u003C/span>.\u003Cspan class=\"hljs-property\">exports\u003C/span> = {\n  \u003Cspan class=\"hljs-attr\">entry\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;./src/index.js&#x27;\u003C/span>,\n  \u003Cspan class=\"hljs-attr\">output\u003C/span>: {\n    \u003Cspan class=\"hljs-attr\">path\u003C/span>: path.\u003Cspan class=\"hljs-title function_\">resolve\u003C/span>(__dirname, \u003Cspan class=\"hljs-string\">&#x27;dist&#x27;\u003C/span>),\n    \u003Cspan class=\"hljs-attr\">filename\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;bundle.js&#x27;\u003C/span>\n  },\n  \u003Cspan class=\"hljs-attr\">plugins\u003C/span>: [\n    \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTemplateWebpackPlugin\u003C/span>({\n      \u003Cspan class=\"hljs-attr\">templateDir\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;content/templates&#x27;\u003C/span>,\n      \u003Cspan class=\"hljs-attr\">outputDir\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;dist/documentation&#x27;\u003C/span>\n    })\n  ]\n};\n\n\u003Cspan class=\"hljs-comment\">// gulp integration\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> gulp = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;gulp&#x27;\u003C/span>);\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> through2 = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;through2&#x27;\u003C/span>);\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> yaml = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;js-yaml&#x27;\u003C/span>);\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> \u003Cspan class=\"hljs-title class_\">Vinyl\u003C/span> = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;vinyl&#x27;\u003C/span>);\n\n\u003Cspan class=\"hljs-keyword\">function\u003C/span> \u003Cspan class=\"hljs-title function_\">templateProcessor\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n  \u003Cspan class=\"hljs-keyword\">const\u003C/span> templateEngine = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTemplateEngine\u003C/span>();\n  \n  \u003Cspan class=\"hljs-keyword\">return\u003C/span> through2.\u003Cspan class=\"hljs-title function_\">obj\u003C/span>(\u003Cspan class=\"hljs-keyword\">function\u003C/span>(\u003Cspan class=\"hljs-params\">file, enc, cb\u003C/span>) {\n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (file.\u003Cspan class=\"hljs-title function_\">isNull\u003C/span>()) {\n      \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title function_\">cb\u003C/span>(\u003Cspan class=\"hljs-literal\">null\u003C/span>, file);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (file.\u003Cspan class=\"hljs-title function_\">isStream\u003C/span>()) {\n      \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title function_\">cb\u003C/span>(\u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Streaming not supported&#x27;\u003C/span>));\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n      \u003Cspan class=\"hljs-comment\">// Extract frontmatter and template variables\u003C/span>\n      \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = file.\u003Cspan class=\"hljs-property\">contents\u003C/span>.\u003Cspan class=\"hljs-title function_\">toString\u003C/span>();\n      \u003Cspan class=\"hljs-keyword\">const\u003C/span> { data, \u003Cspan class=\"hljs-attr\">content\u003C/span>: body } = \u003Cspan class=\"hljs-title function_\">parseFrontmatter\u003C/span>(content);\n      \n      \u003Cspan class=\"hljs-comment\">// Render template with data\u003C/span>\n      \u003Cspan class=\"hljs-keyword\">const\u003C/span> rendered = templateEngine.\u003Cspan class=\"hljs-title function_\">renderString\u003C/span>(body, data);\n      \n      \u003Cspan class=\"hljs-comment\">// Create new file with rendered content\u003C/span>\n      \u003Cspan class=\"hljs-keyword\">const\u003C/span> newFile = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Vinyl\u003C/span>({\n        \u003Cspan class=\"hljs-attr\">path\u003C/span>: file.\u003Cspan class=\"hljs-property\">path\u003C/span>.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\.template\\.md$/\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;.md&#x27;\u003C/span>),\n        \u003Cspan class=\"hljs-attr\">contents\u003C/span>: \u003Cspan class=\"hljs-title class_\">Buffer\u003C/span>.\u003Cspan class=\"hljs-title function_\">from\u003C/span>(rendered)\n      });\n      \n      \u003Cspan class=\"hljs-title function_\">cb\u003C/span>(\u003Cspan class=\"hljs-literal\">null\u003C/span>, newFile);\n    } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n      \u003Cspan class=\"hljs-title function_\">cb\u003C/span>(\u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Template processing failed: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>));\n    }\n  });\n}\n\ngulp.\u003Cspan class=\"hljs-title function_\">task\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;process-templates&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> {\n  \u003Cspan class=\"hljs-keyword\">return\u003C/span> gulp.\u003Cspan class=\"hljs-title function_\">src\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;src/**/*.template.md&#x27;\u003C/span>)\n    .\u003Cspan class=\"hljs-title function_\">pipe\u003C/span>(\u003Cspan class=\"hljs-title function_\">templateProcessor\u003C/span>())\n    .\u003Cspan class=\"hljs-title function_\">pipe\u003C/span>(gulp.\u003Cspan class=\"hljs-title function_\">dest\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;dist/&#x27;\u003C/span>));\n});\n\ngulp.\u003Cspan class=\"hljs-title function_\">task\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;watch-templates&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> {\n  gulp.\u003Cspan class=\"hljs-title function_\">watch\u003C/span>([\u003Cspan class=\"hljs-string\">&#x27;src/**/*.template.md&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;data/**/*.yml&#x27;\u003C/span>], gulp.\u003Cspan class=\"hljs-title function_\">series\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;process-templates&#x27;\u003C/span>));\n});\n\u003C/code>\u003C/pre>\u003Ch2 id=\"advanced-template-techniques\">Advanced Template Techniques\u003C/h2>\n\u003Ch3 id=\"conditional-content-generation\">Conditional Content Generation\u003C/h3>\n\u003Cp>Implementing sophisticated conditional logic in templates:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-jinja2\">{# conditional-template.md - Advanced conditional content #}\n---\ntitle: &quot;{{ title }}&quot;\ntype: &quot;{{ document_type | default(&#39;general&#39;) }}&quot;\naudience: &quot;{{ target_audience | default(&#39;general&#39;) }}&quot;\n---\n\n# {{ title }}\n\n{% if document_type == &#39;api&#39; %}\n## API Overview\n\n{{ api_description }}\n\n### Authentication\n{% if auth_required %}\nThis API requires authentication. Supported methods:\n{% for method in auth_methods %}\n- **{{ method.name }}**: {{ method.description }}\n{% endfor %}\n{% else %}\nThis API does not require authentication.\n{% endif %}\n\n### Base URL\n\u003C/code>\u003C/pre>\u003Cp>{{ base_url | default(&#39;\u003Ca href=\"https://api.example.com\">https://api.example.com\u003C/a>&#39;) }}\u003C/p>\n\u003Cpre>\u003Ccode>\n### Rate Limiting\n{% if rate_limiting %}\n- **Requests per minute**: {{ rate_limiting.per_minute | default(60) }}\n- **Requests per hour**: {{ rate_limiting.per_hour | default(1000) }}\n{% endif %}\n\n{% elif document_type == &#39;tutorial&#39; %}\n## Tutorial: {{ title }}\n\n**Difficulty**: {{ difficulty | default(&#39;Intermediate&#39;) }}  \n**Estimated Time**: {{ estimated_time | default(&#39;30 minutes&#39;) }}\n\n### Prerequisites\n{% if prerequisites %}\nBefore starting this tutorial, ensure you have:\n{% for prereq in prerequisites %}\n- {{ prereq }}\n{% endfor %}\n{% else %}\nNo specific prerequisites required.\n{% endif %}\n\n### Learning Objectives\nAfter completing this tutorial, you will be able to:\n{% for objective in objectives %}\n- {{ objective }}\n{% endfor %}\n\n{% elif document_type == &#39;reference&#39; %}\n## Reference Documentation\n\n{% if sections %}\n### Quick Navigation\n{% for section in sections %}\n- [{{ section.title }}](#{{ section.title | slugify }})\n{% endfor %}\n{% endif %}\n\n{% else %}\n## {{ title }}\n\n{{ description | default(&#39;Document description not provided.&#39;) }}\n{% endif %}\n\n{% if target_audience == &#39;developer&#39; %}\n## Developer Notes\n\n### Code Examples\n{% if code_examples %}\n{% for example in code_examples %}\n#### {{ example.title }}\n\n```{{ example.language | default(&#39;text&#39;) }}\n{{ example.code }}\n\u003C/code>\u003C/pre>\u003Cp>{% if example.explanation %}\u003Cbr>{{ example.explanation }}\u003Cbr>{% endif %}\u003Cbr>{% endfor %}\u003Cbr>{% endif %}\u003C/p>\n\u003Ch3 id=\"technical-requirements\">Technical Requirements\u003C/h3>\n\u003Cp>{% if technical_requirements %}\u003Cbr>{% for req in technical_requirements %}\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>{{ req.name }}\u003C/strong>: {{ req.version }} {% if req.optional %}(optional){% endif %}\u003Cbr>{% endfor %}\u003Cbr>{% endif %}\u003C/li>\n\u003C/ul>\n\u003Cp>{% elif target_audience == &#39;business&#39; %}\u003C/p>\n\u003Ch2 id=\"business-overview\">Business Overview\u003C/h2>\n\u003Ch3 id=\"key-benefits\">Key Benefits\u003C/h3>\n\u003Cp>{% if benefits %}\u003Cbr>{% for benefit in benefits %}\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>{{ benefit.title }}\u003C/strong>: {{ benefit.description }}\u003Cbr>{% endfor %}\u003Cbr>{% endif %}\u003C/li>\n\u003C/ul>\n\u003Ch3 id=\"impact-assessment\">Impact Assessment\u003C/h3>\n\u003Cp>{% if impact %}\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Cost Savings\u003C/strong>: {{ impact.cost_savings | default(&#39;To be determined&#39;) }}\u003C/li>\n\u003Cli>\u003Cstrong>Time Savings\u003C/strong>: {{ impact.time_savings | default(&#39;To be determined&#39;) }}\u003C/li>\n\u003Cli>\u003Cstrong>Efficiency Gain\u003C/strong>: {{ impact.efficiency_gain | default(&#39;To be determined&#39;) }}\u003Cbr>{% endif %}\u003C/li>\n\u003C/ul>\n\u003Cp>{% endif %}\u003C/p>\n\u003Ch2 id=\"additional-information\">Additional Information\u003C/h2>\n\u003Cp>{% if related_documents %}\u003C/p>\n\u003Ch3 id=\"related-documentation\">Related Documentation\u003C/h3>\n\u003Cp>{% for doc in related_documents %}\u003C/p>\n\u003Cul>\n\u003Cli>[{{ doc.title }}]({{ doc.url }})\u003Cbr>{% endfor %}\u003Cbr>{% endif %}\u003C/li>\n\u003C/ul>\n\u003Cp>{% if contact_info %}\u003C/p>\n\u003Ch3 id=\"contact-information\">Contact Information\u003C/h3>\n\u003Cp>{% if contact_info.email %}\u003Cbr>\u003Cstrong>Email\u003C/strong>: [{{ contact_info.email }}](mailto:{{ contact_info.email }})\u003Cbr>{% endif %}\u003Cbr>{% if contact_info.slack %}\u003Cbr>\u003Cstrong>Slack\u003C/strong>: {{ contact_info.slack }}\u003Cbr>{% endif %}\u003Cbr>{% if contact_info.team %}\u003Cbr>\u003Cstrong>Team\u003C/strong>: {{ contact_info.team }}\u003Cbr>{% endif %}\u003Cbr>{% endif %}\u003C/p>\n\u003Chr>\n\u003Cp>{% if auto_generated %}\u003Cbr>\u003Cem>This document was automatically generated from template on {{ generation_date | default(now()) }}.\u003C/em>\u003Cbr>{% endif %}\u003C/p>\n\u003Cpre>\u003Ccode>\n\n### Dynamic Content Integration\n\nConnecting templates with external data sources and APIs:\n\n```python\n# dynamic_content_integrator.py - External data integration\nimport requests\nimport json\nfrom datetime import datetime, timedelta\nfrom typing import Dict, List, Any\nimport asyncio\nimport aiohttp\nfrom pathlib import Path\nimport sqlite3\n\nclass DynamicContentProvider:\n    &quot;&quot;&quot;Integrate external data sources into template rendering.&quot;&quot;&quot;\n    \n    def __init__(self, config_file: str = &quot;content_sources.json&quot;):\n        self.config = self._load_config(config_file)\n        self.cache = {}\n        self.cache_ttl = {}\n        \n    def _load_config(self, config_file: str) -&gt; Dict:\n        &quot;&quot;&quot;Load configuration for external data sources.&quot;&quot;&quot;\n        try:\n            with open(config_file, &#39;r&#39;) as f:\n                return json.load(f)\n        except FileNotFoundError:\n            return {\n                &quot;sources&quot;: {},\n                &quot;cache_duration&quot;: 3600,  # 1 hour default\n                &quot;retry_attempts&quot;: 3\n            }\n    \n    async def fetch_github_data(self, repo: str) -&gt; Dict:\n        &quot;&quot;&quot;Fetch repository data from GitHub API.&quot;&quot;&quot;\n        cache_key = f&quot;github_{repo}&quot;\n        \n        if self._is_cached(cache_key):\n            return self.cache[cache_key]\n        \n        try:\n            async with aiohttp.ClientSession() as session:\n                # Get repository information\n                repo_url = f&quot;https://api.github.com/repos/{repo}&quot;\n                async with session.get(repo_url) as response:\n                    repo_data = await response.json()\n                \n                # Get latest releases\n                releases_url = f&quot;https://api.github.com/repos/{repo}/releases&quot;\n                async with session.get(releases_url) as response:\n                    releases = await response.json()\n                \n                # Get contributors\n                contributors_url = f&quot;https://api.github.com/repos/{repo}/contributors&quot;\n                async with session.get(contributors_url) as response:\n                    contributors = await response.json()\n                \n                data = {\n                    &#39;name&#39;: repo_data.get(&#39;name&#39;),\n                    &#39;description&#39;: repo_data.get(&#39;description&#39;),\n                    &#39;stars&#39;: repo_data.get(&#39;stargazers_count&#39;),\n                    &#39;forks&#39;: repo_data.get(&#39;forks_count&#39;),\n                    &#39;language&#39;: repo_data.get(&#39;language&#39;),\n                    &#39;updated_at&#39;: repo_data.get(&#39;updated_at&#39;),\n                    &#39;latest_release&#39;: releases[0] if releases else None,\n                    &#39;contributors_count&#39;: len(contributors),\n                    &#39;top_contributors&#39;: contributors[:5]\n                }\n                \n                self._cache_data(cache_key, data)\n                return data\n                \n        except Exception as e:\n            print(f&quot;Failed to fetch GitHub data for {repo}: {e}&quot;)\n            return {}\n    \n    async def fetch_npm_data(self, package: str) -&gt; Dict:\n        &quot;&quot;&quot;Fetch package data from npm registry.&quot;&quot;&quot;\n        cache_key = f&quot;npm_{package}&quot;\n        \n        if self._is_cached(cache_key):\n            return self.cache[cache_key]\n        \n        try:\n            async with aiohttp.ClientSession() as session:\n                url = f&quot;https://registry.npmjs.org/{package}&quot;\n                async with session.get(url) as response:\n                    package_data = await response.json()\n                \n                # Get download statistics\n                downloads_url = f&quot;https://api.npmjs.org/downloads/point/last-month/{package}&quot;\n                async with session.get(downloads_url) as response:\n                    downloads = await response.json()\n                \n                latest_version = package_data.get(&#39;dist-tags&#39;, {}).get(&#39;latest&#39;)\n                version_data = package_data.get(&#39;versions&#39;, {}).get(latest_version, {})\n                \n                data = {\n                    &#39;name&#39;: package_data.get(&#39;name&#39;),\n                    &#39;description&#39;: package_data.get(&#39;description&#39;),\n                    &#39;version&#39;: latest_version,\n                    &#39;author&#39;: version_data.get(&#39;author&#39;, {}),\n                    &#39;license&#39;: version_data.get(&#39;license&#39;),\n                    &#39;dependencies&#39;: list(version_data.get(&#39;dependencies&#39;, {}).keys()),\n                    &#39;monthly_downloads&#39;: downloads.get(&#39;downloads&#39;, 0),\n                    &#39;repository&#39;: version_data.get(&#39;repository&#39;, {}),\n                    &#39;keywords&#39;: version_data.get(&#39;keywords&#39;, [])\n                }\n                \n                self._cache_data(cache_key, data)\n                return data\n                \n        except Exception as e:\n            print(f&quot;Failed to fetch npm data for {package}: {e}&quot;)\n            return {}\n    \n    async def fetch_database_metrics(self, query_config: Dict) -&gt; Dict:\n        &quot;&quot;&quot;Fetch metrics from database.&quot;&quot;&quot;\n        cache_key = f&quot;db_{hash(str(query_config))}&quot;\n        \n        if self._is_cached(cache_key):\n            return self.cache[cache_key]\n        \n        try:\n            db_path = query_config.get(&#39;database_path&#39;)\n            queries = query_config.get(&#39;queries&#39;, {})\n            \n            conn = sqlite3.connect(db_path)\n            cursor = conn.cursor()\n            \n            results = {}\n            for metric_name, query in queries.items():\n                cursor.execute(query)\n                result = cursor.fetchall()\n                \n                if len(result) == 1 and len(result[0]) == 1:\n                    # Single value result\n                    results[metric_name] = result[0][0]\n                else:\n                    # Multiple rows/columns\n                    results[metric_name] = result\n            \n            conn.close()\n            \n            self._cache_data(cache_key, results)\n            return results\n            \n        except Exception as e:\n            print(f&quot;Failed to fetch database metrics: {e}&quot;)\n            return {}\n    \n    async def fetch_api_status(self, endpoints: List[str]) -&gt; Dict:\n        &quot;&quot;&quot;Check status of multiple API endpoints.&quot;&quot;&quot;\n        cache_key = &quot;api_status&quot;\n        \n        if self._is_cached(cache_key):\n            return self.cache[cache_key]\n        \n        status_data = {\n            &#39;timestamp&#39;: datetime.now().isoformat(),\n            &#39;endpoints&#39;: {}\n        }\n        \n        async with aiohttp.ClientSession() as session:\n            for endpoint in endpoints:\n                try:\n                    start_time = datetime.now()\n                    async with session.get(endpoint) as response:\n                        response_time = (datetime.now() - start_time).total_seconds()\n                        \n                        status_data[&#39;endpoints&#39;][endpoint] = {\n                            &#39;status_code&#39;: response.status,\n                            &#39;response_time&#39;: response_time,\n                            &#39;status&#39;: &#39;healthy&#39; if response.status == 200 else &#39;error&#39;\n                        }\n                except Exception as e:\n                    status_data[&#39;endpoints&#39;][endpoint] = {\n                        &#39;status_code&#39;: None,\n                        &#39;response_time&#39;: None,\n                        &#39;status&#39;: &#39;unreachable&#39;,\n                        &#39;error&#39;: str(e)\n                    }\n        \n        self._cache_data(cache_key, status_data)\n        return status_data\n    \n    def _is_cached(self, key: str) -&gt; bool:\n        &quot;&quot;&quot;Check if data is in cache and not expired.&quot;&quot;&quot;\n        if key not in self.cache:\n            return False\n        \n        if key in self.cache_ttl:\n            return datetime.now() &lt; self.cache_ttl[key]\n        \n        return False\n    \n    def _cache_data(self, key: str, data: Dict):\n        &quot;&quot;&quot;Store data in cache with TTL.&quot;&quot;&quot;\n        self.cache[key] = data\n        ttl_seconds = self.config.get(&#39;cache_duration&#39;, 3600)\n        self.cache_ttl[key] = datetime.now() + timedelta(seconds=ttl_seconds)\n    \n    async def get_all_dynamic_content(self, template_config: Dict) -&gt; Dict:\n        &quot;&quot;&quot;Fetch all required dynamic content for template.&quot;&quot;&quot;\n        content = {}\n        \n        # Fetch GitHub data if required\n        if &#39;github_repos&#39; in template_config:\n            github_data = {}\n            for repo in template_config[&#39;github_repos&#39;]:\n                github_data[repo] = await self.fetch_github_data(repo)\n            content[&#39;github&#39;] = github_data\n        \n        # Fetch npm data if required\n        if &#39;npm_packages&#39; in template_config:\n            npm_data = {}\n            for package in template_config[&#39;npm_packages&#39;]:\n                npm_data[package] = await self.fetch_npm_data(package)\n            content[&#39;npm&#39;] = npm_data\n        \n        # Fetch database metrics if required\n        if &#39;database_queries&#39; in template_config:\n            db_data = await self.fetch_database_metrics(template_config[&#39;database_queries&#39;])\n            content[&#39;metrics&#39;] = db_data\n        \n        # Check API status if required\n        if &#39;api_endpoints&#39; in template_config:\n            api_status = await self.fetch_api_status(template_config[&#39;api_endpoints&#39;])\n            content[&#39;api_status&#39;] = api_status\n        \n        return content\n\n# Integration with template engine\nclass EnhancedMarkdownTemplateEngine(MarkdownTemplateEngine):\n    &quot;&quot;&quot;Extended template engine with dynamic content capabilities.&quot;&quot;&quot;\n    \n    def __init__(self, template_directory: str = &quot;templates&quot;):\n        super().__init__(template_directory)\n        self.content_provider = DynamicContentProvider()\n        \n        # Add dynamic content functions to Jinja environment\n        self.jinja_env.globals.update({\n            &#39;fetch_github&#39;: self._fetch_github_wrapper,\n            &#39;fetch_npm&#39;: self._fetch_npm_wrapper,\n            &#39;fetch_metrics&#39;: self._fetch_metrics_wrapper,\n            &#39;api_status&#39;: self._api_status_wrapper\n        })\n    \n    async def render_template_with_dynamic_content(self, \n                                                   template_name: str, \n                                                   context: TemplateContext,\n                                                   dynamic_config: Dict = None) -&gt; str:\n        &quot;&quot;&quot;Render template with dynamic content from external sources.&quot;&quot;&quot;\n        \n        # Fetch dynamic content if configuration provided\n        if dynamic_config:\n            dynamic_data = await self.content_provider.get_all_dynamic_content(dynamic_config)\n            context.variables.update(dynamic_data)\n        \n        return self.render_template(template_name, context)\n    \n    def _fetch_github_wrapper(self, repo: str):\n        &quot;&quot;&quot;Synchronous wrapper for GitHub data fetching.&quot;&quot;&quot;\n        return asyncio.run(self.content_provider.fetch_github_data(repo))\n    \n    def _fetch_npm_wrapper(self, package: str):\n        &quot;&quot;&quot;Synchronous wrapper for npm data fetching.&quot;&quot;&quot;\n        return asyncio.run(self.content_provider.fetch_npm_data(package))\n    \n    def _fetch_metrics_wrapper(self, query_config: Dict):\n        &quot;&quot;&quot;Synchronous wrapper for database metrics.&quot;&quot;&quot;\n        return asyncio.run(self.content_provider.fetch_database_metrics(query_config))\n    \n    def _api_status_wrapper(self, endpoints: List[str]):\n        &quot;&quot;&quot;Synchronous wrapper for API status checking.&quot;&quot;&quot;\n        return asyncio.run(self.content_provider.fetch_api_status(endpoints))\n\n# Example usage\nasync def demo_dynamic_templates():\n    &quot;&quot;&quot;Demonstrate dynamic content integration.&quot;&quot;&quot;\n    \n    engine = EnhancedMarkdownTemplateEngine()\n    \n    # Template configuration with dynamic content requirements\n    dynamic_config = {\n        &#39;github_repos&#39;: [&#39;microsoft/vscode&#39;, &#39;facebook/react&#39;],\n        &#39;npm_packages&#39;: [&#39;react&#39;, &#39;express&#39;],\n        &#39;api_endpoints&#39;: [&#39;https://api.github.com&#39;, &#39;https://registry.npmjs.org&#39;],\n        &#39;database_queries&#39;: {\n            &#39;database_path&#39;: &#39;metrics.db&#39;,\n            &#39;queries&#39;: {\n                &#39;total_users&#39;: &#39;SELECT COUNT(*) FROM users&#39;,\n                &#39;daily_active_users&#39;: &#39;SELECT COUNT(*) FROM user_sessions WHERE DATE(created_at) = DATE(&quot;now&quot;)&#39;,\n                &#39;popular_features&#39;: &#39;SELECT feature_name, usage_count FROM feature_usage ORDER BY usage_count DESC LIMIT 5&#39;\n            }\n        }\n    }\n    \n    # Template context with static variables\n    context = TemplateContext(variables={\n        &#39;title&#39;: &#39;Project Status Dashboard&#39;,\n        &#39;report_date&#39;: datetime.now().strftime(&#39;%Y-%m-%d&#39;),\n        &#39;author&#39;: &#39;Automation System&#39;\n    })\n    \n    # Render template with dynamic content\n    rendered = await engine.render_template_with_dynamic_content(\n        &#39;status_dashboard&#39;,\n        context,\n        dynamic_config\n    )\n    \n    return rendered\n\u003C/code>\u003C/pre>\u003Ch2 id=\"integration-with-content-management-systems\">Integration with Content Management Systems\u003C/h2>\n\u003Cp>Template automation integrates seamlessly with modern content workflows. When combined with \u003Ca href=\"/blog/markdown-automation-workflows-complete-guide\">automated workflow systems and content pipeline optimization\u003C/a>, template engines become part of comprehensive content management architectures that support complex organizational requirements while maintaining simplicity and flexibility for individual contributors.\u003C/p>\n\u003Cp>For sophisticated documentation platforms, template automation complements \u003Ca href=\"/blog/markdown-progressive-web-app-documentation-complete-guide\">Progressive Web App documentation capabilities\u003C/a> by enabling offline-capable content generation where templates can be processed locally, ensuring consistent document structure even without network connectivity, supporting distributed teams and mobile-first content creation workflows.\u003C/p>\n\u003Cp>When building enterprise-scale content systems, template automation integrates effectively with \u003Ca href=\"/blog/markdown-performance-optimization-complete-guide\">performance optimization and caching strategies\u003C/a> to create efficient content generation pipelines where template rendering is optimized for speed, cached intelligently, and distributed across content delivery networks for optimal user experience.\u003C/p>\n\u003Ch2 id=\"best-practices-and-workflow-integration\">Best Practices and Workflow Integration\u003C/h2>\n\u003Ch3 id=\"template-maintenance-and-versioning\">Template Maintenance and Versioning\u003C/h3>\n\u003Cp>\u003Cstrong>Version Control Strategies:\u003C/strong>\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-comment\"># template-versioning.yml - Template version management\u003C/span>\n\u003Cspan class=\"hljs-attr\">template_metadata:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">version:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;2.1.0&quot;\u003C/span>\n  \u003Cspan class=\"hljs-attr\">compatibility:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">min_engine_version:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;1.5.0&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">max_engine_version:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;2.x.x&quot;\u003C/span>\n  \n  \u003Cspan class=\"hljs-attr\">changelog:\u003C/span>\n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">version:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;2.1.0&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">date:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;2025-11-30&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">changes:\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Added conditional content sections&quot;\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Improved mobile responsiveness&quot;\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Enhanced accessibility features&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">version:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;2.0.0&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">date:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;2025-10-15&quot;\u003C/span>\n      \u003Cspan class=\"hljs-attr\">changes:\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Breaking: Changed frontmatter structure&quot;\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Added multi-language support&quot;\u003C/span>\n        \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Redesigned layout system&quot;\u003C/span>\n  \n  \u003Cspan class=\"hljs-attr\">migration_guides:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;1.x_to_2.x&quot;:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;docs/migrations/v1-to-v2.md&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;2.0_to_2.1&quot;:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;docs/migrations/v2.0-to-v2.1.md&quot;\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"performance-optimization\">Performance Optimization\u003C/h3>\n\u003Cp>\u003Cstrong>Template Rendering Performance:\u003C/strong>\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-python\">\u003Cspan class=\"hljs-comment\"># template_performance_optimizer.py - Optimization strategies\u003C/span>\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> time\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> asyncio\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> concurrent.futures \u003Cspan class=\"hljs-keyword\">import\u003C/span> ThreadPoolExecutor\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> functools \u003Cspan class=\"hljs-keyword\">import\u003C/span> lru_cache\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> cProfile\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> pstats\n\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">TemplatePerformanceOptimizer\u003C/span>:\n    \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Optimize template rendering performance through caching and parallelization.&quot;&quot;&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">__init__\u003C/span>(\u003Cspan class=\"hljs-params\">self, max_workers: \u003Cspan class=\"hljs-built_in\">int\u003C/span> = \u003Cspan class=\"hljs-number\">4\u003C/span>\u003C/span>):\n        self.executor = ThreadPoolExecutor(max_workers=max_workers)\n        self.render_cache = {}\n        self.performance_metrics = {}\n    \n\u003Cspan class=\"hljs-meta\">    @lru_cache(\u003Cspan class=\"hljs-params\">maxsize=\u003Cspan class=\"hljs-number\">128\u003C/span>\u003C/span>)\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">cached_partial_render\u003C/span>(\u003Cspan class=\"hljs-params\">self, partial_name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, context_hash: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Cache rendered partials for reuse.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-comment\"># Implementation would render and cache partial\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">pass\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">parallel_template_processing\u003C/span>(\u003Cspan class=\"hljs-params\">self, template_jobs: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-type\">Dict\u003C/span>]\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Process multiple templates in parallel.&quot;&quot;&quot;\u003C/span>\n        loop = asyncio.get_event_loop()\n        \n        tasks = []\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> job \u003Cspan class=\"hljs-keyword\">in\u003C/span> template_jobs:\n            task = loop.run_in_executor(\n                self.executor, \n                self._render_template_sync,\n                job[\u003Cspan class=\"hljs-string\">&#x27;template&#x27;\u003C/span>],\n                job[\u003Cspan class=\"hljs-string\">&#x27;context&#x27;\u003C/span>]\n            )\n            tasks.append(task)\n        \n        results = \u003Cspan class=\"hljs-keyword\">await\u003C/span> asyncio.gather(*tasks, return_exceptions=\u003Cspan class=\"hljs-literal\">True\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> results\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">profile_template_performance\u003C/span>(\u003Cspan class=\"hljs-params\">self, template_name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, context: \u003Cspan class=\"hljs-type\">Dict\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Profile template rendering performance.&quot;&quot;&quot;\u003C/span>\n        profiler = cProfile.Profile()\n        profiler.enable()\n        \n        \u003Cspan class=\"hljs-comment\"># Render template\u003C/span>\n        start_time = time.time()\n        result = self._render_template_sync(template_name, context)\n        end_time = time.time()\n        \n        profiler.disable()\n        \n        \u003Cspan class=\"hljs-comment\"># Analyze performance\u003C/span>\n        stats = pstats.Stats(profiler)\n        stats.sort_stats(\u003Cspan class=\"hljs-string\">&#x27;cumulative&#x27;\u003C/span>)\n        \n        self.performance_metrics[template_name] = {\n            \u003Cspan class=\"hljs-string\">&#x27;render_time&#x27;\u003C/span>: end_time - start_time,\n            \u003Cspan class=\"hljs-string\">&#x27;profiler_stats&#x27;\u003C/span>: stats\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> result\n\u003C/code>\u003C/pre>\u003Ch2 id=\"conclusion\">Conclusion\u003C/h2>\n\u003Cp>Markdown document templates and automation represent a fundamental advancement in content creation efficiency, enabling organizations to transform manual, error-prone documentation processes into streamlined, automated workflows that maintain consistency, enhance quality, and dramatically reduce time-to-publication. By implementing sophisticated template engines, dynamic content integration, and comprehensive automation pipelines, teams can establish scalable documentation architectures that support both individual productivity and enterprise-scale content management requirements.\u003C/p>\n\u003Cp>The key to successful template automation lies in thoughtful template design, robust integration with existing workflows, and systematic performance optimization. Whether you&#39;re creating technical documentation, managing API references, or maintaining complex content hierarchies, the techniques covered in this guide provide the foundation for building efficient, maintainable, and scalable content creation systems.\u003C/p>\n\u003Cp>Remember to prioritize template maintainability, implement comprehensive testing strategies, and continuously monitor performance metrics to ensure your automation systems remain effective as content requirements evolve. With careful implementation of advanced template automation techniques, your Markdown workflows can achieve professional efficiency levels while maintaining the simplicity and flexibility that makes Markdown an essential tool for modern content creation.\u003C/p>\n",[15,19,22,25,28,31,34,37,40],{"id":16,"text":17,"level":18},"why-master-markdown-template-automation","Why Master Markdown Template Automation?",2,{"id":20,"text":21,"level":18},"foundation-template-design-principles","Foundation Template Design Principles",{"id":23,"text":24,"level":18},"automation-pipeline-integration","Automation Pipeline Integration",{"id":26,"text":27,"level":18},"advanced-template-techniques","Advanced Template Techniques",{"id":29,"text":30,"level":18},"business-overview","Business Overview",{"id":32,"text":33,"level":18},"additional-information","Additional Information",{"id":35,"text":36,"level":18},"integration-with-content-management-systems","Integration with Content Management Systems",{"id":38,"text":39,"level":18},"best-practices-and-workflow-integration","Best Practices and Workflow Integration",{"id":41,"text":42,"level":18},"conclusion","Conclusion",[],[45,53,61],{"slug":46,"title":47,"description":48,"excerpt":49,"date":50,"category":9,"author":10,"keywords":51,"readingMinutes":52},"markdown-workflow-automation-and-productivity-complete-guide","Markdown Workflow Automation and Productivity: Complete Guide for Streamlined Content Creation and Management","Master advanced Markdown workflow automation techniques for enhanced productivity, streamlined content creation, and efficient document management. Learn automation tools, template systems, and productivity optimization strategies.","Advanced Markdown workflow automation transforms manual content creation into streamlined, efficient processes that maximize productivity while maintaining quality standards. By implementing…","2025-10-14","markdown workflow automation, markdown productivity, content automation, markdown templates, document workflow, markdown efficiency, automated markdown, productivity tools markdown",21,{"slug":54,"title":55,"description":56,"excerpt":57,"date":58,"category":9,"author":10,"keywords":59,"readingMinutes":60},"markdown-text-wrapping-line-length-management-guide","Markdown Text Wrapping and Line Length Management: Complete Guide for Document Formatting and Content Optimization","Master Markdown text wrapping techniques, line length management, and content formatting for optimal readability across different platforms. Learn hard wraps, soft wraps, line break strategies, and automated formatting approaches.","Advanced Markdown text wrapping and line length management techniques enable professional document formatting that optimizes content readability across different platforms and display…","2025-11-06","markdown text wrapping, markdown line length, text formatting markdown, markdown hard wrap, markdown soft wrap, line breaks markdown, markdown paragraph formatting, content optimization",19,{"slug":62,"title":63,"description":64,"excerpt":65,"date":66,"category":9,"author":10,"keywords":67,"readingMinutes":60},"markdown-email-newsletter-automation-complete-guide","Markdown Email Newsletter Creation and Automation: Complete Guide for Content-Driven Marketing and Communication Systems","Master email newsletter creation and automation using Markdown for content-driven marketing campaigns. Learn template systems, automation workflows, subscriber management, and integration with email service providers.","Email newsletter creation and automation using Markdown provides powerful content-driven marketing capabilities that streamline publishing workflows while maintaining professional design standards…","2025-09-24","markdown email newsletter, automated newsletters markdown, email marketing markdown, newsletter templates, markdown email automation, email campaign markdown, newsletter workflow automation, markdown email content",1792184945332]