Subject: bug#20140: 24.4; M17n shaper output rejected

From: Richard Wordingham <[email-masked]>
Date: Mon, 14 Feb 2022 22:14:27 +0000

On Mon, 14 Feb 2022 15:19:36 +0200
Eli Zaretskii <[email-masked]> wrote:

> > Date: Sun, 13 Feb 2022 20:53:10 +0000
> > From: Richard Wordingham <[email-masked]>
> > Cc: [email-masked], [email-masked]
> > 
> > On Sun, 13 Feb 2022 18:04:11 +0200
> > Eli Zaretskii <[email-masked]> wrote:
> >   
> > > But that didn't seem to work well enough: e.g., some marks in your
> > > "sample text" didn't combine with letters, as I think they
> > > should.  
> > 
> > Which ones?  
> 
> Sorry, that was my faulty testing: I tested a half-baked change.  Your
> rules do work correctly, AFAICT.
> 
> But I have 2 questions:
> 
>  1) Why do we need this part of the composition rules:
> 
>      (vector "." 0 'font-shape-gstring)
> 
>     This matches just one character, so what do we want to accomplish
>     by this rule?  A single character cannot "self-compose", can it?

No, but in general it may need shaping, e.g. to take advantage of the
locl feature.  If that's not needed for shaping to happen, then
dispense with it - unless it was need for general consistency.

>  2) Since tai-tham-composable-pattern always starts with what you
>     denote as "C", how about setting up only entries of
>     composition-function-table that correspond to those characters,
>     i.e.:
> 
>      (let ((elt (list (vector tai-tham-composable-pattern 0
> 'font-shape-gstring) )))
>        (set-char-table-range composition-function-table '(#x1A20 .
> #x1A54) elt) (set-char-table-range composition-function-table
> '(#x1A80 . #x1A89) elt) (set-char-table-range
> composition-function-table '(#x1A90 . #x1A99) elt)
> (set-char-table-range composition-function-table '(#x1AA0 . #x1AAD)
> elt))
> 
>     Do you see any problems with that?

It may affect the rendering of isolated marks, particularly the
preposed ones like U+1A55 TAI THAM CONSONANT SIGN MEDIAL RA and
U+1A6E TAI THAM VOWEL SIGN E.  I'll have to investigate HarfBuzz-using
Emacs.  I can't think of any other possible problems.  My first thought
is that it is unnecessarily complicated, and sets up work for when (if?)
TAI THAM LAO LOW HA gets added.

> > You should also add CGJ and ZWNJ, and some people may appreciate
> > ZWJ - the Khottabun font has ligatures involving ZWJ, though it may
> > just be an experimental feature - and ultimately WJ, for when
> > someone writes a Tai Tham word breaker.  
> 
> How should I add CGJ and ZWNJ?  What are the rules?
> 
> > Oh, and Thai and Lao mai t(r)i and mai chat(t)awa and U+0324
> > COMBINING DIAERESIS BELOW turn up occasionally - U+0324 is supported
> > in Thep's Khottabun font, and my Da Lekh series supports Thai mai
> > tri and mai chattawa. These characters seem to work with HarfBuzz.  
> 
> Not sure I understand: what patterns/rules should be added for these?

Add them all to "M" in the definition of tai-tham-composable-pattern.
Strictly, U+0324 should also be added to "S", but I'd be surprised to
see it in a genuine spelling.

Richard.