Subject: [PATCH] Add support for the Lepcha script
From: समीर सिंह Sameer Singh<[email-masked]>
To: [email-masked]
Date: Thu, 9 Jun 2022 19:59:51 +0530
List-Id: <debbugs-submit.debbugs.gnu.org>

The Lepcha script is added to Emacs this time.
I have also adjusted some whitespace in the newly added Kharoshthi language
environment.

Please review the patch
Thank You.
From 746772b9a572254215ea5dc2798023fc9e47fa87 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E0=A4=B8=E0=A4=AE=E0=A5=80=E0=A4=B0=20=E0=A4=B8=E0=A4=BF?=
 =?UTF-8?q?=E0=A4=82=E0=A4=B9=20Sameer=20Singh?= <[email-masked]>
Date: Thu, 9 Jun 2022 19:54:10 +0530
Subject: [PATCH] Add support for the Lepcha script

* lisp/language/indian.el ("Lepcha"): New language environment.
Add composition rules for Lepcha. Add sample text and input method.
* lisp/language/misc-lang.el ("Kharoshthi"): Adjust whitespace.
* lisp/international/fontset.el (script-representative-chars)
(setup-default-fontset): Support Lepcha.
* lisp/leim/quail/indian.el ("lepcha"): New input method.

* etc/HELLO: Add a Lepcha greeting.
* etc/NEWS: Announce the new language environment.
---
 etc/HELLO                     |  1 +
 etc/NEWS                      |  1 +
 lisp/international/fontset.el |  2 +
 lisp/language/indian.el       | 25 ++++++++++
 lisp/language/misc-lang.el    | 12 ++---
 lisp/leim/quail/indian.el     | 93 +++++++++++++++++++++++++++++++++++
 6 files changed, 128 insertions(+), 6 deletions(-)

diff --git a/etc/HELLO b/etc/HELLO
index 8787a6e0ae..e53bf74f4d 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -76,6 +76,7 @@ Kharoṣṭhī (𐨑𐨪𐨆𐨛𐨁)	𐨣𐨨𐨲𐨪𐨆 𐨐𐨪𐨅𐨨𐨁
 Khmer (ភាសាខ្មែរ)	ជំរាបសួរ
 Lakota (Lakȟotiyapi)	Taŋyáŋ yahí!
 Lao (ພາສາລາວ)	ສະບາຍດີ / ຂໍໃຫ້ໂຊກດີ
+Lepcha (ᰛᰩᰵ)	ᰂᰦᰕᰥᰬ
 Limbu (ᤕᤰᤌᤢᤱ ᤐᤠᤴ)	ᤛᤣᤘᤠᤖᤥ
 Makasar (𑻪𑻢𑻪𑻢)	𑻦𑻤𑻵𑻱
 Malayalam (മലയാളം)	നമസ്കാരം
diff --git a/etc/NEWS b/etc/NEWS
index 9fc8a74419..434525cbf2 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -864,6 +864,7 @@ corresponding language environments are:
 **** Hanifi Rohingya script and language environment
 **** Grantha script and language environment
 **** Kharoshthi script and language environment
+**** Lepcha script and language environment
 
 ---
 *** The "Oriya" language environment was renamed to "Odia".
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 44421a96da..273cba8d63 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -193,6 +193,7 @@ font-encoding-charset-alist
         (balinese #x1B13 #x1B35 #x1B5E)
         (sundanese #x1B8A #x1BAB #x1CC4)
         (batak #x1BC2 #x1BE7 #x1BFF)
+        (lepcha #x1C00 #x1C24 #x1C40)
         (tai-le #x1950)
         (tai-lue #x1980)
         (tai-tham #x1A20 #x1A55 #x1A61 #x1A80)
@@ -767,6 +768,7 @@ setup-default-fontset
                     balinese
                     sundanese
                     batak
+                    lepcha
 		    symbol
 		    braille
 		    yi
diff --git a/lisp/language/indian.el b/lisp/language/indian.el
index 9329b43fea..a6f50962d8 100644
--- a/lisp/language/indian.el
+++ b/lisp/language/indian.el
@@ -244,6 +244,17 @@ 'devanagari
 Grantha script, are supported in this language environment."))
  '("Indian"))
 
+(set-language-info-alist
+ "Lepcha" '((charset unicode)
+            (coding-system utf-8)
+            (coding-priority utf-8)
+            (input-method . "lepcha")
+            (sample-text . "Lepcha (ᰛᰩᰵ)	ᰂᰦᰕᰥᰬ")
+            (documentation . "\
+Lepcha language and its script are supported in this
+language environment."))
+ '("Indian"))
+
 ;; Replace mnemonic characters in REGEXP according to TABLE.  TABLE is
 ;; an alist of (MNEMONIC-STRING . REPLACEMENT-STRING).
 
@@ -734,5 +745,19 @@ malayalam-composable-pattern
                                        "?" avagraha "?")
                                1 'font-shape-gstring))))
 
+;; Lepcha composition rules
+(let ((consonant            "[\x1C00-\x1C23\x1C4D-\x1C4F]")
+      (vowel                "[\x1C26-\x1C2C]")
+      (subjoined-letter     "[\x1C24\x1C25]")
+      (consonant-sign       "[\x1C2D-\x1C35]")
+      (other-signs          "[\x1C36\x1C37]"))
+  (set-char-table-range composition-function-table
+                        '(#x1C24 . #x1C37)
+                        (list (vector
+                               ;; Consonant based syllables
+                               (concat consonant other-signs "?" vowel "?"
+                                       consonant-sign "?" subjoined-letter "?")
+                               1 'font-shape-gstring))))
+
 (provide 'indian)
 ;;; indian.el ends here
diff --git a/lisp/language/misc-lang.el b/lisp/language/misc-lang.el
index e0e7add158..1e915c2f83 100644
--- a/lisp/language/misc-lang.el
+++ b/lisp/language/misc-lang.el
@@ -242,11 +242,11 @@ egyptian-shape-grouping
 
 (set-language-info-alist
  "Kharoshthi" '((charset unicode)
-	           (coding-system utf-8)
-	           (coding-priority utf-8)
-	           (input-method . "kharoshthi")
-               (sample-text . "Kharoṣṭhī (𐨑𐨪𐨆𐨛𐨁)	𐨣𐨨𐨲𐨪𐨆 𐨐𐨪𐨅𐨨𐨁")
-	           (documentation . "\
+	        (coding-system utf-8)
+	        (coding-priority utf-8)
+	        (input-method . "kharoshthi")
+                (sample-text . "Kharoṣṭhī (𐨑𐨪𐨆𐨛𐨁)	𐨣𐨨𐨲𐨪𐨆 𐨐𐨪𐨅𐨨𐨁")
+	        (documentation . "\
 Language environment for Gāndhārī, Sanskrit, and other languages
 using the Kharoṣṭhī script.")))
 
@@ -255,7 +255,7 @@ egyptian-shape-grouping
       (virama        "\U00010A3F")
       (modifier      "[\U00010A0C-\U00010A0F\U00010A38-\U00010A3A]"))
   (set-char-table-range composition-function-table
-		                '(#x10A3F . #x10A3F)
+		        '(#x10A3F . #x10A3F)
                         (list
                          (vector
                           (concat consonant
diff --git a/lisp/leim/quail/indian.el b/lisp/leim/quail/indian.el
index 6a3582e83d..bc61a312fa 100644
--- a/lisp/leim/quail/indian.el
+++ b/lisp/leim/quail/indian.el
@@ -1771,4 +1771,97 @@ "||"
  ("`m" ?𑌁)
  ("`M" ?𑌀))
 
+(quail-define-package
+ "lepcha" "Lepcha" "ᰛᰩᰵ" t "Lepcha phonetic input method.
+
+ `\\=`' is used to switch levels instead of Alt-Gr."
+ nil t t t t nil nil nil nil nil t)
+
+(quail-define-rules
+ ("``" ?₹)
+ ("1"  ?᱁)
+ ("`1" ?1)
+ ("2"  ?᱂)
+ ("`2" ?2)
+ ("3"  ?᱃)
+ ("`3" ?3)
+ ("4"  ?᱄)
+ ("`4" ?4)
+ ("5"  ?᱅)
+ ("`5" ?5)
+ ("6"  ?᱆)
+ ("`6" ?6)
+ ("7"  ?᱇)
+ ("`7" ?7)
+ ("8"  ?᱈)
+ ("`8" ?8)
+ ("9"  ?᱉)
+ ("`9" ?9)
+ ("0"  ?᱀)
+ ("`0" ?0)
+ ("`\\" ?᰻)
+ ("`|" ?᰼)
+ ("`"  ?ᱍ)
+ ("q"  ?ᱍ)
+ ("Q"  ?ᱎ)
+ ("`q" ?᰽)
+ ("`Q" ?᰾)
+ ("w"  ?ᰢ)
+ ("W"  ?ᱏ)
+ ("`w" ?᰿)
+ ("e"  ?ᰬ)
+ ("r"  ?ᰛ)
+ ("R"  ?ᰥ)
+ ("`r" ?ᰲ)
+ ("t"  ?ᰊ)
+ ("T"  ?ᰋ)
+ ("`t" ?ᰳ)
+ ("y"  ?ᰚ)
+ ("Y"  ?ᰤ)
+ ("u"  ?ᰪ)
+ ("U"  ?ᰫ)
+ ("i"  ?ᰧ)
+ ("o"  ?ᰨ)
+ ("O"  ?ᰩ)
+ ("p"  ?ᰎ)
+ ("P"  ?ᰏ)
+ ("`p" ?ᰐ)
+ ("`P" ?ᰱ)
+ ("a"  ?ᰦ)
+ ("A"  ?ᰣ)
+ ("s"  ?ᰠ)
+ ("S"  ?ᰡ)
+ ("d"  ?ᰌ)
+ ("f"  ?ᰑ)
+ ("F"  ?ᰒ)
+ ("g"  ?ᰃ)
+ ("G"  ?ᰄ)
+ ("h"  ?ᰝ)
+ ("H"  ?ᰞ)
+ ("j"  ?ᰈ)
+ ("k"  ?ᰀ)
+ ("K"  ?ᰁ)
+ ("`k" ?ᰂ)
+ ("`K" ?ᰭ)
+ ("l"  ?ᰜ)
+ ("L"  ?ᰯ)
+ ("z"  ?ᰉ)
+ ("Z"  ?ᰅ)
+ ("`z" ?ᰴ)
+ ("`Z" ?ᰵ)
+ ("x"  ?ᰶ)
+ ("X"  ?᰷)
+ ("c"  ?ᰆ)
+ ("C"  ?ᰇ)
+ ("`c" #x200C)  ; ZWNJ
+ ("v"  ?ᰟ)
+ ("b"  ?ᰓ)
+ ("B"  ?ᰔ)
+ ("n"  ?ᰍ)
+ ("N"  ?ᰰ)
+ ("m"  ?ᰕ)
+ ("M"  ?ᰖ)
+ ("`m"  ?ᰮ))
+
+(provide 'indian)
 ;;; indian.el ends here
-- 
2.36.1