LMTX: reimplementing texquotes as OTF feature
Hi,
as Hans recommended in the last video meeting, I tried to implement
the texquotes feature using OTF features, and hit two problems:
1) To support German quotes as well, I have two ligatures that end
up as the same glyph:
`` -> “
"' -> “
This can't be in the same ligature feature, as it will overwrite
the table entry with a duplicate key.
After some fiddling, I decided to map "' to a Unicode PUA symbol
and then add a second feature that maps this symbol to “ using
the substitute feature. This works for TeX Gyre Schola.
But perhaps someone knows a nicer way.
2) This approach doesn't work for lmodern or palatino, I still
get "' as inch-sign/quote there... anything else I need to tweak
for these fonts?
\startluacode
fonts.handlers.otf.addfeature {
name = "texlig",
type = "ligature",
data = {
['“'] = { "`", "`" },
['”'] = { "'", "'" },
['„'] = { '"', "`" },
[''] = { '"', "'" },
['‘'] = { "`" },
['’'] = { "'" }
}
}
fonts.handlers.otf.addfeature {
name = "texsub",
type = "substitute",
data = {
[''] = '“',
}
}
\stopluacode
% with lmodern or palatino it breaks
\setupbodyfont[schola]
\definefontfeature[ltest][texlig=yes,texsub=yes,trep=no]
\addff{ltest}
\starttext
``foo'' `foo' "`foo"' 19" rack
\stoptext
Thanks,
--
Leah Neukirchen
On 11/11/2022 10:19 PM, Leah Neukirchen via ntg-context wrote:
Hi,
as Hans recommended in the last video meeting, I tried to implement the texquotes feature using OTF features, and hit two problems:
1) To support German quotes as well, I have two ligatures that end up as the same glyph: `` -> “ "' -> “ This can't be in the same ligature feature, as it will overwrite the table entry with a duplicate key.
After some fiddling, I decided to map "' to a Unicode PUA symbol and then add a second feature that maps this symbol to “ using the substitute feature. This works for TeX Gyre Schola. But perhaps someone knows a nicer way.
2) This approach doesn't work for lmodern or palatino, I still get "' as inch-sign/quote there... anything else I need to tweak for these fonts?
\startluacode fonts.handlers.otf.addfeature { name = "texlig", type = "ligature", data = { ['“'] = { "`", "`" }, ['”'] = { "'", "'" }, ['„'] = { '"', "`" }, [''] = { '"', "'" }, ['‘'] = { "`" }, ['’'] = { "'" } } } fonts.handlers.otf.addfeature { name = "texsub", type = "substitute", data = { [''] = '“', } } \stopluacode
% with lmodern or palatino it breaks \setupbodyfont[schola]
\definefontfeature[ltest][texlig=yes,texsub=yes,trep=no] \addff{ltest}
\starttext
``foo'' `foo' "`foo"' 19" rack
\stoptext can you show what is wrong and what it should be with
fonts.handlers.otf.addfeature { name = "germantexlig", type = "ligature", data = { ['“'] = { "`", "`" }, ['”'] = { "'", "'" }, ['„'] = { '"', "`" }, ['“'] = { '"', "'" }, ['‘'] = { "`" }, ['’'] = { "'" } } } best not use an existign feature because we accumulate ... features come in order (you can force order if needed as you probably saw in one of the test files) \definefontfeature[ltest][germantexlig=yes,trep=no] \addff{ltest} ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Hans Hagen via ntg-context
can you show what is wrong and what it should be with
fonts.handlers.otf.addfeature { name = "germantexlig", type = "ligature", data = { ['“'] = { "`", "`" }, ['”'] = { "'", "'" }, ['„'] = { '"', "`" }, ['“'] = { '"', "'" }, ['‘'] = { "`" }, ['’'] = { "'" } } }
Since `` and "' map to the same character, only "' works. The table has only 5 entries, not 6! (This took me a while to realize. ;))
best not use an existign feature because we accumulate ... features come in order (you can force order if needed as you probably saw in one of the test files)
\definefontfeature[ltest][germantexlig=yes,trep=no] \addff{ltest}
I think "texlig" and "texsub" aren't existing features. But even
renaming doesn't help.
I've attached the working Schola screenshot and the broken LModern
behavior.
--
Leah Neukirchen
participants (2)
-
Hans Hagen
-
Leah Neukirchen