Skip to main content

A tool to automatically fix formatting and alignment issues in ASCII diagrams

Project description

Diagram Fixer

A Python tool designed to automatically fix formatting and alignment issues in ASCII diagrams, particularly those generated by AI tools like Claude. This tool is especially useful in pandoc workflows for cleaning up diagrams before converting to other formats.

Features

  • Precision Matrix-Based Detection: Uses sophisticated matrix analysis to identify and fix diagram structural issues
  • Box Alignment: Automatically corrects misaligned box borders and inconsistent spacing
  • Connection Line Fixing: Repairs broken or misaligned connection lines between diagram elements
  • Pandoc Integration: Seamlessly integrates into pandoc preprocessing workflows
  • Quiet Operation: Clean, minimal output by default with optional verbose debugging
  • Robust Algorithm: Handles complex nested diagrams with stable convergence

Installation

Option 1: Install from PyPI (when available)

pip install markdown-diagram-fixer

Option 2: Install from Source

git clone https://github.com/andrewyager/markdown-diagram-fixer.git
cd markdown-diagram-fixer
pip install .

Option 3: Development Install

git clone https://github.com/andrewyager/markdown-diagram-fixer.git
cd markdown-diagram-fixer
pip install -e .

Requirements

  • Python 3.7 or higher
  • No external dependencies (uses only Python standard library)

Usage

Command Line

After installation, use the diagram-fixer command:

# Fix a single diagram file
diagram-fixer input_diagram.txt

# Enable verbose output for debugging
diagram-fixer input_diagram.txt --verbose

If running directly from source without installation:

python3 precision_diagram_fixer.py input_diagram.txt

Pandoc Integration

The diagram fixer can be used as a pandoc filter to automatically fix diagrams during document processing.

Installation for Pandoc

After installing the package (pip install markdown-diagram-fixer), add the filter to your pandoc workflow:

Option 1: Use in pandoc defaults file (recommended)

Add to your pandoc defaults file (e.g., ~/.pandoc/defaults/pdf.yaml):

filters:
  - pandoc-diagram-filter

Option 2: Use direct path to installed binary

If the above doesn't work due to PATH issues, use the full path:

filters:
  - /opt/homebrew/bin/pandoc-diagram-filter  # On macOS with Homebrew
  # or find the path with: which pandoc-diagram-filter

Option 3: Use with individual pandoc commands

# Using pandoc defaults
pandoc -d pdf input.md -o output.pdf

# Or specify filter directly
pandoc --filter pandoc-diagram-filter input.md -o output.pdf

Troubleshooting Pandoc Integration

If the filter doesn't work:

  1. Check installation: Verify the console script exists:

    which pandoc-diagram-filter
    
  2. Test the filter directly:

    echo '```
    ┌─────┐
    │ Box │
    └─────┘
    ```' | pandoc -f gfm -t json | pandoc-diagram-filter | pandoc -f json -t markdown
    
  3. Use full path if needed: In your pandoc defaults, use the full path from which pandoc-diagram-filter

See TROUBLESHOOTING.md for detailed troubleshooting help.

Command Line Integration

You can also use the preprocessor directly:

# Preprocess markdown then pass to pandoc
pandoc-diagram-fixer < input.md | pandoc -o output.pdf

How It Works

The precision diagram fixer uses a matrix-based approach:

  1. Detection: Identifies diagram elements (boxes, connection lines) using Unicode box-drawing characters
  2. Analysis: Builds a solved/unsolved matrix to track which positions are correctly formatted
  3. Problem Identification: Finds misaligned borders, broken connections, and spacing issues
  4. Targeted Fixing: Applies minimal character injections to fix problems without disrupting correctly formatted areas
  5. Convergence: Iterates until the diagram reaches a stable, correctly formatted state

Supported Diagram Types

  • Box and line diagrams using Unicode box-drawing characters (┌┐└┘├┤┬┴┼─│)
  • Network topology diagrams
  • Flowcharts and organizational charts
  • System architecture diagrams
  • Any ASCII art using standard box-drawing conventions

Example

Before:

┌─────────┐    ┌──────────┐
│ Source  │───│ Target   │
│ Node    │    │ Node     │
└─────────┘    └──────────┘

After: (with proper alignment)

┌─────────┐    ┌──────────┐
│ Source  │────│ Target   │
│ Node    │    │ Node     │
└─────────┘    └──────────┘

Files

  • precision_diagram_fixer.py - Main diagram fixing tool with robust matrix-based algorithm
  • pandoc_preprocessor.py - Pandoc preprocessor for automatic diagram fixing in markdown workflows
  • example_diagram.txt - Sample diagram for testing

License

MIT License - see LICENSE file for details.

Copyright (c) 2025 Andrew Yager, Real World Technology Solutions Pty Ltd

Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines on:

  • Reporting issues and bugs
  • Submitting pull requests
  • Development setup and testing
  • Code style and best practices

Security

If you discover a security vulnerability, please report it privately through GitHub Security Advisories or email security@realworldtech.com.au. See SECURITY.md for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

markdown_diagram_fixer-1.0.0.tar.gz (24.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

markdown_diagram_fixer-1.0.0-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file markdown_diagram_fixer-1.0.0.tar.gz.

File metadata

  • Download URL: markdown_diagram_fixer-1.0.0.tar.gz
  • Upload date:
  • Size: 24.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for markdown_diagram_fixer-1.0.0.tar.gz
Algorithm Hash digest
SHA256 8c1d65bcc0fc356e86edcbe3ca029a2526fd1f0f051773123fc89b4da746f562
MD5 0330413837d7d42c385d4d2a36a79841
BLAKE2b-256 70c5bb2a28beb1ba30d996c271604aa9cb35f89252b259e0dbdb725cda5dd0dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for markdown_diagram_fixer-1.0.0.tar.gz:

Publisher: python-publish.yml on andrewyager/markdown-diagram-fixer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file markdown_diagram_fixer-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for markdown_diagram_fixer-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dbfe9c842de520ee6a6200c99fee44d5f4b19d79778af13075ff7e0093a700d9
MD5 f18ef33ef4279a99085a6c9303ac5103
BLAKE2b-256 3f22b14f3f3d2021d01a0b4cc519b77b120ed6436ef890bc8d21f9754468090c

See more details on using hashes here.

Provenance

The following attestation bundles were made for markdown_diagram_fixer-1.0.0-py3-none-any.whl:

Publisher: python-publish.yml on andrewyager/markdown-diagram-fixer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page