scripts-extract-diagrams
#!/usr/bin/env python3 """
title: "Extract Diagrams" component_type: script version: "1.0.0" audience: contributor status: stable summary: "Extract Mermaid diagrams from markdown documentation and save to separate .mmd files. " keywords: ['diagrams', 'extract'] tokens: ~500 created: 2025-12-22 updated: 2025-12-22 script_name: "extract-diagrams.py" language: python executable: true usage: "python3 scripts/extract-diagrams.py [options]" python_version: "3.10+" dependencies: [] modifies_files: false network_access: false requires_auth: false
Extract Mermaid diagrams from markdown documentation and save to separate .mmd files. """
import argparse import sys import re from pathlib import Path
def parse_args(): """Parse command line arguments""" parser = argparse.ArgumentParser( description='Extract Mermaid diagrams from markdown files and save as separate .mmd files.', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=''' Examples: %(prog)s input.md output/ # Extract from single file %(prog)s docs/*.md diagrams/ --prefix # Extract with file prefixes %(prog)s README.md . --verbose # Extract with verbose output
Output: Creates diagram-01.mmd, diagram-02.mmd, etc. in the output directory. With --prefix, creates input-diagram-01.mmd, etc. ''' ) parser.add_argument('input', type=str, help='Input markdown file') parser.add_argument('output', type=str, help='Output directory for .mmd files') parser.add_argument('--prefix', action='store_true', help='Prefix output files with input filename') parser.add_argument('--verbose', '-v', action='store_true', help='Verbose output') return parser.parse_args()
def extract_mermaid_diagrams(md_file, output_dir, prefix=False, verbose=False): """Extract all mermaid diagrams from markdown file."""
with open(md_file, 'r', encoding='utf-8') as f:
content = f.read()
# Find all mermaid code blocks
pattern = r'```mermaid\n(.*?)\n```'
diagrams = re.findall(pattern, content, re.DOTALL)
print(f"Found {len(diagrams)} mermaid diagrams in {md_file}")
# Create output directory if it doesn't exist
Path(output_dir).mkdir(parents=True, exist_ok=True)
# Save each diagram
for idx, diagram in enumerate(diagrams, 1):
output_file = Path(output_dir) / f"diagram-{idx:02d}.mmd"
with open(output_file, 'w', encoding='utf-8') as f:
f.write(diagram)
print(f" Saved: {output_file}")
return len(diagrams)
if name == "main": args = parse_args()
if not Path(args.input).exists():
print(f"Error: Input file not found: {args.input}")
sys.exit(1)
count = extract_mermaid_diagrams(args.input, args.output, args.prefix, args.verbose)
print(f"\nExtraction complete: {count} diagrams saved to {args.output}")