[
https://issues.apache.org/jira/browse/FOP-3343?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jason Harrop updated FOP-3343:
------------------------------
Attachment: FOP-3343-kerning-flag.fo
fop-test-fonts.xconf
> A font configured with kerning="false" is still kerned through GPOS; the flag
> disables only the legacy kern table
> -----------------------------------------------------------------------------------------------------------------
>
> Key: FOP-3343
> URL: https://issues.apache.org/jira/browse/FOP-3343
> Project: FOP
> Issue Type: Bug
> Components: font/opentype
> Affects Versions: 2.11
> Reporter: Jason Harrop
> Priority: Minor
> Attachments: FOP-3343-kerning-flag.fo, fop-test-fonts.xconf
>
>
> The font configuration's kerning attribute is documented as enabling or
> disabling kerning for the font (default true). It does so only for the legacy
> kern table: OFFontLoader skips copyKerning when it is false, and
> GlyphMapping.useKerningAdjustments then finds no kerning info. GPOS
> positioning is independent of it: MultiByteFont.performPositioning runs
> whenever the font has a GPOS table, and every script processor's positioning
> feature list carries kern. So an OpenType font with a GPOS kern feature,
> which is nearly every modern font, is kerned regardless of the flag.
> Two things underneath: the loader never records the flag on the font object,
> so CustomFont.isKerningEnabled() is true for every TrueType font whatever the
> configuration says (only the XML-metrics path sets it); and a producer that
> declares a font twice, once with kerning off and once on, to kern only where
> its source document kerns, gets kerning in both.
> Measured, 2.11 command line, Carlito, "AVATAR" at 14pt, language="en" (with
> the lookup fallback fixed so that GPOS applies to this font at all; see
> FOP-3341):
> {noformat}
> kerning="true" AVATAR 43.19 pt wide
> kerning="false" AVATAR 43.19 pt wide
> {noformat}
> h3. Fix
> # OFFontLoader.buildFont: returnFont.setKerningEnabled(useKerning).
> # MultiByteFont.performPositioning: when kerning is disabled, position with
> the kern feature removed from the script processor's positioning list; mark
> and mkmk still apply, since they are not kerning. Done as a feature delta
> ("-kern") through new overloads of GlyphPositioningTable.position and
> ScriptProcessor.position, the same mechanism as the gsub-features delta.
> After the fix, same sample: kerning="true" 43.19 pt, kerning="false" 46.62
> pt; ligatures (GSUB) unaffected either way.
> Tests: LanguageSystemTestCase (the flag reaches the font),
> MultiByteFontTestCase (the delta reaches positioning), GsubDeltaTestCase (the
> delta on a positioning list).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)