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

From: YAMAMOTO Mitsuharu <[email-masked]>
Date: Tue, 20 Sep 2022 12:41:40 +0900

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]