https://bugs.documentfoundation.org/show_bug.cgi?id=112849

--- Comment #4 from Khaled Hosny <khaledho...@eglug.org> ---
Kashida in LibreOffice is fundamentally broken:

// A note on how Kashida justification is implemented (because it took me 5
// years to figure it out):
// The decision to insert Kashidas, where and how much is taken by Writer.
// This decision is communicated to us in a very indirect way; by increasing
// the width of the character after which Kashidas should be inserted by the
// desired amount.
//
// Writer eventually calls IsKashidaPosValid() to check whether it can insert a
// Kashida between two characters or not.
//
// Here we do:
// - In LayoutText() set KashidaJustification flag based on text script.
// - In ApplyDXArray():
//   * Check the above flag to decide whether to insert Kashidas or not.
//   * For any RTL glyph that has DX adjustment, insert enough Kashidas to
//     fill in the added space.

from
https://gerrit.libreoffice.org/gitweb?p=core.git;a=blob;f=vcl/source/gdi/CommonSalLayout.cxx;h=8e8565717932088558ee7a4b31fc0bfe405e98e3;hb=HEAD#l698

The insanity described above together with the the whole DX array madness and
the use of integers to hold glyph positions, makes is so that any rounding
errors would cause VCL to think that writer wants to insert a kashida in this
place.

Fixing kashida once and for all requires 1) making the communication between
Writer and VCL explicit e.g. have a separate “kashida insertion points” array
2) Kill DX array for good and enter the 21 century (it is an API “inspired” by
Windows 3.1 3) Fix rounding errors by preserving fractional glyph positions in
a way or another.

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
Libreoffice-bugs mailing list
Libreoffice-bugs@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-bugs

Reply via email to