Inconsistent behavior: \addfontfeature and CLD local function
Dear gang, For \addfeature and the like, a virtual font feature defined in terms of a CLD local function behaves differently from other font features. MWE: ============== \startluacode local function squeeze(tfmdata) for k, v in next, tfmdata.characters do v.width = 1.75 * (v.height or 0) v.depth = 1.75 * (v.depth or 0) end end local specification = { name = "sqtfm", description = "test", manipulators = { base = squeeze, node = squeeze, } } fonts.handlers.otf.features.register(specification) \stopluacode \definefontfeature[forceno] [mode=node, script=latn] \definefontfeature[forceyes] [mode=node, script=latn, smcp=force, sqtfm=force] % smcp=yes, % sqtfm=yes] \showglyphs \startTEXpage[offset=1em] \definedfont[texgyretermes-regular*forceyes] % \definedfont[texgyretermes-regular*forceno] % \addfeature{forceyes} abcdefg \stopTEXpage ============== You may toggle these lines: \definedfont[texgyretermes-regular*forceyes] % \definedfont[texgyretermes-regular*forceno] % \addfeature{forceyes} With \definedfont[texgyretermes-regular*forceyes] active we get the expected result: small caps plus some negative squeeze (= spread in this case). With \definedfont[texgyretermes-regular*forceno] \addfeature{forceyes} active we get an *unexpected* result: small caps but no negative squeeze. (Similar results occur if we toggle the "=force" lines with the "=yes" lines, but the larger project of which this is the MWE uses the force key.) Clue: A CLD with a feature defined via fonts.handlers.otf.addfeature doesn't seem to have this problem: ============== \startluacode local function squeeze(tfmdata) for k, v in next, tfmdata.characters do v.width = 1.75 * (v.height or 0) v.depth = 1.75 * (v.depth or 0) end end local specification = { name = "sqtfm", description = "test", manipulators = { base = squeeze, node = squeeze, } } fonts.handlers.otf.features.register(specification) fonts.handlers.otf.addfeature { name = "stest", type = "substitution", data = { a = "X", b = "P", } } \stopluacode \definefontfeature[forceno] [mode=node, script=latn] \definefontfeature[forceyes] [mode=node, script=latn, % % smcp=force, sqtfm=force, stest=force] % % smcp=yes, % sqtfm=yes, % stest=yes] \showglyphs \startTEXpage[offset=1em] \definedfont[texgyretermes-regular*forceyes] % \definedfont[texgyretermes-regular*forceno] % \addfeature{forceyes} abcdefg \stopTEXpage ============== So only the local-function feature appears to exhibit this inconsistency. What is the explanation for this inconsistent behavior? Is there a way to get the expected result for \addfeature etc.? Thank you in advance. Best wishes Idris -- Professor Idris Samawi Hamid Department of Philosophy Colorado State University Fort Collins, CO 80523
On 8/20/2023 5:33 PM, Hamid,Idris wrote:
Dear gang,
For \addfeature and the like, a virtual font feature defined in terms of a CLD local function behaves differently from other font features. MWE:
============== \startluacode local function squeeze(tfmdata) for k, v in next, tfmdata.characters do v.width = 1.75 * (v.height or 0) v.depth = 1.75 * (v.depth or 0) end end
local specification = { name = "sqtfm", description = "test", manipulators = { base = squeeze, node = squeeze, } } because much more has to be done to satisfy the backend (liek advance with and such) .. you cannot just change dimensions on the fly for characters that could potentially be shared just as you can't change glyph dimension mid document
Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Ok, understood. Thank you for the explanation.
Best wishes
Idris
--
Professor Idris Samawi Hamid
Department of Philosophy
Colorado State University
Fort Collins, CO 80523
On Aug 20, 2023, 9:45 AM -0600, Hans Hagen
participants (2)
-
Hamid,Idris
-
Hans Hagen