jumpcut 1.0.0

JumpCut is a library and CLI for converting Fountain-formatted text files into FDX, HTML, JSON, text, and PDF formats.
Documentation
# Final Draft Dialogue Splitting Rules

This document outlines the current dialogue-splitting rules JumpCut uses to
match Final Draft behavior, based on the active fd-probe set and the corpus
checks that still serve as parity guards.

## Core Rules

### 1. The (MORE) Overflow
JumpCut currently treats `(MORE)` as budget-neutral for fit and charged page
height. A split is allowed to fit on the page based on the raw top fragment,
and the paginator charges only the raw top fragment height.

Important nuance:

- The current probes suggest the remaining Final Draft behavior is better
  explained by split ranking than by a global "always charge `(MORE)` as a
  line" rule.

### 2. Content Counting (Orphans & Widows)
When checking if a split is legal, both **Dialogue** and **Parenthetical**
lines count as valid content.

- **Character Name**: Does not count toward the orphan limit.
- **Example**: A split that leaves a Character name, one line of dialogue, and a parenthetical on the top page is valid (2 content lines).

### 3. The 3-Line Split Minimum
A single part (a continuous block of dialogue text or a parenthetical) will only be split internally if it wraps to **at least 3 lines**. 
- Parts that wrap to only 1 or 2 lines are considered too compact to split and will be kept whole on either the top or bottom page.

### 4. Sentence-Only Internal Splits
Dialogue text is never split at arbitrary wrapped-line breaks. Splits inside a text part occur **only at sentence boundaries**. If a sentence is too long to fit the remaining page space, Final Draft will push the entire block (or the entire next sentence) to the next page.

### 5. Part-Boundary Splits
Splits are always allowed between parts (e.g., between a Character name and
Dialogue, or between a Parenthetical and Dialogue), provided the orphan/widow
limits are met.

In the current implementation, part-boundary splits are legal candidates but do
not receive the sentence-boundary bonus. Sentence-boundary preference is only
applied to mid-part boundaries discovered inside long dialogue/lyric text.

---

## Scoring Priority

When multiple legal split candidates exist, the "best" split is chosen using the following priority:

1.  **Sentence Boundaries**: Prefer splitting at the end of a sentence.
2.  **Substantial Bottom Continuation**: Prefer candidates whose continuation
    block on the next page is substantial enough to avoid looking stranded. In
    the current implementation, this is a threshold rule, not a continuous
    "more bottom is always better" preference.
3.  **Page Fullness**: Once candidates are equal on the substantial-bottom
    check, prefer the split that leaves more material on the top page.
4.  **Balance**: Prefer splits that result in roughly equal-sized fragments.
5.  **Content Tiebreaker**: If all else is equal, prefer the split that keeps
    more characters/bytes on the top page.