[{"data":1,"prerenderedAt":63},["Reactive",2],{"blog-post-markdown-keyboard-shortcuts-efficiency-productivity-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":37,"related":38},"markdown-keyboard-shortcuts-efficiency-productivity-complete-guide","Markdown Keyboard Shortcuts and Efficiency: Complete Guide to Productivity Enhancement and Workflow Optimization","Master Markdown keyboard shortcuts, efficiency techniques, and productivity enhancement strategies. Learn advanced text manipulation, automation workflows, and editor-specific shortcuts for faster Markdown writing.","Advanced Markdown keyboard shortcuts and efficiency techniques enable sophisticated productivity workflows that dramatically accelerate content creation, reduce repetitive tasks, and streamline…","2025-12-12","Tutorial","Matthew Rathbone","markdown keyboard shortcuts, markdown productivity, markdown efficiency, markdown hotkeys, markdown workflow optimization, markdown automation, text editing shortcuts, markdown productivity tips",24,"\u003Cp>Advanced Markdown keyboard shortcuts and efficiency techniques enable sophisticated productivity workflows that dramatically accelerate content creation, reduce repetitive tasks, and streamline complex document formatting operations. By mastering platform-specific shortcuts, automation sequences, and advanced text manipulation techniques, technical writers can achieve professional-level writing speeds while maintaining formatting consistency and document quality across diverse Markdown editing environments.\u003C/p>\n\u003Ch2 id=\"why-master-markdown-keyboard-shortcuts\">Why Master Markdown Keyboard Shortcuts?\u003C/h2>\n\u003Cp>Professional keyboard proficiency provides essential benefits for content creators:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Speed Enhancement\u003C/strong>: Achieve 3-5x faster formatting and document manipulation through muscle memory shortcuts\u003C/li>\n\u003Cli>\u003Cstrong>Flow Preservation\u003C/strong>: Maintain writing momentum without interrupting creative processes for manual formatting\u003C/li>\n\u003Cli>\u003Cstrong>Consistency Assurance\u003C/strong>: Apply formatting patterns uniformly through standardized shortcut sequences\u003C/li>\n\u003Cli>\u003Cstrong>Cognitive Load Reduction\u003C/strong>: Automate repetitive tasks to focus mental energy on content quality and structure\u003C/li>\n\u003Cli>\u003Cstrong>Cross-Platform Efficiency\u003C/strong>: Develop transferable skills that work across different editors and operating systems\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"foundation-keyboard-shortcuts-for-markdown\">Foundation Keyboard Shortcuts for Markdown\u003C/h2>\n\u003Ch3 id=\"universal-text-manipulation-shortcuts\">Universal Text Manipulation Shortcuts\u003C/h3>\n\u003Cp>Core keyboard combinations that work across most Markdown editors:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Essential Text Selection and Movement\u003C/span>\nCtrl/Cmd + A          # Select all content\nCtrl/Cmd + C          # Copy selected text\nCtrl/Cmd + X          # Cut selected text  \nCtrl/Cmd + V          # Paste clipboard content\nCtrl/Cmd + Z          # Undo last action\nCtrl/Cmd + Y          # Redo last undone action (Windows/Linux)\nCtrl/Cmd + Shift + Z  # Redo last undone action (macOS alternative)\n\n\u003Cspan class=\"hljs-section\"># Advanced Text Selection\u003C/span>\nCtrl/Cmd + Shift + Right/Left  # Select word by word\nCtrl/Cmd + Shift + Up/Down     # Select line by line\nShift + Home/End               # Select to beginning/end of line\nCtrl/Cmd + Shift + Home/End    # Select to beginning/end of document\n\n\u003Cspan class=\"hljs-section\"># Line Manipulation\u003C/span>\nCtrl/Cmd + L          # Select entire line\nCtrl/Cmd + D          # Duplicate current line\nCtrl/Cmd + Shift + K  # Delete current line\nAlt + Up/Down         # Move line up/down\nAlt + Shift + Up/Down # Copy line up/down\n\n\u003Cspan class=\"hljs-section\"># Find and Replace\u003C/span>\nCtrl/Cmd + F          # Find text\nCtrl/Cmd + H          # Find and replace\nCtrl/Cmd + G          # Find next occurrence\nCtrl/Cmd + Shift + G  # Find previous occurrence\nF3 / Cmd + G          # Repeat last search\n\u003C/code>\u003C/pre>\u003Ch3 id=\"markdown-specific-formatting-shortcuts\">Markdown-Specific Formatting Shortcuts\u003C/h3>\n\u003Cp>Specialized shortcuts for common Markdown formatting patterns:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Text Formatting Shortcuts\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Bold and Italic\u003C/span>\nCtrl/Cmd + B          # \u003Cspan class=\"hljs-strong\">**Bold text**\u003C/span>\nCtrl/Cmd + I          # \u003Cspan class=\"hljs-emphasis\">*Italic text*\u003C/span>\nCtrl/Cmd + U          # ~~Strikethrough~~ (in some editors)\nCtrl/Cmd + Shift + X  # ~~Strikethrough~~ (alternative)\n\n\u003Cspan class=\"hljs-section\">## Headers\u003C/span>\nCtrl/Cmd + 1          # # H1 Header\nCtrl/Cmd + 2          # ## H2 Header  \nCtrl/Cmd + 3          # ### H3 Header\nCtrl/Cmd + 4          # #### H4 Header\nCtrl/Cmd + 5          # ##### H5 Header\nCtrl/Cmd + 6          # ###### H6 Header\n\n\u003Cspan class=\"hljs-section\">## Lists and Structure\u003C/span>\nCtrl/Cmd + Shift + 8  # * Unordered list item\nCtrl/Cmd + Shift + 7  # 1. Ordered list item\nCtrl/Cmd + ]          # Increase list indentation\nCtrl/Cmd + [          # Decrease list indentation\nTab                   # Indent list item\nShift + Tab           # Outdent list item\n\n\u003Cspan class=\"hljs-section\">## Code and Blocks\u003C/span>\nCtrl/Cmd + \u003Cspan class=\"hljs-code\">`          # `\u003C/span>Inline code`\nCtrl/Cmd + Shift + \u003Cspan class=\"hljs-code\">`  # `\u003C/span>\u003Cspan class=\"hljs-code\">``Code block`\u003C/span>``\nCtrl/Cmd + Shift + C  # Code block (alternative)\nCtrl/Cmd + K + C      # Comment block (some editors)\n\n\u003Cspan class=\"hljs-section\">## Links and Images\u003C/span>\nCtrl/Cmd + K          # [\u003Cspan class=\"hljs-string\">Link text\u003C/span>](\u003Cspan class=\"hljs-link\">URL\u003C/span>)\nCtrl/Cmd + Shift + K  # ![\u003Cspan class=\"hljs-string\">Image alt\u003C/span>](\u003Cspan class=\"hljs-link\">URL\u003C/span>)\nCtrl/Cmd + L          # Insert link dialog (editor-specific)\n\n\u003Cspan class=\"hljs-section\">## Quotes and Tables\u003C/span>\nCtrl/Cmd + Shift + &gt;  # &gt; Blockquote\nCtrl/Cmd + T          # Insert table (editor-specific)\nCtrl/Cmd + Shift + T  # Table formatting (alternative)\n\n\u003Cspan class=\"hljs-section\"># Advanced Shortcuts for Power Users\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Multiple Cursors and Selection\u003C/span>\nCtrl/Cmd + Click         # Add cursor at click position\nCtrl/Cmd + Alt + Up/Down # Add cursor above/below current line\nCtrl/Cmd + D             # Select next occurrence of current word\nCtrl/Cmd + Shift + L     # Select all occurrences of current selection\nAlt + Click              # Add cursor at position (VS Code style)\n\n\u003Cspan class=\"hljs-section\">## Word and Character Navigation\u003C/span>\nCtrl/Cmd + Right/Left    # Move by word\nHome/End                 # Move to beginning/end of line\nCtrl/Cmd + Home/End      # Move to beginning/end of document\nPage Up/Page Down        # Move by screen\nCtrl/Cmd + G             # Go to line number\n\n\u003Cspan class=\"hljs-section\">## Bookmarks and Navigation\u003C/span>\nCtrl/Cmd + Shift + M     # Toggle bookmark (editor-specific)\nF2                       # Go to next bookmark\nShift + F2               # Go to previous bookmark\nCtrl/Cmd + P             # Quick file navigation\nCtrl/Cmd + Shift + P     # Command palette\n\n\u003Cspan class=\"hljs-section\">## Document Management\u003C/span>\nCtrl/Cmd + N             # New document\nCtrl/Cmd + O             # Open document\nCtrl/Cmd + S             # Save document\nCtrl/Cmd + Shift + S     # Save as\nCtrl/Cmd + W             # Close current tab\nCtrl/Cmd + Shift + T     # Reopen closed tab\n\u003C/code>\u003C/pre>\u003Ch2 id=\"editor-specific-shortcut-mastery\">Editor-Specific Shortcut Mastery\u003C/h2>\n\u003Ch3 id=\"vs-code-markdown-shortcuts\">VS Code Markdown Shortcuts\u003C/h3>\n\u003Cp>Optimized shortcuts for Visual Studio Code Markdown editing:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-comment\">// settings.json - Custom VS Code Markdown shortcuts\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;markdown.extension.print.absoluteImgPath&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-literal\">\u003Cspan class=\"hljs-keyword\">false\u003C/span>\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;markdown.extension.toc.updateOnSave&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-literal\">\u003Cspan class=\"hljs-keyword\">true\u003C/span>\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n  \n  \u003Cspan class=\"hljs-comment\">// Custom key bindings for Markdown efficiency\u003C/span>\n  \u003Cspan class=\"hljs-attr\">&quot;keybindings&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-punctuation\">[\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+v&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.showPreview&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+s&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.showPreviewToSide&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span> \n      \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+m&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.toggleMath&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+i&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.editing.toggleCodeBlock&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;alt+shift+f&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.formatting.toggleStrikethrough&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+l&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.editing.toggleList&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n      \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n    \u003Cspan class=\"hljs-punctuation\">}\u003C/span>\n  \u003Cspan class=\"hljs-punctuation\">]\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\n\u003C/code>\u003C/pre>\u003Cp>Advanced VS Code Markdown workflow shortcuts:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># VS Code Specific Markdown Shortcuts\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Preview and Navigation\u003C/span>\nCtrl/Cmd + Shift + V     # Open Markdown preview\nCtrl/Cmd + K V           # Open preview to side\nCtrl/Cmd + Shift + F12   # Peek definition (for links)\nCtrl/Cmd + Click         # Follow link in preview\nF12                      # Go to definition\nAlt + Left/Right         # Navigate back/forward\n\n\u003Cspan class=\"hljs-section\">## Advanced Text Manipulation\u003C/span>\nCtrl/Cmd + Shift + \\     # Jump to matching bracket\nCtrl/Cmd + /             # Toggle line comment\nCtrl/Cmd + Shift + /     # Toggle block comment\nCtrl/Cmd + Enter         # Insert line below\nCtrl/Cmd + Shift + Enter # Insert line above\nAlt + Shift + Right      # Expand selection\nAlt + Shift + Left       # Shrink selection\n\n\u003Cspan class=\"hljs-section\">## Multiple Cursors and Selection\u003C/span>\nCtrl/Cmd + F2            # Select all occurrences of current word\nCtrl/Cmd + Shift + L     # Select all lines in selection\nAlt + Shift + I          # Insert cursor at end of each line in selection\nCtrl/Cmd + Alt + Down    # Add cursor below\nCtrl/Cmd + Alt + Up      # Add cursor above\n\n\u003Cspan class=\"hljs-section\">## Code Folding and Structure\u003C/span>\nCtrl/Cmd + Shift + [     # Fold current region\nCtrl/Cmd + Shift + ]     # Unfold current region\nCtrl/Cmd + K Ctrl/Cmd + [ # Fold all subregions\nCtrl/Cmd + K Ctrl/Cmd + ] # Unfold all subregions\nCtrl/Cmd + K Ctrl/Cmd + 0 # Fold all\nCtrl/Cmd + K Ctrl/Cmd + J # Unfold all\n\n\u003Cspan class=\"hljs-section\">## Table of Contents and Document Outline\u003C/span>\nCtrl/Cmd + Shift + O     # Go to symbol (headers)\nCtrl/Cmd + T             # Show all symbols in workspace\nCtrl/Cmd + P             # Quick file open\nCtrl/Cmd + Shift + P     # Command palette\n\n\u003Cspan class=\"hljs-section\">## Markdown Extension Specific\u003C/span>\nCtrl/Cmd + M T           # Create table (Markdown All in One)\nCtrl/Cmd + M F           # Format table\nCtrl/Cmd + M C           # Toggle task list item\nCtrl/Cmd + M P           # Print to HTML\n\u003C/code>\u003C/pre>\u003Ch3 id=\"typora-keyboard-shortcuts\">Typora Keyboard Shortcuts\u003C/h3>\n\u003Cp>Specialized shortcuts for Typora&#39;s WYSIWYG Markdown editing:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Typora Specific Shortcuts\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Text Formatting\u003C/span>\nCtrl/Cmd + B             # Bold\nCtrl/Cmd + I             # Italic\nCtrl/Cmd + U             # Underline\nCtrl/Cmd + Shift + `     # Code block\nCtrl/Cmd + `             # Inline code\nCtrl/Cmd + Shift + Q     # Quote block\nCtrl/Cmd + Shift + M     # Math block\nCtrl/Cmd + E             # Emphasis (italic alternative)\n\n\u003Cspan class=\"hljs-section\">## Headers and Structure\u003C/span>\nCtrl/Cmd + 1-6           # Header levels 1-6\nCtrl/Cmd + 0             # Paragraph (remove header)\nCtrl/Cmd + Plus          # Increase header level\nCtrl/Cmd + Minus         # Decrease header level\n\n\u003Cspan class=\"hljs-section\">## Lists and Tasks\u003C/span>\nCtrl/Cmd + Shift + ]     # Ordered list\nCtrl/Cmd + Shift + [     # Unordered list\nCtrl/Cmd + Shift + X     # Task list\nCtrl/Cmd + ]             # Indent list\nCtrl/Cmd + [             # Outdent list\n\n\u003Cspan class=\"hljs-section\">## Tables\u003C/span>\nCtrl/Cmd + T             # Insert table\nCtrl/Cmd + Shift + L     # Insert table row below\nCtrl/Cmd + Shift + K     # Delete table row\nTab                      # Move to next cell\nShift + Tab              # Move to previous cell\nEnter                    # Create new row\n\n\u003Cspan class=\"hljs-section\">## View and Navigation\u003C/span>\nCtrl/Cmd + /             # Toggle source code mode\nCtrl/Cmd + Shift + 1     # Toggle outline panel\nCtrl/Cmd + Shift + 2     # Toggle file tree\nCtrl/Cmd + Shift + 3     # Toggle article list\nF8                       # Focus mode\nF9                       # Typewriter mode\nF11                      # Fullscreen\n\n\u003Cspan class=\"hljs-section\">## Document Operations\u003C/span>\nCtrl/Cmd + Shift + E     # Export\nCtrl/Cmd + Shift + S     # Save as\nCtrl/Cmd + Shift + I     # Import\nCtrl/Cmd + P             # Print\n\u003C/code>\u003C/pre>\u003Ch3 id=\"obsidian-markdown-shortcuts\">Obsidian Markdown Shortcuts\u003C/h3>\n\u003Cp>Vault-specific shortcuts for Obsidian note-taking and knowledge management:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Obsidian Specific Shortcuts\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Note Creation and Linking\u003C/span>\nCtrl/Cmd + N             # New note\nCtrl/Cmd + O             # Quick switcher\nCtrl/Cmd + P             # Command palette\nCtrl/Cmd + Shift + F     # Search in all files\nCtrl/Cmd + E             # Toggle edit/preview mode\nCtrl/Cmd + ,             # Open settings\n\n\u003Cspan class=\"hljs-section\">## Linking and Backlinks\u003C/span>\n[[ ]]                    # Internal link creation\nCtrl/Cmd + K             # Insert link\nCtrl/Cmd + Shift + K     # Insert external link\nAlt + Click              # Open link in new pane\nCtrl/Cmd + Alt + Right   # Follow link under cursor\nCtrl/Cmd + Alt + Left    # Go back\n\n\u003Cspan class=\"hljs-section\">## Panes and Workspace\u003C/span>\nCtrl/Cmd + W             # Close active pane\nCtrl/Cmd + Shift + N     # New pane\nCtrl/Cmd + Alt + Right   # Open link in new pane\nCtrl/Cmd + Tab           # Switch between open notes\nCtrl/Cmd + Shift + D     # Toggle left sidebar\nCtrl/Cmd + Shift + R     # Toggle right sidebar\n\n\u003Cspan class=\"hljs-section\">## Advanced Features\u003C/span>\nCtrl/Cmd + G             # Open graph view\nCtrl/Cmd + Shift + B     # Show backlinks\nCtrl/Cmd + Shift + O     # Open outgoing links\nCtrl/Cmd + T             # Open today&#x27;s daily note\nCtrl/Cmd + Shift + I     # Open random note\n\n\u003Cspan class=\"hljs-section\">## Text Manipulation\u003C/span>\nCtrl/Cmd + D             # Delete current line\nCtrl/Cmd + Shift + D     # Duplicate current line\nCtrl/Cmd + /             # Toggle comment\nCtrl/Cmd + Shift + F     # Find and replace\nCtrl/Cmd + H             # Find and replace in current file\n\n\u003Cspan class=\"hljs-section\">## Tags and Metadata\u003C/span>\n\u003Cspan class=\"hljs-section\">#                        # Create tag\u003C/span>\nCtrl/Cmd + Shift + T     # Insert template\nCtrl/Cmd + ;             # Toggle checkbox status\nCtrl/Cmd + L             # Insert current date\nCtrl/Cmd + Shift + L     # Insert current time\n\u003C/code>\u003C/pre>\u003Ch2 id=\"advanced-productivity-workflows\">Advanced Productivity Workflows\u003C/h2>\n\u003Ch3 id=\"custom-automation-sequences\">Custom Automation Sequences\u003C/h3>\n\u003Cp>Building complex automation patterns for repetitive Markdown tasks:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-python\">\u003Cspan class=\"hljs-comment\">#!/usr/bin/env python3\u003C/span>\n\u003Cspan class=\"hljs-comment\"># markdown_automation.py - Advanced Markdown workflow automation\u003C/span>\n\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> re\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> os\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> sys\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> json\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\">Tuple\u003C/span>, \u003Cspan class=\"hljs-type\">Optional\u003C/span>\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> dataclasses \u003Cspan class=\"hljs-keyword\">import\u003C/span> dataclass\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> subprocess\n\n\u003Cspan class=\"hljs-meta\">@dataclass\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">ShortcutSequence\u003C/span>:\n    name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\n    description: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\n    trigger_keys: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\n    action_sequence: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>]\n    context: \u003Cspan class=\"hljs-built_in\">str\u003C/span> = \u003Cspan class=\"hljs-string\">&quot;global&quot;\u003C/span>\n    \n\u003Cspan class=\"hljs-meta\">@dataclass \u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">TextTemplate\u003C/span>:\n    name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\n    template: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\n    placeholders: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>]\n    shortcut: \u003Cspan class=\"hljs-type\">Optional\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>] = \u003Cspan class=\"hljs-literal\">None\u003C/span>\n\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownAutomationEngine\u003C/span>:\n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">__init__\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        self.templates = {}\n        self.shortcuts = {}\n        self.snippets = {}\n        self.load_default_templates()\n        self.load_default_shortcuts()\n        \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">load_default_templates\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Load common Markdown templates&quot;&quot;&quot;\u003C/span>\n        self.templates = {\n            \u003Cspan class=\"hljs-string\">&#x27;code_block&#x27;\u003C/span>: TextTemplate(\n                name=\u003Cspan class=\"hljs-string\">&quot;Code Block with Language&quot;\u003C/span>,\n                template=\u003Cspan class=\"hljs-string\">&quot;```{language}\\n{code}\\n```&quot;\u003C/span>,\n                placeholders=[\u003Cspan class=\"hljs-string\">&quot;language&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;code&quot;\u003C/span>],\n                shortcut=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Shift+C&quot;\u003C/span>\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;table&#x27;\u003C/span>: TextTemplate(\n                name=\u003Cspan class=\"hljs-string\">&quot;Basic Table&quot;\u003C/span>,\n                template=\u003Cspan class=\"hljs-string\">&quot;| {col1} | {col2} | {col3} |\\n|--------|--------|--------|\\n| {data1} | {data2} | {data3} |&quot;\u003C/span>,\n                placeholders=[\u003Cspan class=\"hljs-string\">&quot;col1&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;col2&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;col3&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;data1&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;data2&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;data3&quot;\u003C/span>],\n                shortcut=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Shift+T&quot;\u003C/span>\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>: TextTemplate(\n                name=\u003Cspan class=\"hljs-string\">&quot;Blog Post Frontmatter&quot;\u003C/span>,\n                template=\u003Cspan class=\"hljs-string\">&quot;---\\ntitle: \\&quot;{title}\\&quot;\\ndescription: \\&quot;{description}\\&quot;\\nkeywords: {keywords}\\nlayout: {layout}\\ndate: {date}\\nauthor: {author}\\n---\\n\\n&quot;\u003C/span>,\n                placeholders=[\u003Cspan class=\"hljs-string\">&quot;title&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;description&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;keywords&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;layout&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;date&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;author&quot;\u003C/span>],\n                shortcut=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Shift+F&quot;\u003C/span>\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;task_list&#x27;\u003C/span>: TextTemplate(\n                name=\u003Cspan class=\"hljs-string\">&quot;Task List&quot;\u003C/span>,\n                template=\u003Cspan class=\"hljs-string\">&quot;## {section}\\n\\n- [ ] {task1}\\n- [ ] {task2}\\n- [ ] {task3}\\n&quot;\u003C/span>,\n                placeholders=[\u003Cspan class=\"hljs-string\">&quot;section&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;task1&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;task2&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;task3&quot;\u003C/span>],\n                shortcut=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Shift+L&quot;\u003C/span>\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;link_reference&#x27;\u003C/span>: TextTemplate(\n                name=\u003Cspan class=\"hljs-string\">&quot;Reference Link&quot;\u003C/span>,\n                template=\u003Cspan class=\"hljs-string\">&quot;[{text}][{ref}]\\n\\n[{ref}]: {url} \\&quot;{title}\\&quot;&quot;\u003C/span>,\n                placeholders=[\u003Cspan class=\"hljs-string\">&quot;text&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;ref&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;url&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;title&quot;\u003C/span>],\n                shortcut=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Alt+L&quot;\u003C/span>\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;image_figure&#x27;\u003C/span>: TextTemplate(\n                name=\u003Cspan class=\"hljs-string\">&quot;Image with Caption&quot;\u003C/span>,\n                template=\u003Cspan class=\"hljs-string\">&quot;![{alt}]({src})\\n*{caption}*&quot;\u003C/span>,\n                placeholders=[\u003Cspan class=\"hljs-string\">&quot;alt&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;src&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;caption&quot;\u003C/span>],\n                shortcut=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Alt+I&quot;\u003C/span>\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;collapsible_section&#x27;\u003C/span>: TextTemplate(\n                name=\u003Cspan class=\"hljs-string\">&quot;Collapsible Details&quot;\u003C/span>,\n                template=\u003Cspan class=\"hljs-string\">&quot;&lt;details&gt;\\n&lt;summary&gt;{summary}&lt;/summary&gt;\\n\\n{content}\\n\\n&lt;/details&gt;&quot;\u003C/span>,\n                placeholders=[\u003Cspan class=\"hljs-string\">&quot;summary&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;content&quot;\u003C/span>],\n                shortcut=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Shift+D&quot;\u003C/span>\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;api_documentation&#x27;\u003C/span>: TextTemplate(\n                name=\u003Cspan class=\"hljs-string\">&quot;API Endpoint Documentation&quot;\u003C/span>,\n                template=\u003Cspan class=\"hljs-string\">&quot;### {method} {endpoint}\\n\\n**Description:** {description}\\n\\n**Parameters:**\\n{parameters}\\n\\n**Example Request:**\\n```bash\\n{example}\\n```\\n\\n**Response:**\\n```json\\n{response}\\n```&quot;\u003C/span>,\n                placeholders=[\u003Cspan class=\"hljs-string\">&quot;method&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;endpoint&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;description&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;parameters&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;example&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;response&quot;\u003C/span>],\n                shortcut=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Alt+A&quot;\u003C/span>\n            )\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">load_default_shortcuts\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Load advanced shortcut sequences&quot;&quot;&quot;\u003C/span>\n        self.shortcuts = {\n            \u003Cspan class=\"hljs-string\">&#x27;quick_format_bold&#x27;\u003C/span>: ShortcutSequence(\n                name=\u003Cspan class=\"hljs-string\">&quot;Quick Bold Format&quot;\u003C/span>,\n                description=\u003Cspan class=\"hljs-string\">&quot;Select word and make bold&quot;\u003C/span>,\n                trigger_keys=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Alt+B&quot;\u003C/span>,\n                action_sequence=[\n                    \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+right&quot;\u003C/span>,  \u003Cspan class=\"hljs-comment\"># Select word\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;ctrl+c&quot;\u003C/span>,            \u003Cspan class=\"hljs-comment\"># Copy\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;type:**&quot;\u003C/span>,           \u003Cspan class=\"hljs-comment\"># Type bold markers\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;ctrl+v&quot;\u003C/span>,            \u003Cspan class=\"hljs-comment\"># Paste word\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;type:**&quot;\u003C/span>,           \u003Cspan class=\"hljs-comment\"># Close bold markers\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;right&quot;\u003C/span>              \u003Cspan class=\"hljs-comment\"># Move cursor past formatting\u003C/span>\n                ]\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;header_navigation&#x27;\u003C/span>: ShortcutSequence(\n                name=\u003Cspan class=\"hljs-string\">&quot;Header Navigation&quot;\u003C/span>,\n                description=\u003Cspan class=\"hljs-string\">&quot;Quick navigation through document headers&quot;\u003C/span>,\n                trigger_keys=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Alt+H&quot;\u003C/span>,\n                action_sequence=[\n                    \u003Cspan class=\"hljs-string\">&quot;ctrl+f&quot;\u003C/span>,            \u003Cspan class=\"hljs-comment\"># Open find\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;type:^#&quot;\u003C/span>,           \u003Cspan class=\"hljs-comment\"># Search for headers\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+enter&quot;\u003C/span>,  \u003Cspan class=\"hljs-comment\"># Find all\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;escape&quot;\u003C/span>             \u003Cspan class=\"hljs-comment\"># Close find\u003C/span>\n                ]\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;smart_list_continuation&#x27;\u003C/span>: ShortcutSequence(\n                name=\u003Cspan class=\"hljs-string\">&quot;Smart List Item&quot;\u003C/span>,\n                description=\u003Cspan class=\"hljs-string\">&quot;Intelligently continue list items&quot;\u003C/span>,\n                trigger_keys=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Shift+Enter&quot;\u003C/span>,\n                action_sequence=[\n                    \u003Cspan class=\"hljs-string\">&quot;home&quot;\u003C/span>,              \u003Cspan class=\"hljs-comment\"># Go to line start\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+right&quot;\u003C/span>,  \u003Cspan class=\"hljs-comment\"># Select list marker\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;ctrl+c&quot;\u003C/span>,            \u003Cspan class=\"hljs-comment\"># Copy marker\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;end&quot;\u003C/span>,               \u003Cspan class=\"hljs-comment\"># Go to line end\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;enter&quot;\u003C/span>,             \u003Cspan class=\"hljs-comment\"># New line\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;ctrl+v&quot;\u003C/span>,            \u003Cspan class=\"hljs-comment\"># Paste marker\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;type: &quot;\u003C/span>             \u003Cspan class=\"hljs-comment\"># Add space\u003C/span>\n                ]\n            ),\n            \u003Cspan class=\"hljs-string\">&#x27;code_block_wrap&#x27;\u003C/span>: ShortcutSequence(\n                name=\u003Cspan class=\"hljs-string\">&quot;Wrap Selection in Code Block&quot;\u003C/span>,\n                description=\u003Cspan class=\"hljs-string\">&quot;Wrap selected text in fenced code block&quot;\u003C/span>,\n                trigger_keys=\u003Cspan class=\"hljs-string\">&quot;Ctrl+Alt+C&quot;\u003C/span>,\n                action_sequence=[\n                    \u003Cspan class=\"hljs-string\">&quot;home&quot;\u003C/span>,              \u003Cspan class=\"hljs-comment\"># Go to line start\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;type:```&quot;\u003C/span>,          \u003Cspan class=\"hljs-comment\"># Start code block\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;enter&quot;\u003C/span>,             \u003Cspan class=\"hljs-comment\"># New line\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;down&quot;\u003C/span>,              \u003Cspan class=\"hljs-comment\"># Move to end of selection\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;end&quot;\u003C/span>,               \u003Cspan class=\"hljs-comment\"># Go to line end\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;enter&quot;\u003C/span>,             \u003Cspan class=\"hljs-comment\"># New line\u003C/span>\n                    \u003Cspan class=\"hljs-string\">&quot;type:```&quot;\u003C/span>           \u003Cspan class=\"hljs-comment\"># End code block\u003C/span>\n                ]\n            )\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">expand_template\u003C/span>(\u003Cspan class=\"hljs-params\">self, template_name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, values: \u003Cspan class=\"hljs-type\">Dict\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>, \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;Expand template with provided values&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> template_name \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;Template &#x27;\u003Cspan class=\"hljs-subst\">{template_name}\u003C/span>&#x27; not found&quot;\u003C/span>)\n        \n        template = self.templates[template_name]\n        result = template.template\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> placeholder \u003Cspan class=\"hljs-keyword\">in\u003C/span> template.placeholders:\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> placeholder \u003Cspan class=\"hljs-keyword\">in\u003C/span> values:\n                result = result.replace(\u003Cspan class=\"hljs-string\">f&quot;{{\u003Cspan class=\"hljs-subst\">{placeholder}\u003C/span>}}&quot;\u003C/span>, values[placeholder])\n            \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n                result = result.replace(\u003Cspan class=\"hljs-string\">f&quot;{{\u003Cspan class=\"hljs-subst\">{placeholder}\u003C/span>}}&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">f&quot;[\u003Cspan class=\"hljs-subst\">{placeholder.upper()}\u003C/span>]&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> result\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">create_smart_snippet\u003C/span>(\u003Cspan class=\"hljs-params\">self, trigger: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, content: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, \n                           cursor_position: \u003Cspan class=\"hljs-type\">Optional\u003C/span>[\u003Cspan class=\"hljs-type\">Tuple\u003C/span>[\u003Cspan class=\"hljs-built_in\">int\u003C/span>, \u003Cspan class=\"hljs-built_in\">int\u003C/span>]] = \u003Cspan class=\"hljs-literal\">None\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Create intelligent text snippet with cursor positioning&quot;&quot;&quot;\u003C/span>\n        self.snippets[trigger] = {\n            \u003Cspan class=\"hljs-string\">&#x27;content&#x27;\u003C/span>: content,\n            \u003Cspan class=\"hljs-string\">&#x27;cursor_position&#x27;\u003C/span>: cursor_position,\n            \u003Cspan class=\"hljs-string\">&#x27;created&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">True\u003C/span>\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">process_abbreviations\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;Expand common abbreviations and shortcuts&quot;&quot;&quot;\u003C/span>\n        abbreviations = {\n            \u003Cspan class=\"hljs-comment\"># Common Markdown patterns\u003C/span>\n            \u003Cspan class=\"hljs-string\">&#x27;h1.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;# &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;h2.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;## &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;h3.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;### &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;h4.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;#### &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;h5.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;##### &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;h6.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;###### &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;ul.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;- &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;ol.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;1. &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;cb.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```\\n\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;code.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;`|`&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;bold.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;**|**&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;italic.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;*|*&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;strike.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;~~|~~&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;quote.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&gt; &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;hr.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;---\\n&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;br.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;  \\n&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;link.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;[]()&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;img.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;![]()&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;table.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;| | | |\\n|---|---|---|\\n| | | |&#x27;\u003C/span>,\n            \n            \u003Cspan class=\"hljs-comment\"># Advanced patterns\u003C/span>\n            \u003Cspan class=\"hljs-string\">&#x27;frontmatter.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;---\\ntitle: &quot;&quot;\\ndescription: &quot;&quot;\\ndate: \\n---\\n\\n&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;details.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&lt;details&gt;\\n&lt;summary&gt;&lt;/summary&gt;\\n\\n\\n&lt;/details&gt;&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;kbd.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&lt;kbd&gt;&lt;/kbd&gt;&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;center.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&lt;div align=&quot;center&quot;&gt;\\n\\n&lt;/div&gt;&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;warning.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&gt; **Warning:** \\n&gt; &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;note.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&gt; **Note:** \\n&gt; &#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;tip.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&gt; **Tip:** \\n&gt; &#x27;\u003C/span>,\n            \n            \u003Cspan class=\"hljs-comment\"># Code block shortcuts\u003C/span>\n            \u003Cspan class=\"hljs-string\">&#x27;js.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```javascript\\n\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;py.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```python\\n\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;bash.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```bash\\n\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;html.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```html\\n\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;css.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```css\\n\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;json.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```json\\n\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;yaml.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```yaml\\n\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;sql.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```sql\\n\\n```&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;md.&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```markdown\\n\\n```&#x27;\u003C/span>,\n            \n            \u003Cspan class=\"hljs-comment\"># Date and time shortcuts\u003C/span>\n            \u003Cspan class=\"hljs-string\">&#x27;today.&#x27;\u003C/span>: self.get_current_date(),\n            \u003Cspan class=\"hljs-string\">&#x27;now.&#x27;\u003C/span>: self.get_current_datetime(),\n            \u003Cspan class=\"hljs-string\">&#x27;time.&#x27;\u003C/span>: self.get_current_time()\n        }\n        \n        \u003Cspan class=\"hljs-comment\"># Process abbreviations\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> abbrev, expansion \u003Cspan class=\"hljs-keyword\">in\u003C/span> abbreviations.items():\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> abbrev \u003Cspan class=\"hljs-keyword\">in\u003C/span> text:\n                \u003Cspan class=\"hljs-comment\"># Handle cursor positioning with | marker\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> expansion:\n                    text = text.replace(abbrev, expansion.replace(\u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>))\n                \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n                    text = text.replace(abbrev, expansion)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> text\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">get_current_date\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Get current date in YYYY-MM-DD format&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">from\u003C/span> datetime \u003Cspan class=\"hljs-keyword\">import\u003C/span> datetime\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> datetime.now().strftime(\u003Cspan class=\"hljs-string\">&#x27;%Y-%m-%d&#x27;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">get_current_datetime\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Get current datetime in ISO format&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">from\u003C/span> datetime \u003Cspan class=\"hljs-keyword\">import\u003C/span> datetime\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> datetime.now().isoformat()\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">get_current_time\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Get current time in HH:MM format&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">from\u003C/span> datetime \u003Cspan class=\"hljs-keyword\">import\u003C/span> datetime\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> datetime.now().strftime(\u003Cspan class=\"hljs-string\">&#x27;%H:%M&#x27;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">generate_table_of_contents\u003C/span>(\u003Cspan class=\"hljs-params\">self, markdown_content: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, \n                                 max_depth: \u003Cspan class=\"hljs-built_in\">int\u003C/span> = \u003Cspan class=\"hljs-number\">3\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Generate table of contents from markdown headers&quot;&quot;&quot;\u003C/span>\n        headers = []\n        lines = markdown_content.split(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> line \u003Cspan class=\"hljs-keyword\">in\u003C/span> lines:\n            \u003Cspan class=\"hljs-keyword\">match\u003C/span> = re.\u003Cspan class=\"hljs-keyword\">match\u003C/span>(\u003Cspan class=\"hljs-string\">r&#x27;^(#{1,6})\\s+(.+)$&#x27;\u003C/span>, line.strip())\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">match\u003C/span>:\n                level = \u003Cspan class=\"hljs-built_in\">len\u003C/span>(\u003Cspan class=\"hljs-keyword\">match\u003C/span>.group(\u003Cspan class=\"hljs-number\">1\u003C/span>))\n                text = \u003Cspan class=\"hljs-keyword\">match\u003C/span>.group(\u003Cspan class=\"hljs-number\">2\u003C/span>)\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> level &lt;= max_depth:\n                    \u003Cspan class=\"hljs-comment\"># Generate anchor link\u003C/span>\n                    anchor = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;[^\\w\\s-]&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>, text.lower())\n                    anchor = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;[-\\s]+&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span>, anchor).strip(\u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span>)\n                    \n                    indent = \u003Cspan class=\"hljs-string\">&#x27;  &#x27;\u003C/span> * (level - \u003Cspan class=\"hljs-number\">1\u003C/span>)\n                    headers.append(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{indent}\u003C/span>- [\u003Cspan class=\"hljs-subst\">{text}\u003C/span>](#\u003Cspan class=\"hljs-subst\">{anchor}\u003C/span>)&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> headers:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;## Table of Contents\\n\\n&quot;\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>.join(headers) + \u003Cspan class=\"hljs-string\">&quot;\\n\\n&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">optimize_document_structure\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;Optimize document structure for readability&quot;&quot;&quot;\u003C/span>\n        lines = content.split(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>)\n        optimized_lines = []\n        \n        prev_line_type = \u003Cspan class=\"hljs-literal\">None\u003C/span>\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> line \u003Cspan class=\"hljs-keyword\">in\u003C/span> lines:\n            line_type = self.classify_line_type(line)\n            \n            \u003Cspan class=\"hljs-comment\"># Add spacing for better readability\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> self.needs_spacing(prev_line_type, line_type):\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> optimized_lines \u003Cspan class=\"hljs-keyword\">and\u003C/span> optimized_lines[-\u003Cspan class=\"hljs-number\">1\u003C/span>].strip():\n                    optimized_lines.append(\u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>)\n            \n            optimized_lines.append(line)\n            prev_line_type = line_type\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>.join(optimized_lines)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">classify_line_type\u003C/span>(\u003Cspan class=\"hljs-params\">self, line: \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;Classify the type of a markdown line&quot;&quot;&quot;\u003C/span>\n        stripped = line.strip()\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> stripped:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;empty&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">elif\u003C/span> stripped.startswith(\u003Cspan class=\"hljs-string\">&#x27;#&#x27;\u003C/span>):\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;header&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">elif\u003C/span> stripped.startswith(\u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>):\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;code_fence&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">elif\u003C/span> stripped.startswith(\u003Cspan class=\"hljs-string\">&#x27;&gt;&#x27;\u003C/span>):\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;quote&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">elif\u003C/span> stripped.startswith((\u003Cspan class=\"hljs-string\">&#x27;- &#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;* &#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;+ &#x27;\u003C/span>)) \u003Cspan class=\"hljs-keyword\">or\u003C/span> re.\u003Cspan class=\"hljs-keyword\">match\u003C/span>(\u003Cspan class=\"hljs-string\">r&#x27;^\\d+\\. &#x27;\u003C/span>, stripped):\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">elif\u003C/span> stripped.startswith(\u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">and\u003C/span> stripped.endswith(\u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span>):\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;table&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">elif\u003C/span> stripped \u003Cspan class=\"hljs-keyword\">in\u003C/span> [\u003Cspan class=\"hljs-string\">&#x27;---&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;***&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;___&#x27;\u003C/span>]:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;horizontal_rule&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">needs_spacing\u003C/span>(\u003Cspan class=\"hljs-params\">self, prev_type: \u003Cspan class=\"hljs-type\">Optional\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>], curr_type: \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;Determine if spacing is needed between line types&quot;&quot;&quot;\u003C/span>\n        spacing_rules = {\n            (\u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;header&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;code_fence&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;quote&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;horizontal_rule&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;header&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;list&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;code_fence&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;header&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;code_fence&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;quote&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;header&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;quote&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;header&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>,\n            (\u003Cspan class=\"hljs-string\">&#x27;horizontal_rule&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>): \u003Cspan class=\"hljs-literal\">True\u003C/span>\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> spacing_rules.get((prev_type, curr_type), \u003Cspan class=\"hljs-literal\">False\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">create_productivity_report\u003C/span>(\u003Cspan class=\"hljs-params\">self, text: \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;Analyze text for productivity metrics&quot;&quot;&quot;\u003C/span>\n        lines = text.split(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>)\n        \n        metrics = {\n            \u003Cspan class=\"hljs-string\">&#x27;total_lines&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>(lines),\n            \u003Cspan class=\"hljs-string\">&#x27;word_count&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>(text.split()),\n            \u003Cspan class=\"hljs-string\">&#x27;character_count&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>(text),\n            \u003Cspan class=\"hljs-string\">&#x27;header_count&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>([l \u003Cspan class=\"hljs-keyword\">for\u003C/span> l \u003Cspan class=\"hljs-keyword\">in\u003C/span> lines \u003Cspan class=\"hljs-keyword\">if\u003C/span> l.strip().startswith(\u003Cspan class=\"hljs-string\">&#x27;#&#x27;\u003C/span>)]),\n            \u003Cspan class=\"hljs-string\">&#x27;list_item_count&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>([l \u003Cspan class=\"hljs-keyword\">for\u003C/span> l \u003Cspan class=\"hljs-keyword\">in\u003C/span> lines \u003Cspan class=\"hljs-keyword\">if\u003C/span> re.\u003Cspan class=\"hljs-keyword\">match\u003C/span>(\u003Cspan class=\"hljs-string\">r&#x27;^\\s*[-*+]\\s&#x27;\u003C/span>, l)]),\n            \u003Cspan class=\"hljs-string\">&#x27;code_block_count&#x27;\u003C/span>: text.count(\u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>) // \u003Cspan class=\"hljs-number\">2\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;link_count&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>(re.findall(\u003Cspan class=\"hljs-string\">r&#x27;\\[([^\\]]+)\\]\\([^)]+\\)&#x27;\u003C/span>, text)),\n            \u003Cspan class=\"hljs-string\">&#x27;image_count&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>(re.findall(\u003Cspan class=\"hljs-string\">r&#x27;!\\[([^\\]]*)\\]\\([^)]+\\)&#x27;\u003C/span>, text)),\n            \u003Cspan class=\"hljs-string\">&#x27;estimated_reading_time&#x27;\u003C/span>: \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>),  \u003Cspan class=\"hljs-comment\"># ~200 WPM\u003C/span>\n            \u003Cspan class=\"hljs-string\">&#x27;complexity_score&#x27;\u003C/span>: self.calculate_complexity_score(text)\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> metrics\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">calculate_complexity_score\u003C/span>(\u003Cspan class=\"hljs-params\">self, text: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">float\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Calculate document complexity score (0-100)&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-comment\"># Factor in various complexity indicators\u003C/span>\n        factors = {\n            \u003Cspan class=\"hljs-string\">&#x27;average_sentence_length&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">min\u003C/span>(\u003Cspan class=\"hljs-number\">100\u003C/span>, \u003Cspan class=\"hljs-built_in\">len\u003C/span>(text.split()) / \u003Cspan class=\"hljs-built_in\">max\u003C/span>(\u003Cspan class=\"hljs-number\">1\u003C/span>, text.count(\u003Cspan class=\"hljs-string\">&#x27;.&#x27;\u003C/span>))),\n            \u003Cspan class=\"hljs-string\">&#x27;code_density&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">min\u003C/span>(\u003Cspan class=\"hljs-number\">100\u003C/span>, (text.count(\u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>) * \u003Cspan class=\"hljs-number\">10\u003C/span>)),\n            \u003Cspan class=\"hljs-string\">&#x27;link_density&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">min\u003C/span>(\u003Cspan class=\"hljs-number\">100\u003C/span>, (\u003Cspan class=\"hljs-built_in\">len\u003C/span>(re.findall(\u003Cspan class=\"hljs-string\">r&#x27;\\[([^\\]]+)\\]\\([^)]+\\)&#x27;\u003C/span>, text)) * \u003Cspan class=\"hljs-number\">5\u003C/span>)),\n            \u003Cspan class=\"hljs-string\">&#x27;list_density&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">min\u003C/span>(\u003Cspan class=\"hljs-number\">100\u003C/span>, (\u003Cspan class=\"hljs-built_in\">len\u003C/span>(re.findall(\u003Cspan class=\"hljs-string\">r&#x27;^\\s*[-*+]\\s&#x27;\u003C/span>, text, re.MULTILINE)) * \u003Cspan class=\"hljs-number\">3\u003C/span>)),\n            \u003Cspan class=\"hljs-string\">&#x27;table_presence&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">min\u003C/span>(\u003Cspan class=\"hljs-number\">100\u003C/span>, (text.count(\u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span>) * \u003Cspan class=\"hljs-number\">2\u003C/span>))\n        }\n        \n        \u003Cspan class=\"hljs-comment\"># Weight the factors\u003C/span>\n        weights = {\n            \u003Cspan class=\"hljs-string\">&#x27;average_sentence_length&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0.3\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;code_density&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0.25\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;link_density&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0.2\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;list_density&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0.15\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;table_presence&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0.1\u003C/span>\n        }\n        \n        score = \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(factors[key] * weights[key] \u003Cspan class=\"hljs-keyword\">for\u003C/span> key \u003Cspan class=\"hljs-keyword\">in\u003C/span> factors)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-built_in\">min\u003C/span>(\u003Cspan class=\"hljs-number\">100\u003C/span>, score)\n\n\u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">demonstrate_automation_engine\u003C/span>():\n    \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Demonstrate the automation engine capabilities&quot;&quot;&quot;\u003C/span>\n    engine = MarkdownAutomationEngine()\n    \n    \u003Cspan class=\"hljs-comment\"># Template expansion example\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;=== Template Expansion ===&quot;\u003C/span>)\n    frontmatter = engine.expand_template(\u003Cspan class=\"hljs-string\">&#x27;frontmatter&#x27;\u003C/span>, {\n        \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Advanced Markdown Guide&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-string\">&#x27;description&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Complete guide to Markdown automation&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-string\">&#x27;keywords&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;markdown, automation, productivity&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-string\">&#x27;layout&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;post&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-string\">&#x27;date&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;2025-12-12&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-string\">&#x27;author&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Documentation Team&#x27;\u003C/span>\n    })\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(frontmatter)\n    \n    \u003Cspan class=\"hljs-comment\"># Abbreviation processing example\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;\\n=== Abbreviation Processing ===&quot;\u003C/span>)\n    sample_text = \u003Cspan class=\"hljs-string\">&quot;h1. Introduction\\n\\nThis is a js. example with cb. formatting.\\n\\ntoday. is the date.&quot;\u003C/span>\n    expanded = engine.process_abbreviations(sample_text)\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;Original:&quot;\u003C/span>, sample_text)\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;Expanded:&quot;\u003C/span>, expanded)\n    \n    \u003Cspan class=\"hljs-comment\"># TOC generation example\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;\\n=== Table of Contents Generation ===&quot;\u003C/span>)\n    sample_content = \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;# Introduction\n    \nThis is the introduction.\n\n## Getting Started\n\nBasic information here.\n\n### Installation\n\nInstallation instructions.\n\n### Configuration  \n\nConfiguration details.\n\n## Advanced Usage\n\nAdvanced topics.\n\n### Custom Settings\n\nSettings information.\n&quot;&quot;&quot;\u003C/span>\n    toc = engine.generate_table_of_contents(sample_content)\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(toc)\n    \n    \u003Cspan class=\"hljs-comment\"># Productivity analysis\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;\\n=== Productivity Analysis ===&quot;\u003C/span>)\n    metrics = engine.create_productivity_report(sample_content)\n    \u003Cspan class=\"hljs-keyword\">for\u003C/span> key, value \u003Cspan class=\"hljs-keyword\">in\u003C/span> metrics.items():\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{key.replace(\u003Cspan class=\"hljs-string\">&#x27;_&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>).title()}\u003C/span>: \u003Cspan class=\"hljs-subst\">{value}\u003C/span>&quot;\u003C/span>)\n\n\u003Cspan class=\"hljs-keyword\">if\u003C/span> __name__ == \u003Cspan class=\"hljs-string\">&quot;__main__&quot;\u003C/span>:\n    demonstrate_automation_engine()\n\u003C/code>\u003C/pre>\u003Ch3 id=\"text-expansion-and-snippet-systems\">Text Expansion and Snippet Systems\u003C/h3>\n\u003Cp>Advanced text expansion for common Markdown patterns:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// markdown-text-expander.js - Browser-based text expansion system\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTextExpander\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">expansions\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">isActive\u003C/span> = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentTrigger\u003C/span> = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">triggerStart\u003C/span> = -\u003Cspan class=\"hljs-number\">1\u003C/span>;\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">initializeExpansions\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupEventListeners\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">initializeExpansions\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Basic formatting expansions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//b&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;**{cursor}**&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Bold text&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//i&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;*{cursor}*&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Italic text&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//s&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;~~{cursor}~~&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Strikethrough text&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//c&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;`{cursor}`&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Inline code&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Header expansions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//h1&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;# {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;H1 Header&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//h2&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;## {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;H2 Header&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//h3&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;### {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;H3 Header&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//h4&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;#### {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;H4 Header&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//h5&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;##### {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;H5 Header&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//h6&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;###### {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;H6 Header&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// List expansions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//ul&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;- {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Unordered list item&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//ol&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;1. {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Ordered list item&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//task&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;- [ ] {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Task list item&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//done&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;- [x] {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Completed task&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Link and image expansions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//link&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;[{cursor}]()&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Link&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//img&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;![{alt}]({url})&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Image&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//ref&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;[{text}][{ref}]&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Reference link&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Code block expansions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//code&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Code block&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//js&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```javascript\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;JavaScript code&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//py&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```python\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Python code&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//bash&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```bash\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Bash code&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//html&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```html\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;HTML code&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//css&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```css\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;CSS code&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//json&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```json\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;JSON code&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//yaml&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```yaml\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;YAML code&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//sql&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```sql\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;SQL code&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//md&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;```markdown\\n{cursor}\\n```&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Markdown code&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Structure expansions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//quote&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&gt; {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Blockquote&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//hr&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;---&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Horizontal rule&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//br&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;  \\n{cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Line break&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//toc&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;## Table of Contents\\n\\n{cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Table of contents&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Table expansions  \u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//table&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createTableTemplate\u003C/span>(\u003Cspan class=\"hljs-number\">3\u003C/span>, \u003Cspan class=\"hljs-number\">3\u003C/span>), \u003Cspan class=\"hljs-string\">&#x27;Basic table&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//table2&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createTableTemplate\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-number\">4\u003C/span>), \u003Cspan class=\"hljs-string\">&#x27;2-column table&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//table4&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createTableTemplate\u003C/span>(\u003Cspan class=\"hljs-number\">4\u003C/span>, \u003Cspan class=\"hljs-number\">3\u003C/span>), \u003Cspan class=\"hljs-string\">&#x27;4-column table&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Advanced expansions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//details&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&lt;details&gt;\\n&lt;summary&gt;{summary}&lt;/summary&gt;\\n\\n{cursor}\\n\\n&lt;/details&gt;&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Collapsible details&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//kbd&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&lt;kbd&gt;{cursor}&lt;/kbd&gt;&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Keyboard key&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//center&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&lt;div align=&quot;center&quot;&gt;\\n{cursor}\\n&lt;/div&gt;&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Center align&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//warning&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&gt; **⚠️ Warning:** {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Warning callout&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//note&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&gt; **📝 Note:** {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Note callout&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//tip&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&gt; **💡 Tip:** {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Tip callout&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//info&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&gt; **ℹ️ Info:** {cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Info callout&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Date and time expansions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//date&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getCurrentDate\u003C/span>(), \u003Cspan class=\"hljs-string\">&#x27;Current date&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//time&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getCurrentTime\u003C/span>(), \u003Cspan class=\"hljs-string\">&#x27;Current time&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//datetime&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getCurrentDateTime\u003C/span>(), \u003Cspan class=\"hljs-string\">&#x27;Current date and time&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//iso&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getCurrentISODate\u003C/span>(), \u003Cspan class=\"hljs-string\">&#x27;ISO date format&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Document structure expansions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//frontmatter&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createFrontmatterTemplate\u003C/span>(), \u003Cspan class=\"hljs-string\">&#x27;Document frontmatter&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//readme&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createReadmeTemplate\u003C/span>(), \u003Cspan class=\"hljs-string\">&#x27;README structure&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//changelog&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createChangelogTemplate\u003C/span>(), \u003Cspan class=\"hljs-string\">&#x27;Changelog entry&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//api&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createApiDocTemplate\u003C/span>(), \u003Cspan class=\"hljs-string\">&#x27;API documentation&#x27;\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-params\">trigger, expansion, description\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">expansions\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(trigger.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>(), {\n            expansion,\n            description,\n            trigger\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createTableTemplate\u003C/span>(\u003Cspan class=\"hljs-params\">cols, rows\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> headers = \u003Cspan class=\"hljs-title class_\">Array\u003C/span>(cols).\u003Cspan class=\"hljs-title function_\">fill\u003C/span>().\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">_, i\u003C/span>) =&gt;\u003C/span> \u003Cspan class=\"hljs-string\">`Column \u003Cspan class=\"hljs-subst\">${i + \u003Cspan class=\"hljs-number\">1\u003C/span>}\u003C/span>`\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> separator = \u003Cspan class=\"hljs-title class_\">Array\u003C/span>(cols).\u003Cspan class=\"hljs-title function_\">fill\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;---&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> dataRows = \u003Cspan class=\"hljs-title class_\">Array\u003C/span>(rows - \u003Cspan class=\"hljs-number\">1\u003C/span>).\u003Cspan class=\"hljs-title function_\">fill\u003C/span>().\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> \u003Cspan class=\"hljs-title class_\">Array\u003C/span>(cols).\u003Cspan class=\"hljs-title function_\">fill\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>));\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> table = \u003Cspan class=\"hljs-string\">`| \u003Cspan class=\"hljs-subst\">${headers.join(\u003Cspan class=\"hljs-string\">&#x27; | &#x27;\u003C/span>)}\u003C/span> |\\n`\u003C/span>;\n        table += \u003Cspan class=\"hljs-string\">`|\u003Cspan class=\"hljs-subst\">${separator.join(\u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span>)}\u003C/span>|\\n`\u003C/span>;\n        \n        dataRows.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">row\u003C/span> =&gt;\u003C/span> {\n            table += \u003Cspan class=\"hljs-string\">`| \u003Cspan class=\"hljs-subst\">${row.join(\u003Cspan class=\"hljs-string\">&#x27; | &#x27;\u003C/span>)}\u003C/span> |\\n`\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> table + \u003Cspan class=\"hljs-string\">&#x27;{cursor}&#x27;\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getCurrentDate\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>().\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;T&#x27;\u003C/span>)[\u003Cspan class=\"hljs-number\">0\u003C/span>];\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getCurrentTime\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toTimeString\u003C/span>().\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>)[\u003Cspan class=\"hljs-number\">0\u003C/span>].\u003Cspan class=\"hljs-title function_\">substr\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">5\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getCurrentDateTime\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> now = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> now.\u003Cspan class=\"hljs-title function_\">toLocaleDateString\u003C/span>() + \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span> + \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getCurrentTime\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getCurrentISODate\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createFrontmatterTemplate\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`---\ntitle: &quot;{cursor}&quot;\ndescription: &quot;&quot;\nkeywords: \nlayout: post\ndate: \u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.getCurrentDate()}\u003C/span>\nauthor: \n---\n\n`\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createReadmeTemplate\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`# {Project Name}\n\n{Brief description of the project}\n\n## Installation\n\n\\`\\`\\`bash\n{installation commands}\n\\`\\`\\`\n\n## Usage\n\n{usage examples}\n\n## Contributing\n\n{contribution guidelines}\n\n## License\n\n{license information}\n\n{cursor}`\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createChangelogTemplate\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`## [Unreleased] - \u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.getCurrentDate()}\u003C/span>\n\n### Added\n- {cursor}\n\n### Changed\n- \n\n### Deprecated\n- \n\n### Removed\n- \n\n### Fixed\n- \n\n### Security\n- `\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createApiDocTemplate\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`### {METHOD} {endpoint}\n\n**Description:** {cursor}\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| {param}   | {type} | {yes/no} | {description} |\n\n**Example Request:**\n\n\\`\\`\\`bash\ncurl -X {METHOD} \\\\\n  {endpoint} \\\\\n  -H &quot;Authorization: Bearer {token}&quot;\n\\`\\`\\`\n\n**Response:**\n\n\\`\\`\\`json\n{\n  &quot;status&quot;: &quot;success&quot;,\n  &quot;data&quot;: {}\n}\n\\`\\`\\``\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupEventListeners\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">document\u003C/span>.\u003Cspan class=\"hljs-title function_\">addEventListener\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;keydown&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">handleKeyDown\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>));\n        \u003Cspan class=\"hljs-variable language_\">document\u003C/span>.\u003Cspan class=\"hljs-title function_\">addEventListener\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;input&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">handleInput\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>));\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">handleKeyDown\u003C/span>(\u003Cspan class=\"hljs-params\">event\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Handle tab completion for expansions\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (event.\u003Cspan class=\"hljs-property\">key\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;Tab&#x27;\u003C/span> &amp;&amp; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">isActive\u003C/span>) {\n            event.\u003Cspan class=\"hljs-title function_\">preventDefault\u003C/span>();\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">triggerExpansion\u003C/span>(event.\u003Cspan class=\"hljs-property\">target\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Handle escape to cancel expansion\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (event.\u003Cspan class=\"hljs-property\">key\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;Escape&#x27;\u003C/span> &amp;&amp; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">isActive\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">resetExpansionState\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Handle space or enter to trigger expansion\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> ((event.\u003Cspan class=\"hljs-property\">key\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span> || event.\u003Cspan class=\"hljs-property\">key\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;Enter&#x27;\u003C/span>) &amp;&amp; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">isActive\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">triggerExpansion\u003C/span>(event.\u003Cspan class=\"hljs-property\">target\u003C/span>);\n            event.\u003Cspan class=\"hljs-title function_\">preventDefault\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">handleInput\u003C/span>(\u003Cspan class=\"hljs-params\">event\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> element = event.\u003Cspan class=\"hljs-property\">target\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">isTextInput\u003C/span>(element)) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> text = element.\u003Cspan class=\"hljs-property\">value\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> cursorPos = element.\u003Cspan class=\"hljs-property\">selectionStart\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Look for trigger patterns\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> beforeCursor = text.\u003Cspan class=\"hljs-title function_\">substring\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, cursorPos);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> triggerMatch = beforeCursor.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\/\\/\\w+$/\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (triggerMatch) {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentTrigger\u003C/span> = triggerMatch[\u003Cspan class=\"hljs-number\">0\u003C/span>];\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">triggerStart\u003C/span> = cursorPos - \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentTrigger\u003C/span>.\u003Cspan class=\"hljs-property\">length\u003C/span>;\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">isActive\u003C/span> = \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">showExpansionPreview\u003C/span>(element);\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">resetExpansionState\u003C/span>();\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">isTextInput\u003C/span>(\u003Cspan class=\"hljs-params\">element\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> element.\u003Cspan class=\"hljs-property\">tagName\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;TEXTAREA&#x27;\u003C/span> || \n               (element.\u003Cspan class=\"hljs-property\">tagName\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;INPUT&#x27;\u003C/span> &amp;&amp; element.\u003Cspan class=\"hljs-property\">type\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>) ||\n               element.\u003Cspan class=\"hljs-property\">contentEditable\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;true&#x27;\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">triggerExpansion\u003C/span>(\u003Cspan class=\"hljs-params\">element\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">isActive\u003C/span> || !\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentTrigger\u003C/span>) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> expansion = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">expansions\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentTrigger\u003C/span>.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>());\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!expansion) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> text = element.\u003Cspan class=\"hljs-property\">value\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> beforeTrigger = text.\u003Cspan class=\"hljs-title function_\">substring\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">triggerStart\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> afterCursor = text.\u003Cspan class=\"hljs-title function_\">substring\u003C/span>(element.\u003Cspan class=\"hljs-property\">selectionStart\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Process the expansion\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> expandedText = expansion.\u003Cspan class=\"hljs-property\">expansion\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> cursorOffset = \u003Cspan class=\"hljs-number\">0\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Handle cursor positioning\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (expandedText.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;{cursor}&#x27;\u003C/span>)) {\n            cursorOffset = beforeTrigger.\u003Cspan class=\"hljs-property\">length\u003C/span> + expandedText.\u003Cspan class=\"hljs-title function_\">indexOf\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;{cursor}&#x27;\u003C/span>);\n            expandedText = expandedText.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;{cursor}&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>);\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            cursorOffset = beforeTrigger.\u003Cspan class=\"hljs-property\">length\u003C/span> + expandedText.\u003Cspan class=\"hljs-property\">length\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Handle placeholder variables\u003C/span>\n        expandedText = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processPlaceholders\u003C/span>(expandedText);\n        \n        \u003Cspan class=\"hljs-comment\">// Update the text\u003C/span>\n        element.\u003Cspan class=\"hljs-property\">value\u003C/span> = beforeTrigger + expandedText + afterCursor;\n        \n        \u003Cspan class=\"hljs-comment\">// Position cursor\u003C/span>\n        element.\u003Cspan class=\"hljs-title function_\">setSelectionRange\u003C/span>(cursorOffset, cursorOffset);\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">resetExpansionState\u003C/span>();\n        element.\u003Cspan class=\"hljs-title function_\">focus\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">processPlaceholders\u003C/span>(\u003Cspan class=\"hljs-params\">text\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Handle common placeholders\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> placeholders = {\n            \u003Cspan class=\"hljs-string\">&#x27;{alt}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;alt text&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{url}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;url&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{text}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;link text&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{ref}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;reference&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{summary}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Summary&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{param}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;parameter&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{type}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{yes/no}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;yes&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{description}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Description&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{METHOD}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;GET&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{endpoint}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;/api/endpoint&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;{token}&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;your-token&#x27;\u003C/span>\n        };\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> [placeholder, defaultValue] \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(placeholders)) {\n            text = text.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">RegExp\u003C/span>(placeholder.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/[{}]/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;\\\\$&amp;&#x27;\u003C/span>), \u003Cspan class=\"hljs-string\">&#x27;g&#x27;\u003C/span>), defaultValue);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> text;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">showExpansionPreview\u003C/span>(\u003Cspan class=\"hljs-params\">element\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> expansion = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">expansions\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentTrigger\u003C/span>.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>());\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!expansion) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Create or update preview tooltip\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> preview = \u003Cspan class=\"hljs-variable language_\">document\u003C/span>.\u003Cspan class=\"hljs-title function_\">getElementById\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;markdown-expansion-preview&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!preview) {\n            preview = \u003Cspan class=\"hljs-variable language_\">document\u003C/span>.\u003Cspan class=\"hljs-title function_\">createElement\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;div&#x27;\u003C/span>);\n            preview.\u003Cspan class=\"hljs-property\">id\u003C/span> = \u003Cspan class=\"hljs-string\">&#x27;markdown-expansion-preview&#x27;\u003C/span>;\n            preview.\u003Cspan class=\"hljs-property\">style\u003C/span>.\u003Cspan class=\"hljs-property\">cssText\u003C/span> = \u003Cspan class=\"hljs-string\">`\n                position: absolute;\n                background: #333;\n                color: white;\n                padding: 8px 12px;\n                border-radius: 4px;\n                font-size: 12px;\n                z-index: 1000;\n                pointer-events: none;\n                max-width: 300px;\n                word-wrap: break-word;\n                box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n            `\u003C/span>;\n            \u003Cspan class=\"hljs-variable language_\">document\u003C/span>.\u003Cspan class=\"hljs-property\">body\u003C/span>.\u003Cspan class=\"hljs-title function_\">appendChild\u003C/span>(preview);\n        }\n        \n        preview.\u003Cspan class=\"hljs-property\">innerHTML\u003C/span> = \u003Cspan class=\"hljs-string\">`&lt;strong&gt;\u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.currentTrigger}\u003C/span>&lt;/strong&gt; → \u003Cspan class=\"hljs-subst\">${expansion.description}\u003C/span>`\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Position the preview\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> rect = element.\u003Cspan class=\"hljs-title function_\">getBoundingClientRect\u003C/span>();\n        preview.\u003Cspan class=\"hljs-property\">style\u003C/span>.\u003Cspan class=\"hljs-property\">left\u003C/span> = rect.\u003Cspan class=\"hljs-property\">left\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27;px&#x27;\u003C/span>;\n        preview.\u003Cspan class=\"hljs-property\">style\u003C/span>.\u003Cspan class=\"hljs-property\">top\u003C/span> = (rect.\u003Cspan class=\"hljs-property\">bottom\u003C/span> + \u003Cspan class=\"hljs-number\">5\u003C/span>) + \u003Cspan class=\"hljs-string\">&#x27;px&#x27;\u003C/span>;\n        preview.\u003Cspan class=\"hljs-property\">style\u003C/span>.\u003Cspan class=\"hljs-property\">display\u003C/span> = \u003Cspan class=\"hljs-string\">&#x27;block&#x27;\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">resetExpansionState\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">isActive\u003C/span> = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentTrigger\u003C/span> = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">triggerStart\u003C/span> = -\u003Cspan class=\"hljs-number\">1\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> preview = \u003Cspan class=\"hljs-variable language_\">document\u003C/span>.\u003Cspan class=\"hljs-title function_\">getElementById\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;markdown-expansion-preview&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (preview) {\n            preview.\u003Cspan class=\"hljs-property\">style\u003C/span>.\u003Cspan class=\"hljs-property\">display\u003C/span> = \u003Cspan class=\"hljs-string\">&#x27;none&#x27;\u003C/span>;\n        }\n    }\n    \n    \u003Cspan class=\"hljs-comment\">// Public API methods\u003C/span>\n    \u003Cspan class=\"hljs-title function_\">getExpansions\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">from\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">expansions\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>()).\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[trigger, data]\u003C/span>) =&gt;\u003C/span> ({\n            trigger,\n            ...data\n        }));\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">addCustomExpansion\u003C/span>(\u003Cspan class=\"hljs-params\">trigger, expansion, description\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(trigger, expansion, description);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">removeExpansion\u003C/span>(\u003Cspan class=\"hljs-params\">trigger\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">expansions\u003C/span>.\u003Cspan class=\"hljs-title function_\">delete\u003C/span>(trigger.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>());\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">exportExpansions\u003C/span>(\u003Cspan class=\"hljs-params\">\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> [trigger, expansion] \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">expansions\u003C/span>) {\n            data[trigger] = expansion;\n        }\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">stringify\u003C/span>(data, \u003Cspan class=\"hljs-literal\">null\u003C/span>, \u003Cspan class=\"hljs-number\">2\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">importExpansions\u003C/span>(\u003Cspan class=\"hljs-params\">jsonData\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> data = \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(jsonData);\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> [trigger, expansion] \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(data)) {\n                \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">expansions\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(trigger, expansion);\n            }\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">true\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\">&#x27;Failed to import expansions:&#x27;\u003C/span>, error);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n        }\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Initialize the text expander when the DOM is ready\u003C/span>\n\u003Cspan class=\"hljs-variable language_\">document\u003C/span>.\u003Cspan class=\"hljs-title function_\">addEventListener\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;DOMContentLoaded&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> {\n    \u003Cspan class=\"hljs-variable language_\">window\u003C/span>.\u003Cspan class=\"hljs-property\">markdownExpander\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTextExpander\u003C/span>();\n    \n    \u003Cspan class=\"hljs-comment\">// Add a help command\u003C/span>\n    \u003Cspan class=\"hljs-variable language_\">window\u003C/span>.\u003Cspan class=\"hljs-property\">markdownExpander\u003C/span>.\u003Cspan class=\"hljs-title function_\">addExpansion\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;//help&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Show available expansions&#x27;\u003C/span>);\n    \n    \u003Cspan class=\"hljs-comment\">// Override the help trigger to show all expansions\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> originalTrigger = \u003Cspan class=\"hljs-variable language_\">window\u003C/span>.\u003Cspan class=\"hljs-property\">markdownExpander\u003C/span>.\u003Cspan class=\"hljs-property\">triggerExpansion\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">window\u003C/span>.\u003Cspan class=\"hljs-property\">markdownExpander\u003C/span>);\n    \u003Cspan class=\"hljs-variable language_\">window\u003C/span>.\u003Cspan class=\"hljs-property\">markdownExpander\u003C/span>.\u003Cspan class=\"hljs-property\">triggerExpansion\u003C/span> = \u003Cspan class=\"hljs-keyword\">function\u003C/span>(\u003Cspan class=\"hljs-params\">element\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">currentTrigger\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;//help&#x27;\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> expansions = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getExpansions\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> helpText = expansions.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">exp\u003C/span> =&gt;\u003C/span> \n                \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${exp.trigger}\u003C/span> → \u003Cspan class=\"hljs-subst\">${exp.description}\u003C/span>`\u003C/span>\n            ).\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>);\n            \n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Available Markdown expansions:\\n&#x27;\u003C/span> + helpText);\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">resetExpansionState\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title function_\">originalTrigger\u003C/span>(element);\n    };\n});\n\n\u003Cspan class=\"hljs-comment\">// Export for use in other modules\u003C/span>\n\u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-keyword\">typeof\u003C/span> \u003Cspan class=\"hljs-variable language_\">module\u003C/span> !== \u003Cspan class=\"hljs-string\">&#x27;undefined&#x27;\u003C/span> &amp;&amp; \u003Cspan class=\"hljs-variable language_\">module\u003C/span>.\u003Cspan class=\"hljs-property\">exports\u003C/span>) {\n    \u003Cspan class=\"hljs-variable language_\">module\u003C/span>.\u003Cspan class=\"hljs-property\">exports\u003C/span> = \u003Cspan class=\"hljs-title class_\">MarkdownTextExpander\u003C/span>;\n}\n\u003C/code>\u003C/pre>\u003Ch2 id=\"integration-with-documentation-systems\">Integration with Documentation Systems\u003C/h2>\n\u003Cp>Keyboard efficiency techniques integrate seamlessly with modern documentation workflows. When combined with \u003Ca href=\"/blog/markdown-automation-workflows-complete-guide\">automation systems and template management\u003C/a>, advanced shortcuts enable systematic content creation patterns that maintain consistency while dramatically improving writing speed and reducing repetitive manual formatting operations.\u003C/p>\n\u003Cp>For comprehensive workflow optimization, shortcut mastery works effectively with \u003Ca href=\"/blog/markdown-collaborative-editing-real-time-synchronization-complete-guide\">collaborative editing and real-time synchronization systems\u003C/a> to create synchronized editing experiences where team members can leverage shared shortcut patterns, standardized templates, and coordinated automation sequences that maintain document consistency across distributed editing sessions.\u003C/p>\n\u003Cp>When building sophisticated documentation platforms, productivity enhancement complements \u003Ca href=\"/blog/markdown-automated-testing-validation-complete-guide\">automated testing and validation workflows\u003C/a> by enabling rapid content iteration cycles where writers can quickly prototype and test content formatting, verify document structure through shortcuts-based navigation, and maintain quality standards through automated validation triggers integrated with keyboard-driven workflows.\u003C/p>\n\u003Ch2 id=\"platform-specific-optimization-strategies\">Platform-Specific Optimization Strategies\u003C/h2>\n\u003Ch3 id=\"cross-platform-shortcut-synchronization\">Cross-Platform Shortcut Synchronization\u003C/h3>\n\u003Cp>Maintaining consistent shortcuts across different operating systems and editors:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-meta\">#!/bin/bash\u003C/span>\n\u003Cspan class=\"hljs-comment\"># sync-shortcuts.sh - Cross-platform shortcut synchronization\u003C/span>\n\n\u003Cspan class=\"hljs-built_in\">set\u003C/span> -e\n\n\u003Cspan class=\"hljs-comment\"># Configuration directories for different platforms\u003C/span>\n\u003Cspan class=\"hljs-built_in\">declare\u003C/span> -A CONFIG_PATHS=(\n    [\u003Cspan class=\"hljs-string\">&quot;vscode-win&quot;\u003C/span>]=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$APPDATA\u003C/span>/Code/User&quot;\u003C/span>\n    [\u003Cspan class=\"hljs-string\">&quot;vscode-mac&quot;\u003C/span>]=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$HOME\u003C/span>/Library/Application Support/Code/User&quot;\u003C/span>  \n    [\u003Cspan class=\"hljs-string\">&quot;vscode-linux&quot;\u003C/span>]=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$HOME\u003C/span>/.config/Code/User&quot;\u003C/span>\n    [\u003Cspan class=\"hljs-string\">&quot;typora-win&quot;\u003C/span>]=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$APPDATA\u003C/span>/Typora&quot;\u003C/span>\n    [\u003Cspan class=\"hljs-string\">&quot;typora-mac&quot;\u003C/span>]=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$HOME\u003C/span>/Library/Application Support/abnerworks.Typora&quot;\u003C/span>\n    [\u003Cspan class=\"hljs-string\">&quot;typora-linux&quot;\u003C/span>]=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$HOME\u003C/span>/.config/Typora&quot;\u003C/span>\n    [\u003Cspan class=\"hljs-string\">&quot;obsidian-win&quot;\u003C/span>]=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$APPDATA\u003C/span>/obsidian&quot;\u003C/span>\n    [\u003Cspan class=\"hljs-string\">&quot;obsidian-mac&quot;\u003C/span>]=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$HOME\u003C/span>/Library/Application Support/obsidian&quot;\u003C/span>\n    [\u003Cspan class=\"hljs-string\">&quot;obsidian-linux&quot;\u003C/span>]=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$HOME\u003C/span>/.config/obsidian&quot;\u003C/span>\n)\n\n\u003Cspan class=\"hljs-comment\"># Detect current platform\u003C/span>\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">detect_platform\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> [[ \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$OSTYPE\u003C/span>&quot;\u003C/span> == \u003Cspan class=\"hljs-string\">&quot;darwin&quot;\u003C/span>* ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;mac&quot;\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">elif\u003C/span> [[ \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$OSTYPE\u003C/span>&quot;\u003C/span> == \u003Cspan class=\"hljs-string\">&quot;msys&quot;\u003C/span> || \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$OSTYPE\u003C/span>&quot;\u003C/span> == \u003Cspan class=\"hljs-string\">&quot;cygwin&quot;\u003C/span> ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;win&quot;\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">else\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;linux&quot;\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n}\n\n\u003Cspan class=\"hljs-comment\"># Sync VS Code settings\u003C/span>\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">sync_vscode_shortcuts\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> platform=$(detect_platform)\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> config_dir=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">${CONFIG_PATHS[&quot;vscode-$platform&quot;]}\u003C/span>&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> [[ -d \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$config_dir\u003C/span>&quot;\u003C/span> ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Syncing VS Code shortcuts for \u003Cspan class=\"hljs-variable\">$platform\u003C/span>...&quot;\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Copy keybindings.json\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">cp\u003C/span> \u003Cspan class=\"hljs-string\">&quot;./configs/vscode/keybindings-\u003Cspan class=\"hljs-variable\">$platform\u003C/span>.json&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$config_dir\u003C/span>/keybindings.json&quot;\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Copy settings.json with platform-specific markdown configurations\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">cp\u003C/span> \u003Cspan class=\"hljs-string\">&quot;./configs/vscode/settings-\u003Cspan class=\"hljs-variable\">$platform\u003C/span>.json&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$config_dir\u003C/span>/settings.json&quot;\u003C/span>\n        \n        \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;✅ VS Code shortcuts synchronized&quot;\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">else\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;⚠️  VS Code not found on this system&quot;\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n}\n\n\u003Cspan class=\"hljs-comment\"># Create universal shortcut mappings\u003C/span>\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">create_universal_mappings\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">cat\u003C/span> &gt; \u003Cspan class=\"hljs-string\">&quot;./configs/universal-shortcuts.md&quot;\u003C/span> &lt;&lt; \u003Cspan class=\"hljs-string\">&#x27;EOF&#x27;\u003C/span>\n\u003Cspan class=\"hljs-comment\"># Universal Markdown Shortcuts Reference\u003C/span>\n\n\u003Cspan class=\"hljs-comment\">## Text Formatting\u003C/span>\n| Action | Windows/Linux | macOS | VS Code | Typora | Obsidian |\n|--------|---------------|-------|---------|---------|----------|\n| Bold | Ctrl+B | Cmd+B | Ctrl+B | Cmd+B | Cmd+B |\n| Italic | Ctrl+I | Cmd+I | Ctrl+I | Cmd+I | Cmd+I |\n| Inline Code | Ctrl+` | Cmd+` | Ctrl+` | Cmd+` | Cmd+` |\n| Strikethrough | Ctrl+Shift+X | Cmd+Shift+X | Alt+S | Cmd+Shift+X | Custom |\n\n\u003Cspan class=\"hljs-comment\">## Structure\u003C/span>\n| Action | Windows/Linux | macOS | VS Code | Typora | Obsidian |\n|--------|---------------|-------|---------|---------|----------|\n| H1 | Ctrl+1 | Cmd+1 | Ctrl+Shift+] | Cmd+1 | Cmd+1 |\n| H2 | Ctrl+2 | Cmd+2 | Ctrl+Shift+] | Cmd+2 | Cmd+2 |\n| H3 | Ctrl+3 | Cmd+3 | Ctrl+Shift+] | Cmd+3 | Cmd+3 |\n| Unordered List | Ctrl+Shift+8 | Cmd+Shift+8 | Ctrl+Shift+8 | Cmd+U | Cmd+Enter |\n| Ordered List | Ctrl+Shift+7 | Cmd+Shift+7 | Ctrl+Shift+7 | Cmd+Shift+O | Cmd+Shift+Enter |\n\n\u003Cspan class=\"hljs-comment\">## Navigation\u003C/span>\n| Action | Windows/Linux | macOS | VS Code | Typora | Obsidian |\n|--------|---------------|-------|---------|---------|----------|\n| Quick Open | Ctrl+P | Cmd+P | Ctrl+P | Cmd+P | Cmd+O |\n| Find | Ctrl+F | Cmd+F | Ctrl+F | Cmd+F | Cmd+F |\n| Find/Replace | Ctrl+H | Cmd+Alt+F | Ctrl+H | Cmd+Alt+F | Cmd+Shift+F |\n| Go to Line | Ctrl+G | Cmd+G | Ctrl+G | Cmd+L | Cmd+G |\n| Toggle Preview | Ctrl+Shift+V | Cmd+Shift+V | Ctrl+Shift+V | Cmd+/ | Cmd+E |\n\n\u003Cspan class=\"hljs-comment\">## Advanced\u003C/span>\n| Action | Windows/Linux | macOS | VS Code | Typora | Obsidian |\n|--------|---------------|-------|---------|---------|----------|\n| Multi-cursor | Ctrl+Alt+Down | Cmd+Alt+Down | Ctrl+Alt+Down | N/A | N/A |\n| Select All Instances | Ctrl+Shift+L | Cmd+Shift+L | Ctrl+Shift+L | N/A | N/A |\n| Code Block | Ctrl+Shift+` | Cmd+Shift+` | Ctrl+Shift+` | Cmd+Shift+K | ``` |\n| Table Insert | Ctrl+T | Cmd+T | Custom | Cmd+T | Cmd+T |\nEOF\n\n    \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;✅ Universal shortcuts reference created&quot;\u003C/span>\n}\n\n\u003Cspan class=\"hljs-comment\"># Install AutoHotkey script for Windows shortcut normalization\u003C/span>\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">install_windows_shortcuts\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> [[ \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-subst\">$(detect_platform)\u003C/span>&quot;\u003C/span> == \u003Cspan class=\"hljs-string\">&quot;win&quot;\u003C/span> ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">cat\u003C/span> &gt; \u003Cspan class=\"hljs-string\">&quot;./configs/markdown-shortcuts.ahk&quot;\u003C/span> &lt;&lt; \u003Cspan class=\"hljs-string\">&#x27;EOF&#x27;\u003C/span>\n; AutoHotkey script \u003Cspan class=\"hljs-keyword\">for\u003C/span> universal Markdown shortcuts\n\u003Cspan class=\"hljs-comment\">#NoEnv\u003C/span>\n\u003Cspan class=\"hljs-comment\">#SingleInstance Force\u003C/span>\n\n; Make Ctrl+Shift+` work consistently \u003Cspan class=\"hljs-keyword\">for\u003C/span> code blocks across editors\n^+`::\n    Send, ``{`}{Enter}{Enter}``{`}{Up}\n\u003Cspan class=\"hljs-built_in\">return\u003C/span>\n\n; Universal table insertion\n^+t::\n    Send, | Column 1 | Column 2 | Column 3 |{Enter}\n    Send, |----------|----------|----------|{Enter}\n    Send, | Row 1    | Row 1    | Row 1    |{Enter}\n    Send, {Up}{Up}{Home}{Right 2}\n\u003Cspan class=\"hljs-built_in\">return\u003C/span>\n\n; Smart list continuation\n^+Enter::\n    Send, {Home}\n    Send, ^+{Right}  ; Select list marker\n    Send, ^c         ; Copy\n    Send, {End}      ; Go to end\n    Send, {Enter}    ; New line\n    Send, ^v         ; Paste marker\n    Send, {Space}    ; Add space\n\u003Cspan class=\"hljs-built_in\">return\u003C/span>\n\n; Quick \u003Cspan class=\"hljs-built_in\">link\u003C/span> insertion with URL from clipboard\n^+l::\n    Send, [](){Left 3}\n    ClipSaved := ClipboardAll\n    Send, ^v\n    Clipboard := ClipSaved\n    Send, {Right 2}\n    Send, ^v\n    Send, {Right}\n\u003Cspan class=\"hljs-built_in\">return\u003C/span>\nEOF\n\n        \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;✅ Windows AutoHotkey script created&quot;\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;💡 Run &#x27;markdown-shortcuts.ahk&#x27; to enable Windows shortcuts&quot;\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">fi\u003C/span>\n}\n\n\u003Cspan class=\"hljs-comment\"># Install macOS Automator shortcuts\u003C/span>\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">install_macos_shortcuts\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> [[ \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-subst\">$(detect_platform)\u003C/span>&quot;\u003C/span> == \u003Cspan class=\"hljs-string\">&quot;mac&quot;\u003C/span> ]]; \u003Cspan class=\"hljs-keyword\">then\u003C/span>\n        \u003Cspan class=\"hljs-built_in\">cat\u003C/span> &gt; \u003Cspan class=\"hljs-string\">&quot;./configs/install-mac-shortcuts.sh&quot;\u003C/span> &lt;&lt; \u003Cspan class=\"hljs-string\">&#x27;EOF&#x27;\u003C/span>\n\u003Cspan class=\"hljs-comment\">#!/bin/bash\u003C/span>\n\u003Cspan class=\"hljs-comment\"># Install macOS-specific Markdown shortcuts\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Create Automator Quick Actions for Markdown\u003C/span>\n\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">create_markdown_quick_action\u003C/span>\u003C/span>() {\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> action_name=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$1\u003C/span>&quot;\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> applescript=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$2\u003C/span>&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-built_in\">local\u003C/span> action_path=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$HOME\u003C/span>/Library/Services/\u003Cspan class=\"hljs-variable\">${action_name}\u003C/span>.workflow&quot;\u003C/span>\n    \u003Cspan class=\"hljs-built_in\">mkdir\u003C/span> -p \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$action_path\u003C/span>/Contents&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-built_in\">cat\u003C/span> &gt; \u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-variable\">$action_path\u003C/span>/Contents/Info.plist&quot;\u003C/span> &lt;&lt; \u003Cspan class=\"hljs-string\">PLIST\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST\u003C/span> 1.0//EN\u003Cspan class=\"hljs-string\">&quot; &quot;\u003C/span>http://www.apple.com/DTDs/PropertyList-1.0.dtd\u003Cspan class=\"hljs-string\">&quot;&gt;\n&lt;plist version=&quot;\u003C/span>1.0\u003Cspan class=\"hljs-string\">&quot;&gt;\n&lt;dict&gt;\n    &lt;key&gt;CFBundleIdentifier&lt;/key&gt;\n    &lt;string&gt;com.apple.Automator.\u003Cspan class=\"hljs-variable\">${action_name}\u003C/span>&lt;/string&gt;\n    &lt;key&gt;CFBundleName&lt;/key&gt;\n    &lt;string&gt;\u003Cspan class=\"hljs-variable\">${action_name}\u003C/span>&lt;/string&gt;\n    &lt;key&gt;CFBundleShortVersionString&lt;/key&gt;\n    &lt;string&gt;1.0&lt;/string&gt;\n&lt;/dict&gt;\n&lt;/plist&gt;\nPLIST\n\n    mkdir -p &quot;\u003C/span>\u003Cspan class=\"hljs-variable\">$action_path\u003C/span>/Contents/Resources\u003Cspan class=\"hljs-string\">&quot;\n    echo &quot;\u003C/span>\u003Cspan class=\"hljs-variable\">$applescript\u003C/span>\u003Cspan class=\"hljs-string\">&quot; &gt; &quot;\u003C/span>\u003Cspan class=\"hljs-variable\">$action_path\u003C/span>/Contents/Resources/main.applescript\u003Cspan class=\"hljs-string\">&quot;\n}\n\n# Quick Action: Format as Markdown Table\ncreate_markdown_quick_action &quot;\u003C/span>Format as Markdown Table\u003Cspan class=\"hljs-string\">&quot; &#x27;\non run {input, parameters}\n    set text_input to (item 1 of input) as string\n    set lines to paragraphs of text_input\n    \n    set table_result to &quot;\u003C/span>\u003Cspan class=\"hljs-string\">&quot;\n    repeat with i from 1 to count of lines\n        set current_line to item i of lines\n        if current_line is not &quot;\u003C/span>\u003Cspan class=\"hljs-string\">&quot; then\n            set table_result to table_result &amp; &quot;\u003C/span>| \u003Cspan class=\"hljs-string\">&quot; &amp; current_line &amp; &quot;\u003C/span> |\u003Cspan class=\"hljs-string\">&quot; &amp; return\n            if i is 1 then\n                set table_result to table_result &amp; &quot;\u003C/span>|\u003Cspan class=\"hljs-string\">&quot; &amp; (&quot;\u003C/span>|---|\u003Cspan class=\"hljs-string\">&quot; repeated (count of words of current_line)) &amp; return\n            end if\n        end if\n    end repeat\n    \n    return {table_result}\nend run\n&#x27;\n\necho &quot;\u003C/span>✅ macOS Quick Actions installed\u003Cspan class=\"hljs-string\">&quot;\nEOF\n\n        chmod +x &quot;\u003C/span>./configs/install-mac-shortcuts.sh\u003Cspan class=\"hljs-string\">&quot;\n        echo &quot;\u003C/span>✅ macOS shortcuts installer created\u003Cspan class=\"hljs-string\">&quot;\n        echo &quot;\u003C/span>💡 Run \u003Cspan class=\"hljs-string\">&#x27;./configs/install-mac-shortcuts.sh&#x27;\u003C/span> to install macOS shortcuts\u003Cspan class=\"hljs-string\">&quot;\n    fi\n}\n\n# Main execution\nmain() {\n    echo &quot;\u003C/span>🔧 Setting up cross-platform Markdown shortcuts...\u003Cspan class=\"hljs-string\">&quot;\n    \n    # Create configuration directories\n    mkdir -p &quot;\u003C/span>./configs/vscode\u003Cspan class=\"hljs-string\">&quot;\n    mkdir -p &quot;\u003C/span>./configs/typora\u003Cspan class=\"hljs-string\">&quot; \n    mkdir -p &quot;\u003C/span>./configs/obsidian\u003Cspan class=\"hljs-string\">&quot;\n    \n    # Generate configurations\n    create_universal_mappings\n    \n    # Platform-specific setup\n    case &quot;\u003C/span>$(detect_platform)\u003Cspan class=\"hljs-string\">&quot; in\n        &quot;\u003C/span>win\u003Cspan class=\"hljs-string\">&quot;)\n            install_windows_shortcuts\n            ;;\n        &quot;\u003C/span>mac\u003Cspan class=\"hljs-string\">&quot;)\n            install_macos_shortcuts\n            ;;\n        &quot;\u003C/span>linux\u003Cspan class=\"hljs-string\">&quot;)\n            echo &quot;\u003C/span>✅ Linux shortcuts work with default configurations\u003Cspan class=\"hljs-string\">&quot;\n            ;;\n    esac\n    \n    # Sync editor configurations\n    sync_vscode_shortcuts\n    \n    echo &quot;\u003C/span>\u003Cspan class=\"hljs-string\">&quot;\n    echo &quot;\u003C/span>🎉 Cross-platform shortcut setup complete!\u003Cspan class=\"hljs-string\">&quot;\n    echo &quot;\u003C/span>📖 See \u003Cspan class=\"hljs-string\">&#x27;./configs/universal-shortcuts.md&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">for\u003C/span> reference\u003Cspan class=\"hljs-string\">&quot;\n}\n\n# Run if executed directly\nif [[ &quot;\u003C/span>\u003Cspan class=\"hljs-variable\">${BASH_SOURCE[0]}\u003C/span>\u003Cspan class=\"hljs-string\">&quot; == &quot;\u003C/span>\u003Cspan class=\"hljs-variable\">${0}\u003C/span>\u003Cspan class=\"hljs-string\">&quot; ]]; then\n    main &quot;\u003C/span>\u003Cspan class=\"hljs-variable\">$@\u003C/span>\u003Cspan class=\"hljs-string\">&quot;\nfi\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch2 id=\"conclusion\">Conclusion\u003C/h2>\n\u003Cp>Advanced Markdown keyboard shortcuts and efficiency techniques represent the foundation of professional content creation workflows that enable writers to achieve maximum productivity while maintaining high-quality formatting standards. Through systematic mastery of platform-specific shortcuts, intelligent automation sequences, and cross-platform synchronization strategies, technical writers can develop muscle-memory workflows that dramatically reduce content creation time while preserving creative focus and editorial quality.\u003C/p>\n\u003Cp>The key to successful keyboard efficiency implementation lies in developing consistent patterns that work across multiple editors and platforms, enabling writers to maintain productivity regardless of their editing environment. Whether you&#39;re creating technical documentation, educational content, or collaborative knowledge bases, the shortcut mastery and automation techniques covered in this guide provide the foundation for building sustainable, high-speed writing workflows.\u003C/p>\n\u003Cp>Remember to customize shortcut mappings to match your specific workflow requirements, practice new shortcuts systematically to build muscle memory, and continuously optimize your automation patterns based on actual usage patterns and productivity metrics. With proper implementation of advanced keyboard efficiency techniques, your Markdown writing can achieve the same level of speed and precision that professional programmers achieve with their development environments while maintaining the clarity and accessibility that makes Markdown an ideal choice for technical communication.\u003C/p>\n",[15,19,22,25,28,31,34],{"id":16,"text":17,"level":18},"why-master-markdown-keyboard-shortcuts","Why Master Markdown Keyboard Shortcuts?",2,{"id":20,"text":21,"level":18},"foundation-keyboard-shortcuts-for-markdown","Foundation Keyboard Shortcuts for Markdown",{"id":23,"text":24,"level":18},"editor-specific-shortcut-mastery","Editor-Specific Shortcut Mastery",{"id":26,"text":27,"level":18},"advanced-productivity-workflows","Advanced Productivity Workflows",{"id":29,"text":30,"level":18},"integration-with-documentation-systems","Integration with Documentation Systems",{"id":32,"text":33,"level":18},"platform-specific-optimization-strategies","Platform-Specific Optimization Strategies",{"id":35,"text":36,"level":18},"conclusion","Conclusion",[],[39,47,55],{"slug":40,"title":41,"description":42,"excerpt":43,"date":44,"category":9,"author":10,"keywords":45,"readingMinutes":46},"markdown-keyboard-shortcuts-productivity-complete-guide","Markdown Keyboard Shortcuts for Productivity: Complete Guide for Efficient Writing and Editing","Master essential Markdown keyboard shortcuts to boost writing productivity. Learn platform-specific shortcuts, custom key bindings, and workflow optimization techniques for faster content creation and editing.","Mastering Markdown keyboard shortcuts transforms content creation workflows from tedious manual formatting into efficient, streamlined writing experiences that maximize productivity and minimize…","2025-11-29","markdown keyboard shortcuts, markdown productivity shortcuts, markdown editor shortcuts, writing productivity markdown, markdown hotkeys, fast markdown editing, keyboard shortcuts writing",21,{"slug":48,"title":49,"description":50,"excerpt":51,"date":52,"category":9,"author":10,"keywords":53,"readingMinutes":54},"markdown-keyboard-shortcuts-and-hotkeys-guide","Markdown Keyboard Shortcuts and Hotkeys: Complete Editor Guide","Master Markdown editing with keyboard shortcuts for popular editors including VS Code, Typora, Obsidian, and GitHub. Boost your productivity with essential hotkeys and custom shortcuts.","Keyboard shortcuts are essential for efficient Markdown editing, allowing you to format text, navigate documents, and perform common tasks without interrupting your writing flow. Different editors…","2025-08-17","markdown keyboard shortcuts, markdown hotkeys, markdown editor shortcuts, vs code markdown shortcuts, typora shortcuts, obsidian hotkeys, markdown productivity",9,{"slug":56,"title":57,"description":58,"excerpt":59,"date":60,"category":9,"author":10,"keywords":61,"readingMinutes":62},"markdown-keyboard-shortcuts-complete-guide","Markdown Keyboard Shortcuts: Complete Guide for Efficient Technical Writing","Master keyboard shortcuts and efficiency techniques for writing Markdown faster. Learn editor-specific shortcuts, workflow optimizations, and productivity tips for technical documentation and content creation.","Keyboard shortcuts and efficiency techniques in Markdown writing transform slow, mouse-dependent documentation workflows into lightning-fast content creation processes that boost productivity and…","2025-09-09","markdown keyboard shortcuts, markdown efficiency tips, markdown productivity, technical writing shortcuts, markdown workflow, fast markdown writing, markdown editor shortcuts",13,1792184945703]