Skip to content

Error on accessing kerns via fonts.handlers.otf.getkern/fonts.handlers.otf.getgsub with some fonts #329

@a-j-cain

Description

@a-j-cain

The LuaLaTeX code below uses fonts.handlers.otf.getkern to query kerning between T and e.

\documentclass{article}

\usepackage{fontspec}

\setmainfont{texgyretermes-regular.otf} % OK
% \setmainfont{Alegreya-Regular.otf} % Error

\begin{document}

Test

\directlua{
  local fnt = font.current()
  local tfmdata = fonts.hashes.identifiers[fnt]
  local T = string.byte("T")
  local e = string.byte("e")
  print('KERN=' .. tostring(fonts.handlers.otf.getkern(tfmdata,T,e,"kern")))
}

\end{document}

It works fine with TeX Gyre Termes and the result KERN=-55705.6 is printed, but switching to Alegreya (OFL, available here) produces the error luaotfload/fontloader-2023-12-28.lua:19928: 'for' limit must be a number.

The same error appears with certain other fonts, e.g. Minion 3 (non-free), so it seems not to be a problem with the Alegraya font specifically.

Ignoring the error, the document compiles and T and e in ‘Test’ are correctly kerned.

getkern calls font.handlers.otf.getgsub. Calling font.handlers.otf.getgsub(tfmdata,T,"kern") directly gives the same error with Alegreya, but trying other lookups (e.g. "c2sc") in place of "kern" shows no error. I think nofsteps is not being set for the kern lookup, but I do not know why or where.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions