Skip to main content

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 src/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

  • src/precision_diagram_fixer.py - Main diagram fixing tool with robust matrix-based algorithm
  • src/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. See SECURITY.md for details.

Metadata

Release files for markdown-diagram-fixer 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for markdown-diagram-fixer 1.1.1
File Size Uploaded Provenance Actions
markdown_diagram_fixer-1.1.1.tar.gz 13.3 kB With provenance Details for markdown_diagram_fixer-1.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for markdown-diagram-fixer 1.1.1
File Interpreter ABI Platform Actions
markdown_diagram_fixer-1.1.1-py3-none-any.whl Python 3 none any Details for markdown_diagram_fixer-1.1.1-py3-none-any.whl

Total release size: 18.2 kB

Release files / markdown_diagram_fixer-1.1.1.tar.gz

Download URL markdown_diagram_fixer-1.1.1.tar.gz
Size 13.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0a6e1cc75e605f6fc8ea2ce1a655b63b65ba57218aa4d43d1d247b1174e1ba63
BLAKE2b-256 checksum
How to use checksums
329cd97956fe005baddbc7756af04449ecc707a01db011faeed1cf0d11d447f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 8, 2025.

Transparency log

Release files / markdown_diagram_fixer-1.1.1-py3-none-any.whl

Download URL markdown_diagram_fixer-1.1.1-py3-none-any.whl
Size 4.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a0c8d16ef4d92a2172f5b6bbfd0605f6f13df37352982741c509fde2ac986350
BLAKE2b-256 checksum
How to use checksums
4c9605e2a9d09618ccc01e28e7cdc290ef79944bb457752d8f5936341a0234f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 8, 2025.

Transparency log

Security for markdown-diagram-fixer 1.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for markdown_diagram_fixer-1.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 8, 2025.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page