Subject: Re: bug#55370: [PATCH] Add support for the Syloti Nagri script

From: समीर सिंह Sameer Singh<[email-masked]>
Date: Thu, 12 May 2022 20:36:49 +0530

>
> Example of text that doesn't render correctly?
>

For example in tirhuta, when I do this:

;; Tirhuta composition rules
(let ((consonant            "[\x1148F-\x114AF]")
      (nukta                "\x114C3")
      (independent-vowel    "[\x11481-\x1148E]")
      (vowel                "[\x114B0-\x114BE]")
      (nasal                "[\x114BF\x114C0]")
      (virama               "\x114C2"))
  (set-char-table-range composition-function-table
                        '(#x114B0 . #x114BE)
                        (list (vector
                               ;; Consonant based syllables
                               (concat consonant nukta "?\\(?:" virama
consonant nukta "?\\)*\\(?:"
                                       virama "\\|" vowel "*" nukta "?"
nasal "?\\)")
                               1 'font-shape-gstring))))

Notice here, the nasal sign is not included in the range.
And then I type: 𑒅𑓀 𑒆𑒿
It is rendered correctly

But when I do:

;; Tirhuta composition rules
(let ((consonant            "[\x1148F-\x114AF]")
      (nukta                "\x114C3")
      (independent-vowel    "[\x11481-\x1148E]")
      (vowel                "[\x114B0-\x114BE]")
      (nasal                "[\x114BF\x114C0]")
      (virama               "\x114C2"))
  (set-char-table-range composition-function-table
                        '(#x114B0 . #x114C0)
                        (list (vector
                               ;; Consonant based syllables
                               (concat consonant nukta "?\\(?:" virama
consonant nukta "?\\)*\\(?:"
                                       virama "\\|" vowel "*" nukta "?"
nasal "?\\)")
                               1 'font-shape-gstring))))
The range now has the nasal signs.
And then type the above characters: 𑒅𑓀 𑒆𑒿
They are not rendered correctly

But when I include their composition rules:

;; Tirhuta composition rules
(let ((consonant            "[\x1148F-\x114AF]")
      (nukta                "\x114C3")
      (independent-vowel    "[\x11481-\x1148E]")
      (vowel                "[\x114B0-\x114BE]")
      (nasal                "[\x114BF\x114C0]")
      (virama               "\x114C2"))
  (set-char-table-range composition-function-table
                        '(#x114B0 . #x114C0)
                        (list (vector
                               ;; Consonant based syllables
                               (concat consonant nukta "?\\(?:" virama
consonant nukta "?\\)*\\(?:"
                                       virama "\\|" vowel "*" nukta "?"
nasal "?\\)")
                               1 'font-shape-gstring)
                              (vector
                               ;; Nasal vowels
                               (concat independent-vowel nasal "?")
                               1 'font-shape-gstring))))

They are now once more rendered correctly.

So my suggestion is to debug this and figure out why it hangs.  Maybe
> begin by posting the composition rules that you tried originally, and
> let's take it from there.
>

I think I found the problem, this was due to the independent vowel and
nasal rule, I will fix it later.

I don't think I understand this part, either.  Please elaborate.

You had said that since the range only contains vowel signs, (consonant +
nasal) rule does not apply, only (consonant + vowel + nasal) will.
I then said that (consonant + nasal) renders fine without a rule, but
(consonant + vowel + nasal) does not, therefore I had to add a rule for
that.

On Thu, May 12, 2022 at 7:31 PM Eli Zaretskii <[email-masked]> wrote:

> > From: समीर सिंह Sameer Singh <[email-masked]>
> > Date: Thu, 12 May 2022 19:12:09 +0530
> > Cc: [email-masked]
> >
> > I have noticed that when there is no nasal sign in the range of the
> set-char-table-range function, it is rendered
> > correctly when alone with a consonant or an independent vowel.
> > But when it is added to the range, it is not displayed correctly, until
> and unless a composition rule is added
> > for it.
>
> Example of text that doesn't render correctly?
>
> > Sometimes for scripts like Syloti Nagri, Sharada and Kaithi these signs
> are not in a contiguous range with
> > virama and vowel signs (they are far away)
> > So when I add them to the range, Emacs starts to hang. (Maybe because
> the range is too big, or there are
> > unnecessary symbols like consonants there)
> > This is why I had decided to not include them, because they were still
> rendering fine.
> >
> > So should I leave them as it is, or make another set-char-table-range
> that includes only them?
>
> I cannot say, because I don't think I understand the issue.  In
> particular, Emacs should never hang due to this stuff.
>
> So my suggestion is to debug this and figure out why it hangs.  Maybe
> begin by posting the composition rules that you tried originally, and
> let's take it from there.
>
> >  Similarly here: this rule will never match if 'vowel' isn't present,
> >  because the second character of the matching sequence _must_ be a
> >  vowel, since that is what triggers the composition rule in the first
> >  place.  Am I missing something?
> >
> > Here too since consonant vowel nasal was not rendering I added the rule,
> maybe I should remove the "?"
> > after vowel.
> > (consonant nasal was rendering fine)
>
> I don't think I understand this part, either.  Please elaborate.
>