mirror of
https://github.com/storytold/wordcraft.git
synced 2026-10-27 03:47:09 -06:00
* #1336: Markdown looks up the backtick run closing a code span instead of rescanning the text Code spans and link brackets searched the rest of the text for the run of backticks closing a code span. Every run nothing closes (one per length) cost a scan to the end, and the bracket scan repeated those searches for each `[` over them, outside its look-ahead budget: 2 MB of such runs took 2-18 s. The runs are now indexed by length once per text and found with a binary search; what reads as a code span or a link is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * #1452: Markdown brackets no longer turn later links in the paragraph into plain text The link and image bracket scans share a look-ahead budget per text, so hostile input stays linear, but it was charged more than they read: a `[` nothing closes took the whole budget, and every bracket pair and every link took the rest of the text, as if a destination had been read to the end. An interval like `[0, 1)`, a dozen references in a long paragraph or ten links were enough to make every later link plain text. A scan now pays for the bytes it reads and records the pairs it passes, and the brackets still open at the end of the text, so later brackets are looked up. A destination is read, and paid for, only when `(` follows the `]`; one that parses costs its own length. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>