Arthur Reutenauer wrote:
Hello Idris,
I didn't see any reply to this e-mail you sent two weeks ago, so I wanted to give it a try:
In luatex can I make a definition such that such that the string
U004C U0303 (l ̃)
is always treated as l with tilde above, taking into account italics and without using \~l (which does not work in, eg, footnote)?
What you want here is to support the Unicode combining characters, which isn't straightforward in TeX because according to the Standard, they come after the base letter they modify,
Which is a fairly annoying syntax for our purpose.
-- The following should check if we read ‘l’ and ‘combining tilde’ -- consecutively. A lot of overhead; it would be much prettier to -- implement a finite automaton :-)
Thanks for the reminder. We have been thinking about creating an lpeg variant that operates on tokens and/or nodes instead of simple data strings, but that will take quite a bit of work. It would be possible to simplify the loop logic by storing 'v' in a local variable, so that t[] always lags behind one value: function convert_combining(str) local l, t = { }, { } for _, v in ipairs(str) do if v[2] == 0x0303 and l[2] == 0x6c then t[#t+1] = token.create('buildtextaccent') t[#t+1] = token.create('texttilde') end if l[2] then t[#t+1] = l end l = v end if l[2] then t[#t+1] = l end return t end Best wishes, Taco