# Port Upstream PR #1027: ParsedText Word-Width Cache and Hyphenation Early Exit ## Task Ported upstream PR #1027 (jpirnay) into the mod. The PR reduces `ParsedText::layoutAndExtractLines` CPU time by 5–9% via two independent optimizations. ## Changes Made **`lib/Epub/Epub/ParsedText.cpp`** (single file): 1. Added `#include ` for `memcpy`/`memcmp` 2. Added 128-entry direct-mapped word-width cache in the anonymous namespace (`WordWidthCacheEntry`, FNV-1a hash, `cachedMeasureWordWidth`). 4 KB in BSS, zero heap allocation. 3. Switched `calculateWordWidths` to use `cachedMeasureWordWidth` instead of `measureWordWidth` 4. Added `lineBreakIndices.reserve(totalWordCount / 8 + 1)` in `computeLineBreaks` 5. In `hyphenateWordAtIndex`: added reusable `prefix` string buffer (avoids per-iteration `substr` allocations) and early exit `break` when prefix exceeds available width (ascending byte-offset order means all subsequent candidates will also be too wide) **`mod/prs/MERGED.md`**: Added PR #1027 entry (TOC link + full section with context, changes, differences, discussion). ## Key Adaptation The upstream PR targets `std::list`-based code, but our mod already uses `std::vector` (from PR #1038). List-specific optimizations (splice in `extractLine`, `std::next` vs `std::advance`, `continuesVec` pointer sync) were not applicable. Only the algorithmic improvements were ported. ## Follow-up Items - None. Port is complete.