From fed73338e2263594db68efb3f50d17654cf03f39 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 4 Mar 2026 07:58:16 +0900 Subject: [PATCH] aaaaaaaaanusvara --- OTFbuild/calligra_font_tests.odt | Bin 17283 -> 17320 bytes OTFbuild/opentype_features.py | 12 ++++++++++++ 2 files changed, 12 insertions(+) diff --git a/OTFbuild/calligra_font_tests.odt b/OTFbuild/calligra_font_tests.odt index df8bea4ec98a0463ac847bb7cd142390d08c1ed5..17d1296f6fc0a20933a54cc002e12a7a21dbcc09 100644 GIT binary patch delta 9968 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 delta 9940 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 GsQ&{_nJ?%7 diff --git a/OTFbuild/opentype_features.py b/OTFbuild/opentype_features.py index 7ea931f..01af629 100644 --- a/OTFbuild/opentype_features.py +++ b/OTFbuild/opentype_features.py @@ -1141,6 +1141,18 @@ def _generate_devanagari(glyphs, has, replacewith_subs=None): abvs_body.append(f" sub {glyph_name(0x093F)} @devaAny @devaAny @devaAny" f" {glyph_name(0x0902)}' lookup AnusvaraUpper;") + # Reverse anusvara upper when complex reph is present: the vertical + # offset is encoded in the glyph choice (uni0902 sits 2px lower than + # uF016C), so when complex reph precedes, use the lower form. + if has(0x0902) and has(anusvara_upper) and has(SC.DEVANAGARI_RA_SUPER_COMPLEX): + abvs_lookups.append(f"lookup AnusvaraLower {{") + abvs_lookups.append(f" sub {glyph_name(anusvara_upper)} by {glyph_name(0x0902)};") + abvs_lookups.append(f"}} AnusvaraLower;") + abvs_body.append( + f" sub {glyph_name(SC.DEVANAGARI_RA_SUPER_COMPLEX)}" + f" {glyph_name(anusvara_upper)}' lookup AnusvaraLower;" + ) + if abvs_body: abvs_lines = abvs_lookups[:] if abvs_lookups: