Subject: [PATCH] Add support for the Balinese script

From: समीर सिंह Sameer Singh<[email-masked]>
Date: Thu, 26 May 2022 05:46:11 +0530

This time the beautiful, balinese script is added to Emacs.

Please review the patch.
Thank You.
From a2bb02ac33b95fb476eeb18b59c6f318d3975f5b 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, 26 May 2022 05:34:30 +0530
Subject: [PATCH] Add support for the Balinese script

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

* etc/HELLO: Add a Balinese greeting.
* etc/NEWS: Announce the new language environment and its
input method.
---
 etc/HELLO                     |   1 +
 etc/NEWS                      |   1 +
 lisp/international/fontset.el |   2 +
 lisp/language/indonesian.el   |  64 ++++++++++++
 lisp/leim/quail/indonesian.el | 177 ++++++++++++++++++++++++++++++++++
 lisp/loadup.el                |   1 +
 6 files changed, 246 insertions(+)
 create mode 100644 lisp/language/indonesian.el
 create mode 100644 lisp/leim/quail/indonesian.el

diff --git a/etc/HELLO b/etc/HELLO
index 31f753c73a..248c02b7ab 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -27,6 +27,7 @@ LANGUAGE (NATIVE NAME)	HELLO
 Amharic (አማርኛ)	ሠላም
 Arabic (العربيّة)	السّلام عليكم
 Armenian (հայերեն)	Բարև ձեզ
+Balinese (ᬅᬓ᭄ᬱᬭᬩᬮᬶ)	ᬒᬁᬲ᭄ᬯᬲ᭄ᬢ᭄ᬬᬲ᭄ᬢᬸ
 Belarusian (беларуская)	Прывітанне
 Bengali (বাংলা)	নমস্কার
 Brahmi (𑀩𑁆𑀭𑀸𑀳𑁆𑀫𑀻)	𑀦𑀫𑀲𑁆𑀢𑁂
diff --git a/etc/NEWS b/etc/NEWS
index 0f59d545e3..d6221d5586 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -823,6 +823,7 @@ corresponding language environments are:
 **** Buhid script and language environment
 **** Tagbanwa script and language environment
 **** Limbu script and language environment
+**** Balinese 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 42fbedae1d..a7d7109c8d 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -189,6 +189,7 @@ font-encoding-charset-alist
 	(khmer #x1780)
 	(mongolian #x1826)
         (limbu #x1901 #x1920 #x1936)
+        (balinese #x1B13 #x1B35 #x1B5E)
         (tai-le #x1950)
         (tai-lue #x1980)
         (tai-tham #x1A20 #x1A55 #x1A61 #x1A80)
@@ -758,6 +759,7 @@ setup-default-fontset
                     buhid
                     tagbanwa
                     limbu
+                    balinese
 		    symbol
 		    braille
 		    yi
diff --git a/lisp/language/indonesian.el b/lisp/language/indonesian.el
new file mode 100644
index 0000000000..9a86135d89
--- /dev/null
+++ b/lisp/language/indonesian.el
@@ -0,0 +1,64 @@
+;;; indonesian.el --- Indonesian languages support  -*- coding: utf-8; lexical-binding: t; -*-
+
+;; Copyright (C) 2022 Free Software Foundation, Inc.
+
+;; Author: समीर सिंह Sameer Singh <[email-masked]>
+;; Keywords: multilingual, input method, i18n, Indonesia
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file contains definitions of Indonesia language environments, and
+;; setups for displaying the scripts used there.
+
+;;; Code:
+
+(set-language-info-alist
+ "Balinese" '((charset unicode)
+              (coding-system utf-8)
+              (coding-priority utf-8)
+              (input-method . "balinese")
+              (sample-text . "Balinese (ᬅᬓ᭄ᬱᬭᬩᬮᬶ)	ᬒᬁᬲ᭄ᬯᬲ᭄ᬢ᭄ᬬᬲ᭄ᬢᬸ")
+              (documentation . "\
+Balinese language and its script are supported in this language environment.")))
+
+
+;; Balinese composition rules
+(let ((consonant            "[\x1B13-\x1B33\x1B45-\x1B4B]")
+      (independent-vowel    "[\x1B05-\x1B12]")
+      (rerekan              "\x1B34")
+      (vowel                "[\x1B35-\x1B43]")
+      (modifier-above       "[\x1B00-\x1B04]")
+      (adeg-adeg            "\x1B44")
+      (musical-symbol       "[\x1B6B-\x1B73]"))
+  (set-char-table-range composition-function-table
+                        '(#x1B34 . #x1B44)
+                        (list (vector
+                               ;; Consonant based syllables
+                               (concat consonant rerekan "?" "\\(?:" adeg-adeg consonant
+                                       rerekan "?\\)*\\(?:" adeg-adeg "\\|" vowel "*" rerekan
+                                       "?" modifier-above "?" musical-symbol "?\\)")
+                               1 'font-shape-gstring)
+                              (vector
+                               ;; Vowels based syllables
+                               (concat independent-vowel rerekan "?" adeg-adeg "?"
+                                       vowel "?" modifier-above "?" musical-symbol "?")
+                               1 'font-shape-gstring))))
+
+
+(provide 'indonesian)
+;;; indonesian.el ends here
diff --git a/lisp/leim/quail/indonesian.el b/lisp/leim/quail/indonesian.el
new file mode 100644
index 0000000000..46dafc89f5
--- /dev/null
+++ b/lisp/leim/quail/indonesian.el
@@ -0,0 +1,177 @@
+;;; indonesian.el --- Quail package for inputting Indonesian characters  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022 Free Software Foundation, Inc.
+
+;; Author: समीर सिंह Sameer Singh <[email-masked]>
+;; Keywords: multilingual, input method, i18n, Indonesia
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Input methods for Indonesian languages.
+
+;;; Code:
+
+(require 'quail)
+
+;; This input method supports languages like Buginese, Balinese, Sundanese and
+;; Javanese.
+
+(quail-define-package
+ "balinese" "Balinese" "ᬅ" t "Balinese 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"  ?ᬣ)
+ ("`t" ?᭜)
+ ("`T" ?᭝)
+ ("y"  ?ᬬ)
+ ("Y"  ?ᭂ)
+ ("`y" ?ᭃ)
+ ("`Y" ?᭴)
+ ("u"  ?ᬸ)
+ ("U"  ?ᬹ)
+ ("`u" ?ᬉ)
+ ("`U" ?ᬊ)
+ ("i"  ?ᬶ)
+ ("I"  ?ᬷ)
+ ("`i" ?ᬇ)
+ ("`I" ?ᬈ)
+ ("o"  ?ᭀ)
+ ("O"  ?ᭁ)
+ ("`o" ?ᬑ)
+ ("`O" ?ᬒ)
+ ("p"  ?ᬧ)
+ ("P"  ?ᬨ)
+ ("`p" ?ᭈ)
+ ("`P" ?᭠)
+ ("a"  ?ᬵ)
+ ("A"  ?ᬆ)
+ ("`a" ?ᬅ)
+ ("`A" ?᭵)
+ ("s"  ?ᬲ)
+ ("S"  ?ᬰ)
+ ("`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" ?ᭅ)
+ ("`K" ?ᭆ)
+ ("l"  ?ᬮ)
+ ("L"  ?ᬼ)
+ ("`l" ?ᬍ)
+ ("`L" ?᭪)
+ ("z"  ?ᭊ)
+ ("Z"  ?ᬽ)
+ ("`z" ?ᬎ)
+ ("`Z" ?᭷)
+ ("x"  ?ᬱ)
+ ("X"  ?᬴)
+ ("`x" ?᭸)
+ ("c"  ?ᬘ)
+ ("C"  ?ᬙ)
+ ("`c" #x200C)  ; ZWNJ
+ ("v"  ?ᬯ)
+ ("V"  ?ᭉ)
+ ("`v" ?᭹)
+ ("`V" ?᭺)
+ ("b"  ?ᬩ)
+ ("B"  ?ᬪ)
+ ("`b" ?᭻)
+ ("n"  ?ᬦ)
+ ("N"  ?ᬡ)
+ ("`n" ?ᬗ)
+ ("`N" ?ᬜ)
+ ("m"  ?ᬫ)
+ ("M"  ?ᬂ)
+ ("`m" ?ᬁ)
+ ("`M" ?ᬀ))
+
+(provide 'indonesian)
+;;; indonesian.el ends here
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 9f1da4c0f9..aa15a3bbe8 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -246,6 +246,7 @@
 (load "language/burmese")
 (load "language/cham")
 (load "language/philippine")
+(load "language/indonesian")
 
 (load "indent")
 (let ((max-specpdl-size (max max-specpdl-size 1800)))
-- 
2.36.1