Skip to content

fix: quote escapes, named dependency stages, not_word, library string classes - #19

Merged
ronaldtse merged 1 commit into
mainfrom
fix/remaining-singletons
Oct 1, 2026
Merged

ronaldtse merged 1 commit into
mainfrom
fix/remaining-singletons

Conversation

@ronaldtse

Copy link
Copy Markdown
Contributor

Four conformance gaps, each measured against the Ruby interpreter:

Quote escapes. The expression unescaper decoded only \uXXXX, so a result round-tripping through expression source kept \" as a backslash-quote — gost-rus maps the hard sign to " and съезд came out s\"ezd. Standard escapes now decode.

Named dependency stages. run map.<alias>.stage.<name> executed the dependency's main stage, ignoring the named one. mvd-rus-2010 runs the 2008 dependency's translit stage precisely to skip its trailing compose, which would precompose l+U+0301 into ĺ before the postrule can strip the acute.

not_word joins the stdlib aliases (odni-che guards the digit 1 with it) — Onigmo's ASCII \W = [^a-zA-Z0-9_].

Library string classes. A library alias holding a bare string acts as a character class inside any() (the unicode library's greek), while an in-map string alias is a literal sequence — both measured with synthetic maps on Ruby. alalc-ell's γ-nasalization rules guard on any(greek); the lookbehind had compiled to the literal 300-character Greek alphabet.

Direct corpus sweep: 16 failures / 10 maps → 4 / 3 — alalc-ell-2010, bas-rus, bgnpcgn-rus-1947, both gost-rus, mvd-rus-2010 and odni-che fully healed. Only odni-ara 2004/2015 (4 examples) and the rababa map (needs the ML model; excluded by design) remain.

… classes

Four conformance gaps, each measured against Ruby:

- The expression unescaper decoded only \uXXXX, so a result round-
  tripping through expression source kept \" as a backslash-quote:
  gost-rus maps the hard sign to a double quote and съезд came out
  s\"ezd. Standard escapes now decode.

- run map.<alias>.stage.<name> executed the dependency's main stage,
  ignoring the named one. mvd-rus-2010 runs the 2008 dependency's
  translit stage precisely to skip its trailing compose, which would
  precompose l+U+0301 into ĺ before the postrule strips the acute.

- not_word joins the stdlib aliases (odni-che guards the digit 1 with
  it); it is Onigmo's ASCII \W, [^a-zA-Z0-9_].

- A library alias holding a bare string acts as a character class
  inside any() — the unicode library's greek — while an in-map string
  alias is a literal sequence (both measured with synthetic maps).
  alalc-ell's gamma nasalization rules guard on any(greek); the look-
  behind had compiled to the literal 300-character alphabet.

Direct corpus sweep: 16 failures / 10 maps -> 4 / 3 — alalc-ell-2010,
bas-rus, bgnpcgn-rus-1947, both gost-rus, mvd-rus-2010 and odni-che
fully healed. Only odni-ara 2004/2015 (4 examples) and the rababa
map (needs the ML model; excluded by design) remain.
@ronaldtse
ronaldtse merged commit 16e250d into main Oct 1, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant