Subject: Re: bug#56323: 29.0.50; [v2] Add new customisable phonetic Tamil input method

From: Visuwesh <[email-masked]>
Date: Sat, 02 Jul 2022 12:24:39 +0530

[சனி ஜூலை 02, 2022] Eli Zaretskii wrote:

>> From: Visuwesh <[email-masked]>
>> Cc: [email-masked]
>> Date: Sat, 02 Jul 2022 09:32:34 +0530
>> 
>> > Please tell what is the actual order of the characters.  That is,
>> > where is that order defined, and by what criteria?
>> 
>> I'm not sure what you mean "where is that order defined," I don't think
>> there is a definition per se, it just happens to be so.
>> 
>> There are two "classes" of consonants: those that are part of Tamil
>> (let's call them "core") and those borrowed from Sanskrit.  When one
>> writes the consonants in order, the core consonants come first then the
>> Sanskrit ones.  You can find the order of the core consonants in
>> wikipedia here in the table titled "Tamil consonants":
>> https://en.wikipedia.org/wiki/Tamil_script#Letters
>> 
>> We need not worry too much about the order of Sanskrit consonants, we
>> just need to ensure that they come after the core consonants.  You can
>> find these Sanskrit consonants in the table titled "Grantha consonants
>> in Tamil" in the same link.
>> 
>> I hope this is clear.
>> 
>> As for the criteria, it is simply "Tamil consonants then the Sanskrit
>> consonants."
>
> Then your comparison function should first see whether a character is
> in the former or the latter group, and use string-lessp or character
> codepoint comparison with each group, right?  But that's not what you
> did, so I wonder whether my understanding is correct.

It didn't occur to me to do it this way so I tried it out but then I
noticed, string-lessp even within a group won't work.  When you evaluate
the following sexp, you don't get a list of increasing numbers...

    (let ((core-consonants '("க" "ங" "ச" "ஞ" "ட" "ண" "த"
                             "ந" "ப" "ம" "ய" "ர" "ல"
                             "வ" "ழ" "ள" "ற" "ன")))
      (mapcar (lambda (c) (string-to-char c)) core-consonants))

      ;; => (2965 2969 2970 2974 2975 2979 2980 2984 2986 2990 2991 2992
             2994 2997 2996 2995 2993 2985)

and sure enough when you do (sort core-consonants #'string-lessp) the
list is jumbled up instead of retaining the order.
[ core-consonants, as declared, is in the right order but sort jumbles
  it up.  ]

But string-lessp works for vowels.  It is the consonants that is the
problem.