Узел глифов LuaTeX: как узнать компоненты лигатуры

Узел глифов LuaTeX: как узнать компоненты лигатуры

С luatexузлами глифов, представляющими лигатуру, есть componentsполе типа node, которое должно «указывать на компоненты лигатуры». Я не понимаю, как я могу получить компоненты, используя эту ссылку, любая помощь будет высоко оценена.

Для «стандартных» лигатур ff, fi, fl, ffi, ffl, имеющих фиксированный код (от U+FB00 до U+FB04), легко составить таблицу, решающую эту задачу, но как быть с менее распространенными, такими как ct, ft, …?

решение1

Это голова списка узлов, поэтому выглядит (для ff) так, как будто у вас есть hbox с двумя f

\documentclass{article}

\begin{document}

\setbox0\hbox{fish diff --- abc}

\directlua{
glyphn=node.id('glyph')
h=tex.getbox(0)
print('\string\n=====')
for n in node.traverse_id(glyphn,h.list) do
  if (n.components) then
    print(n.char .. ' ' .. utf8.char(n.char))
    for nn in node.traverse_id(glyphn,n.components) do
      print('>> ' .. nn.char .. ' ' .. utf8.char(nn.char) )
    end
  end
end
print('\string\n=====')

}
\end{document}

Печать:

=====
64257 fi
>> 102 f
>> 105 i
64256 ff
>> 102 f
>> 102 f
8212 —
>> 45 -
>> 45 -
>> 45 -

=====

показывающие номера глифов компонентов для fi, ffи---

Я добавил печать символов, а также цифр, хотя это приведет к печати бессмысленных символов для лигатур, использующих не-Unicode-слоты, но это помогает читать простые случаи.

Связанный контент