[NTG-context] LMTX: reimplementing texquotes as OTF feature

Hans Hagen j.hagen at xs4all.nl
Fri Nov 11 23:51:18 CET 2022


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
-----------------------------------------------------------------



More information about the ntg-context mailing list