Subject: Re: bug#50951: 28.0.50; Urdu text is not displayed correctly

From: Rah Guzar <[email-masked]>
Date: Tue, 20 Sep 2022 14:35:47 +0200

Hi,
  Thank you so much for this patch. Rendering is perfect in my cursory
  tests after applying this patch.

One last problem which is unrelated to this patch: the beginning of some
lines is often clipped. For example for me the word,
تنہائی
is shown clipped and is visible from the end of the second of two dots
at the top if  it is at the beginning of the line. This seems to be the
case even for fonts which don't misbehave otherwise. My solution has
been to set `bidi-paragraph-direction` to `left-to-right` but that is
not ideal.

Thanks a lot again,
Rah Guzar

YAMAMOTO Mitsuharu <[email-masked]> writes:

> On Sun, 18 Sep 2022 01:37:39 +0900,
> Rah Guzar wrote:
>>
>>
>> I finally tested the patches and both of them improve the situation by a
>> lot but problems still remain. One word that is not rendered by
>> accurately by them is
>>
>> ہنگام
>>
>> Where is problem is fourth character which is
>>         character: گ‎ (displayed as گ‎) (codepoint 1711, #o3257, #x6af)
>>         charset: unicode-bmp (Unicode Basic Multilingual Plane (U+0000..U+FFFF))
>>         code point in charset: 0x06AF
>>         script: arabic
>>
>> This character should be rendered as a circle and two slanted lines
>> which seem to get clipped.
>
> Thanks for testing.
>
> The width of grapheme cluster corresponding to U+06AF (ARABIC LETTER
> GAF) is rounded to zero, and Emacs does not display such clusters:
>
> xdisp.c:
>  32424	      gstring = composition_gstring_from_id (it->cmp_it.id);
>  32425	      it->pixel_width
>  32426		= composition_gstring_width (gstring, it->cmp_it.from, it->cmp_it.to,
>  32427					     &metrics);
>  32428	      if (it->pixel_width == 0)
>  32429		{
>  32430		  it->glyph_not_available_p = true;
>  32431		  it->phys_ascent = it->ascent;
>  32432		  it->phys_descent = it->descent;
>  32433		  it->pixel_width = face->font->space_width;
>  32434		}
>  32435	      else
>
> The attached patch avoids zero-width grapheme clusters by adding 1 to
> the width of the last glyph in such clusters.
>
> 				     YAMAMOTO Mitsuharu
> 				[email-masked]
>
> [2. text/x-patch; avoid-zero-width-grapheme-clusters.diff]...