Subject: bug#55328: [PATCH] Add support for the Sharada script

From: समीर सिंह Sameer Singh <[email-masked]>
Date: Mon, 9 May 2022 04:29:31 +0530

Sharada script support is added to Emacs this time.
Please review the patch.
From 72f5abdfb5df853cc0d2f241938571c209250007 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: Mon, 9 May 2022 04:22:57 +0530
Subject: [PATCH] Add support for the Sharada script

* lisp/language/indian.el ("Sharada"): New language environment.
Add composition rules for Sharada.  Add sample text and input
method.
* lisp/international/fontset.el (script-representative-chars)
(setup-default-fontset): Support Sharada.
* lisp/leim/quail/indian.el ("sharada"): New input method.

* etc/HELLO: Add a Sharada greeting.
* etc/NEWS: Announce the new language environment and its
input method.
---
 etc/HELLO                     |   2 +
 etc/NEWS                      |   5 ++
 lisp/international/fontset.el |   2 +
 lisp/language/indian.el       |  43 ++++++++++++
 lisp/leim/quail/indian.el     | 119 ++++++++++++++++++++++++++++++++++
 5 files changed, 171 insertions(+)

diff --git a/etc/HELLO b/etc/HELLO
index f5e2adae94..96da105e73 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -75,6 +75,7 @@ Norwegian (norsk)	Hei / God dag
 Oriya (ଓଡ଼ିଆ)	ଶୁଣିବେ
 Polish  (język polski)	Dzień dobry! / Cześć!
 Russian (русский)	Здра́вствуйте!
+Sharada (𑆯𑆳𑆫𑆢𑆳)	𑆤𑆩𑆱𑇀𑆑𑆳𑆫
 Sinhala (සිංහල)	ආයුබෝවන්
 Slovak (slovenčina)	Dobrý deň
 Slovenian (slovenščina)	Pozdravljeni!
diff --git a/etc/NEWS b/etc/NEWS
index 5d2b5e12cf..430f788436 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -749,6 +749,11 @@ This language environment supports Tirhuta or Mithilaakshar, which is
 used to write the Maithili language.  A new input method, 'tirhuta',
 is provided to type text in this script.
 
+*** New language environment "Sharada".
+This language environment supports the Sharada script. Named after the
+goddess of learning, this script is used to write the Kashmiri language.
+A new input method, 'sharada', is provided to type text in this script.
+
 
 * Changes in Specialized Modes and Packages in Emacs 29.1
 
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 2d417d632f..7fa390a34b 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -234,6 +234,7 @@ font-encoding-charset-alist
         (brahmi #x11013 #x11045 #x11052 #x11065)
         (kaithi #x1108D #x110B0 #x110BD)
 	(mahajani #x11150)
+        (sharada #x11191 #x111B3 #x111CD)
 	(khojki #x11200)
 	(khudawadi #x112B0)
 	(grantha #x11305)
@@ -774,6 +775,7 @@ setup-default-fontset
                     old-uyghur
                     brahmi
                     kaithi
+                    sharada
                     tirhuta
 		    makasar
                     dives-akuru
diff --git a/lisp/language/indian.el b/lisp/language/indian.el
index 922061c3b6..4b6c4744f1 100644
--- a/lisp/language/indian.el
+++ b/lisp/language/indian.el
@@ -158,6 +158,17 @@ 'devanagari
 language environment."))
  '("Indian"))
 
+(set-language-info-alist
+ "Sharada" '((charset unicode)
+             (coding-system utf-8)
+             (coding-priority utf-8)
+             (input-method . "sharada")
+             (sample-text . "Sharada (𑆯𑆳𑆫𑆢𑆳)        𑆤𑆩𑆱𑇀𑆑𑆳𑆫")
+             (documentation . "\
+Kashmiri language and its script Sharada is supported in this
+language environment."))
+ '("Indian"))
+
 
 ;; Replace mnemonic characters in REGEXP according to TABLE.  TABLE is
 ;; an alist of (MNEMONIC-STRING . REPLACEMENT-STRING).
@@ -461,17 +472,20 @@ malayalam-composable-pattern
   (set-char-table-range composition-function-table
                         '(#x110B0 . #x110BA)
                         (list (vector
+                               ;; Consonant based syllables
                                (concat consonant nukta "?\\(?:" virama zwj "?" consonant nukta "?\\)*\\(?:"
                                        virama zwj "?\\|" vowel "*" nukta "?" anusvara-candrabindu "?\\)")
                                1 'font-shape-gstring)))
   (set-char-table-range composition-function-table
                         '(#x110BD . #x110BD)
                         (list (vector
+                               ;; Number sign
                                (concat number-sign numerals)
                                0 'font-shape-gstring)))
   (set-char-table-range composition-function-table
                         '(#x110CD . #x110CD)
                         (list (vector
+                               ;; Number sign above
                                (concat number-sign-above numerals)
                                0 'font-shape-gstring))))
 
@@ -486,8 +500,37 @@ malayalam-composable-pattern
   (set-char-table-range composition-function-table
                         '(#x114B0 . #x114C3)
                         (list (vector
+                               ;; Consonant based syllables
                                (concat consonant nukta "?\\(?:" virama consonant nukta "?\\)*\\(?:"
                                        virama "\\|" vowel "*" nukta "?" anusvara-candrabindu "?\\)")
                                1 'font-shape-gstring))))
 
+;; Sharada composition rules
+(let ((consonant              "[\x11191-\x111B2]")
+      (nukta                  "\x111CA")
+      (vowel                  "[\x111B3-\x111BF\x111CE]")
+      (vowel-modifier         "\x111CB")
+      (extra-short-vowel-mark "\x111CC")
+      (anusvara-candrabindu   "[\x11181\x11180\x111CF]")
+      (virama                 "\x111C0")
+      (fricatives             "[\x111C2\x111C3]")
+      (sandhi-mark            "\x111C9")
+      (misc                   "[^\x11180-\x111C0\x111C2\x111C3\x111C9-\x111CC\x111CE-\x111CF]"))
+  (set-char-table-range composition-function-table
+                        '(#x111B3 . #x111CF)
+                        (list (vector
+                               ;; Consonant based syllables
+                               (concat consonant nukta "?" vowel-modifier "?\\(?:" virama
+                                       consonant nukta "?" vowel-modifier "?\\)*\\(?:" virama
+                                       "\\|" vowel "*" nukta "?" anusvara-candrabindu "?"
+                                       extra-short-vowel-mark "?" vowel-modifier "?" sandhi-mark
+                                       "?+" misc "?\\)")
+                               1 'font-shape-gstring)))
+  (set-char-table-range composition-function-table
+                        '(#x111C2 . #x111C3)
+                        (list (vector
+                               ;; Fricatives with Consonants
+                               (concat fricatives "?" consonant vowel "?")
+                               0 'font-shape-gstring))))
+
 ;;; indian.el ends here
diff --git a/lisp/leim/quail/indian.el b/lisp/leim/quail/indian.el
index f730a5ca0f..b1e547a26e 100644
--- a/lisp/leim/quail/indian.el
+++ b/lisp/leim/quail/indian.el
@@ -1043,5 +1043,124 @@ "||"
 ("`m" ?𑒿)
 )
 
+(quail-define-package
+ "sharada" "Sharada" "𑆯𑆳" t "Sharada 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" ?𑇋)
+("`W" ?𑇍)
+("e"  ?𑆼)
+("E"  ?𑆽)
+("`e" ?𑆍)
+("`E" ?𑆎)
+("r"  ?𑆫)
+("R"  ?𑆸)
+("`r" ?𑆉)
+("`R" ?𑇎)
+("t"  ?𑆠)
+("T"  ?𑆡)
+("y"  ?𑆪)
+("u"  ?𑆶)
+("U"  ?𑆷)
+("`u" ?𑆇)
+("`U" ?𑆈)
+("i"  ?𑆴)
+("I"  ?𑆵)
+("`i" ?𑆅)
+("`I" ?𑆆)
+("o"  ?𑆾)
+("O"  ?𑆿)
+("`o" ?𑆏)
+("`O" ?𑆐)
+("p"  ?𑆥)
+("P"  ?𑆦)
+("`p" ?𑇃)
+("a"  ?𑆳)
+("A"  ?𑆄)
+("`a" ?𑆃)
+("s"  ?𑆱)
+("S"  ?𑆯)
+("d"  ?𑆢)
+("D"  ?𑆣)
+("`d" ?𑇚)
+("`D" ?𑇛)
+("f"  ?𑇀)
+("F" ?𑆹)
+("`f" ?𑆊)
+("`F" ?𑇌)
+("g"  ?𑆓)
+("G"  ?𑆔)
+("`g" ?𑇜)
+("`G" ?𑇝)
+("h"  ?𑆲)
+("H"  ?𑆂)
+("`h" ?𑇞)
+("`H" ?𑇟)
+("j"  ?𑆘)
+("J"  ?𑆙)
+("`j" ?᳘)
+("`J" ?᳕)
+("k"  ?𑆑)
+("K"  ?𑆒)
+("`k" ?𑇂)
+("l"  ?𑆬)
+("L" ?𑆭)
+("`l" ?𑆺)
+("`L" ?𑆋)
+("z"  ?𑆚)
+("Z"  ?𑆕)
+("`z" ?𑆻)
+("`Z" ?𑆌)
+("x"  ?𑆰)
+("X"  ?𑇊)
+("c"  ?𑆖)
+("C"  ?𑆗)
+("`c" #x200C)  ; ZWNJ
+("v"  ?𑆮)
+("b"  ?𑆧)
+("B"  ?𑆨)
+("n"  ?𑆤)
+("N"  ?𑆟)
+("`n" ?𑇄)
+("`N" ?𑇁)
+("m"  ?𑆩)
+("M"  ?𑆁)
+("`m" ?𑆀)
+("`M" ?𑇏)
+)
 
 ;;; indian.el ends here
-- 
2.36.1