HarfBuzz provide an OpenType layout engine (Graphite support existed at some point, but were removed to be rewritten, AAT is planned in some distant future) but no bidi (the client have to do it in its own or use other libraries like fribidi).
HarfBuzz workflow is usually 1) loading a font in FreeType 2) shaping text in HarfBuzz for that font 3) getting back glyph indices and positions. Of course there are more details like itemizing the text, selecting font features and so on.
FreeType is not mandatory, but using it simplifies the process.
Hans have written (and still improving) an OpenType layout engine completely in lua(tex) and it more or less does what HarfBuzz would do, it may support more features than HarfBuzz but HarfBuzz code is more widely tested, so each have its pros and cons.
I can imagine a separate module where HarfBuzz is plugged into LuaTeX allowing it to process node lists instead of text strings (HarfBuzz have callbacks that I think can be used to plug function that deal with node buffers instead of text strings), it can be an interesting exercise and I expect HarfBuzz maintainer to be willing to cooperate.
Regards, Khaled
--
Khaled Hosny Egyptian
Dear Khaled Thanks very much indeed for this helpful summary. I've now compiled HarfBuzz on Windows (using Visual Studio) so, it's time to explore it :-) Just to add, I do of course understand why libraries such as HarfBuzz should not be part of core LuaTeX and only ever "plugged in" via library facilities as a DLL/so. As I'm sure many others have experienced when using/building tools, it can be quite annoying to hit "multiple cascading library dependancies" which can be a real nightmare to sort out even for a one-off build, let alone trying to maintain! Thanks again to everyone for the discussions on this thread. Cheers Graham