Whether or not certain ligatures should be used (if available in a font) is a least in theory depending on the language used. For example traditional German texts would not have an "ffl" ligature but would have "ft" and also "ch" and "ck".
pdfTeX supports disabling selected ligutures but you will always disable the full set beginning with a certain character, so it is not possible to drop "ffl" but keep "fi", say. (I haven't checked what pdfTeX actually does, this is my understanding from the microtype manual).
From reading through the LuaTeX manual I can see that there should be (in theory) much finer control possible, but I don't see concepts to hook into the ligature mechanism to easily provide a language-based abstraction. In my opinion a mechanism should apply at (or close to) the typesetting stage and not at during input preparation, i.e., the answer to "Can one suppress ligatures for certain words?" addresses this too early in the game.
So my questions are:
- Has something for this already be programmed?
- If not, how complicated would it be, given the current functionality in LuaTeX, or are there some useful interfaces for this still missing?
Unfortunately this doesn't address how to specify that for certain languages you may want to have "ligature-kerns" i.e., some extra kerning used only in a particular language to bring some character pairs closer together than in other languages.
pre_linebreak_filter
to break up these ligatures but this is - if you take the trivial approach - an all or nothing question (disabling ffi is easy, transform ffi to fi is probably not that easy). That said, if you really need this, that should be the callback you should hook into and analyse the list ans de-ligature yourself "manually".\tagcode
primitive of pdftex and as far as I unterstood it clears the complete lig_table of a char. Regarding luate: I think you could use feature files to revert ligatures, see the documentation of luaotfload.