mirror of https://github.com/garrytan/gstack.git
Three defects surfaced rendering Simplified-Chinese documents; refined after an independent two-model code audit (which caught a regression in the first pass of the quote fix). 1. Bare URLs leaked internal `SMARTPANTS_PRESERVED_N` sentinels into output AND left <a>/<p> unclosed (everything after became one hyperlink). URL_RE's `\S+` (NUL is non-whitespace) swallowed the adjacent tag placeholders; single-pass restore could not un-nest them. Fix: stop the URL match at the NUL boundary; additionally strip any stray NUL from input at smartypants() entry so text cannot forge a placeholder or create NUL-adjacency nesting. 2. The CJK font stack listed Hiragino (Japanese) before any Chinese font, so Simplified-Chinese text rendered in Japanese glyph variants (直/骨/角/没). Fix: PingFang SC / Noto Sans CJK SC / Source Han Sans SC / Microsoft YaHei first; JP fonts demoted to last resort. (Trade-off: true Japanese documents now prefer SC glyphs for shared Han; acceptable for an SC-primary tool. A lang-attribute-based selector would be the fuller fix.) 3. A quote directly after a CJK colon or opening bracket (:(【「『〈《) is now treated as opening. Sentence/clause-ending punctuation (,。、;!?) is deliberately excluded — a quote after those is usually a CLOSING quote (Chinese puts the period inside: 。"), and including them flipped closing quotes to opening. Verified: pdffonts PingFang-only; pdftotext no sentinel leak, correct opening AND closing quotes (他说:"你好。" closes correctly); visual render no anchor bleed. make-pdf/test: 91 pass / 0 fail. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| src | ||
| test | ||
| SKILL.md | ||
| SKILL.md.tmpl | ||