# Mise en Place - PDF to Markdown Converter

A modern task runner configuration for the PDF to Markdown conversion project using [mise](https://mise.jdx.dev/).

## Overview

Mise is a polyglot tool manager that handles tool installations and task execution. This project uses it to:
- Automatically install Python 3.11 and dependencies
- Provide convenient commands for PDF conversion tasks
- Manage development workflows
- Track conversion status

## Installation

### Prerequisites
- **mise** CLI installed: https://mise.jdx.dev/getting-started.html

Quick install:
```bash
curl https://mise.jdx.dev/install.sh | sh
```

### Setup
```bash
# Clone or navigate to the project
cd maturaarbeit

# Trust the configuration files (one-time setup)
mise trust

# Verify installation
mise tasks
```

## Quick Start

### Convert All PDFs
```bash
mise run convert
```

This will:
1. Install dependencies (if not already installed)
2. Run the PDF to Markdown converter
3. Process all PDFs in `artikel/` folder
4. Output Markdown files to `artikel/converted/`
5. Display a conversion summary

### Check Conversion Status
```bash
mise run status
```

Shows:
- Number of PDFs in `artikel/`
- Number of converted Markdown files
- ✓ All PDFs converted (if done)

### Preview Without Writing
```bash
mise run dry-run
```

Shows what PDFs would be converted without actually writing files.

## Available Tasks

| Task | Description |
|------|-------------|
| `install` | Install Python 3.11 and project dependencies |
| `convert` | Convert all PDFs to Markdown (main task) |
| `convert-verbose` | Convert with detailed logging output |
| `convert-quiet` | Convert silently (errors only) |
| `dry-run` | Preview conversion without writing files |
| `convert-custom` | Convert from custom input/output folders |
| `status` | Show conversion status and progress |
| `clean` | Remove converted Markdown files |
| `clean-all` | Remove all build artifacts and cache |
| `help` | List all available tasks |

## Usage Examples

### Basic Conversion
```bash
# Convert all PDFs using defaults
mise run convert

# Convert with verbose logging
mise run convert-verbose

# Convert silently
mise run convert-quiet
```

### Custom Paths
```bash
# Convert from custom input directory
INPUT_DIR=/path/to/pdfs mise run convert-custom

# Specify both input and output directories
INPUT_DIR=/path/to/pdfs OUTPUT_DIR=/path/to/output mise run convert-custom
```

### Cleanup
```bash
# Remove only converted markdown files
mise run clean

# Remove all artifacts (markdown files, cache, __pycache__)
mise run clean-all
```

## Configuration Files

### `mise.toml`
Main configuration file with all tasks, environment variables, and tool versions.

**Key sections:**
- `[env]` - Environment variables (e.g., `PYTHONUNBUFFERED`)
- `[tasks.*]` - Task definitions with descriptions and commands
- `[tools.python]` - Python version specification (3.11)
- `[tools.pipenv]` - Package manager version

### `.mise.local.toml`
Local overrides for environment-specific configuration. Git-ignored file for personal settings.

**Example customizations:**
```toml
# Override input/output directories
INPUT_DIR = "./my_pdfs"
OUTPUT_DIR = "./my_output"

# Custom Python path
PYTHON_PATH = "/usr/local/bin/python3"
```

### `.gitignore`
Excludes mise cache and local configuration from version control.

## How It Works

### Automatic Tool Installation
When you run a task, mise automatically:
1. Detects required tools (Python 3.11)
2. Downloads and installs them if missing
3. Creates isolated environment
4. Executes the task in that environment

### Task Execution
1. **Setup phase** - Install dependencies via `pip install -r requirements.txt`
2. **Execution phase** - Run the Python script with appropriate arguments
3. **Cleanup phase** - Report results and summary

### Environment Variables
```bash
PYTHONUNBUFFERED=1  # Real-time output (no buffering)
INPUT_DIR           # Custom input folder (default: ./artikel)
OUTPUT_DIR          # Custom output folder (default: ./artikel/converted)
```

## Advantages Over Traditional Approach

### Before (Manual Setup)
```bash
# Install Python globally
# Install pip
# Install dependencies
# Hope everything works
python3 pdf_to_markdown.py
```

### After (Mise)
```bash
# One command - everything handled
mise run convert
```

**Benefits:**
- ✅ Reproducible - Same environment every time
- ✅ Isolated - Tools don't affect system Python
- ✅ Fast - Caches installed tools
- ✅ Easy - Single command to run tasks
- ✅ Portable - Works on any system with mise
- ✅ Documented - Task descriptions built-in
- ✅ Flexible - Environment variables for customization

## Troubleshooting

### Issue: "mise: command not found"

**Solution:** Install mise first
```bash
curl https://mise.jdx.dev/install.sh | sh
```

### Issue: "Config files are not trusted"

**Solution:** Trust the configuration
```bash
mise trust
```

### Issue: Python dependencies not installing

**Solution:** Manually install in the mise environment
```bash
mise run install
```

### Issue: "No PDF files found"

**Solution:** Check the input directory path
```bash
# Verify PDFs exist
ls -la artikel/*.pdf

# If in different location, use custom path
INPUT_DIR=/path/to/pdfs mise run convert-custom
```

### Issue: Slow first run

**Solution:** First run downloads and installs tools (one-time). Subsequent runs are fast.

## Advanced Usage

### Running Tasks from Shell Scripts
```bash
#!/bin/bash
# Run conversion in a script
mise run convert

# Capture exit code
if mise run convert; then
  echo "Conversion successful"
  mise run status
else
  echo "Conversion failed"
  exit 1
fi
```

### Integrating with CI/CD
```bash
# GitHub Actions example
- name: Convert PDFs
  run: |
    curl https://mise.jdx.dev/install.sh | sh
    mise run convert
```

### Custom Task Definition
To add a new task, edit `mise.toml`:

```toml
[tasks.my-custom-task]
description = "My custom task description"
run = "echo 'Running custom task'"
depends = ["install"]  # Depends on install task
```

Then run:
```bash
mise run my-custom-task
```

## Documentation

- **Project Guide** - See `PDF_CONVERTER_GUIDE.md`
- **Mise Docs** - https://mise.jdx.dev/
- **Python Script** - See `pdf_to_markdown.py`

## Support

For issues or questions:
- Mise documentation: https://mise.jdx.dev/
- Project issues: https://github.com/anomalyco/opencode

---

**Version:** 1.0  
**Last Updated:** 2024-02-23
