unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Rahguzar via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 66470@debbugs.gnu.org
Subject: bug#66470: 29.1; Provide Urdu input method
Date: Sat, 04 Nov 2023 11:56:50 +0100	[thread overview]
Message-ID: <878r7diy29.fsf@zohomail.eu> (raw)
In-Reply-To: <83zfzt50ni.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 545 bytes --]

Hi Eli,

Eli Zaretskii <eliz@gnu.org> writes:

>> The only way I see of silencing the warnings is to use `defvar` to
>> define the variables, then define the setters which references these
>> variables. Is this preferable to the current state?
>
> Yes, definitely.  We don't want warnings while building Emacs, even if
> they are harmless.

I have attached an updated version of the patch which addresses and
other problems indicated in your previous messages. Please let me know
of further changes needed and thanks for the reviews.

Rahguzar


[-- Attachment #2: 0001-Input-methods-for-Urdu-Pashto-and-Sindhi.patch --]
[-- Type: text/x-patch, Size: 19060 bytes --]

From 01298a5fed683db16d7e6fc8108c9d781049f9d5 Mon Sep 17 00:00:00 2001
From: Rahguzar <rahguzar@zohomail.eu>
Date: Sun, 29 Oct 2023 17:14:02 +0100
Subject: [PATCH] Input methods for Urdu, Pashto and Sindhi

* lisp/leim/quail/pakistan.el ("urdu-keyboard")
("urdu-phonetic-keyboard", "urdu-custom", "sindhi-keyboard")
("pashto-keyboard"): New input methods.
(pakistan--define-quail-rules, pakistan--make-setter)
(pakistan--regenerate-translations, pakistan--set-prefixes)
(pakistan--set-numeral-translations):
Internal helper functions.
(pakistan-urdu-input): New customization group.
(pakistan-urdu-prefixes, pakistan-urdu-translations)
(pakistan-urdu-diacritics-and-other-symbols)
(pakistan-urdu-poetic-symbols, pakistan-urdu-religious-symbols)
(pakistan-extra-balochi-brahui-translations)
(pakistan-extra-pashto-translations)
(pakistan-extra-sindhi-translations)
(pakistan-extra-saraiki-hindko-translations)
(pakistan-urdu-use-roman-digits): New custom variables.
(pakistan): New package.
---
 lisp/leim/quail/pakistan.el | 718 ++++++++++++++++++++++++++++++++++++
 1 file changed, 718 insertions(+)
 create mode 100644 lisp/leim/quail/pakistan.el

diff --git a/lisp/leim/quail/pakistan.el b/lisp/leim/quail/pakistan.el
new file mode 100644
index 00000000000..9cfb29f61c8
--- /dev/null
+++ b/lisp/leim/quail/pakistan.el
@@ -0,0 +1,718 @@
+;;; pakistan.el --- Input methods for some languages from Pakistan -*- lexical-binding: t; -*-
+;;
+;; Copyright (C) 2023 Free Software Foundation, Inc.
+
+;; Author: Rahguzar <rahguzar@zohomail.eu>
+;; Keywords: convenience, multilingual, input method, Urdu, Balochi, Pashto, Sindhi, Hindko, Brahui
+;;
+;; 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:
+;; Provides a semi-phonetic input method for Urdu
+;;
+;;; Code:
+(require 'quail)
+
+;;;; Urdu Input Methods
+;;;;; Keyboard
+;; Layout taken from https://www.branah.com/urdu
+(quail-define-package
+ "urdu-keyboard" "Urdu" "ات" t
+ "Input method for Urdu.
+Uses keyboard layout from https://www.branah.com/urdu"
+ nil t t t t nil nil nil nil nil t)
+
+(quail-define-rules
+ ("q" ?ط)
+ ("w" ?ص)
+ ("e" ?ھ)
+ ("r" ?د)
+ ("t" ?ٹ)
+ ("y" ?پ)
+ ("u" ?ت)
+ ("i" ?ب)
+ ("o" ?ج)
+ ("p" ?ح)
+ ("a" ?م)
+ ("s" ?و)
+ ("d" ?ر)
+ ("f" ?ن)
+ ("g" ?ل)
+ ("h" ?ہ)
+ ("j" ?ا)
+ ("k" ?ک)
+ ("l" ?ی)
+ ("z" ?ق)
+ ("x" ?ف)
+ ("c" ?ے)
+ ("v" ?س)
+ ("b" ?ش)
+ ("n" ?غ)
+ ("m" ?ع)
+ ("Q" ?ظ)
+ ("W" ?ض)
+ ("E" ?ذ)
+ ("R" ?ڈ)
+ ("T" ?ث)
+ ("Y" ?ّ)
+ ("U" ?ۃ)
+ ("I" ?ـ)
+ ("O" ?چ)
+ ("P" ?خ)
+ ("A" ?ژ)
+ ("S" ?ز)
+ ("D" ?ڑ)
+ ("F" ?ں)
+ ("G" ?ۂ)
+ ("H" ?ء)
+ ("J" ?آ)
+ ("K" ?گ)
+ ("L" ?ي)
+ ("C" ?ۓ)
+ ("B" ?ؤ)
+ ("N" ?ئ)
+ ("[" ?\])
+ ("]" ?\[)
+ ("{" ?})
+ ("}" ?{)
+ (";" ?؛)
+ ("." ?۔)
+ ("," ?،)
+ ("?" ?؟))
+
+;;;;; Phonetic Keyboard
+(quail-define-package
+ "urdu-phonetic-keyboard" "Urdu" "اص" t
+ "Input method for Urdu.
+Uses phonetic keyboard layout from https://www.branah.com/urdu"
+ nil t t t t nil nil nil nil nil t)
+
+(quail-define-rules
+ ("q" ?ق)
+ ("w" ?و)
+ ("e" ?ع)
+ ("r" ?ر)
+ ("t" ?ت)
+ ("y" ?ے)
+ ("u" ?ء)
+ ("i" ?ی)
+ ("o" ?ہ)
+ ("p" ?پ)
+ ("a" ?ا)
+ ("s" ?س)
+ ("d" ?د)
+ ("f" ?ف)
+ ("g" ?گ)
+ ("h" ?ح)
+ ("j" ?ج)
+ ("k" ?ک)
+ ("l" ?ل)
+ ("z" ?ز)
+ ("x" ?ش)
+ ("c" ?چ)
+ ("v" ?ط)
+ ("b" ?ب)
+ ("n" ?ن)
+ ("m" ?م)
+ ("Q" ?ْ)
+ ("W" ?ٔ)
+ ("E" ?ٰ)
+ ("R" ?ڑ)
+ ("T" ?ٹ)
+ ("Y" ?َ)
+ ("U" ?ئ)
+ ("I" ?ِ)
+ ("O" ?ۃ)
+ ("P" ?ُ)
+ ("A" ?آ)
+ ("S" ?ص)
+ ("D" ?ڈ)
+ ("F" ?أ)
+ ("G" ?غ)
+ ("H" ?ھ)
+ ("J" ?ض)
+ ("K" ?خ)
+ ("L" ?ٖ)
+ ("Z" ?ذ)
+ ("X" ?ژ)
+ ("C" ?ث)
+ ("V" ?ظ)
+ ("B" ?ً)
+ ("N" ?ں)
+ ("M" ?ّ)
+ ("1" ?۱)
+ ("2" ?۲)
+ ("3" ?۳)
+ ("4" ?۴)
+ ("5" ?۵)
+ ("6" ?٦)
+ ("7" ?۷)
+ ("8" ?۸)
+ ("9" ?۹)
+ ("0" ?۰)
+ ("`" ?؏)
+ ("#" ?ؔ)
+ ("$" ?ؒ)
+ ("%" ?٪)
+ ("^" ?ؓ)
+ ("&" ?ؑ)
+ ("*" ?ؐ)
+ ("(" ?\))
+ (")" ?\()
+ ("=" ?+)
+ (";" ?؛)
+ ("\\" ?÷)
+ ("|" ?x)
+ ("," ?،)
+ ("." ?۔)
+ ("<" ?ٗ)
+ (">" ?.)
+ ("?" ?؟)
+ ("[" ?﷽)
+ ("]" ?ﷲ)
+ ("{" ?ﷺ))
+
+;;;;; Customizable Input Method
+;;;;;; Variable declarations
+;; We define these variables now so that setter functions can access them.
+;; Later they will changes to custom variables.
+(defvar pakistan-urdu-prefixes nil)
+(defvar pakistan-urdu-translations nil)
+(defvar pakistan-urdu-diacritics-and-other-symbols nil)
+(defvar pakistan-urdu-poetic-symbols nil)
+(defvar pakistan-urdu-religious-symbols nil)
+(defvar pakistan-urdu-use-roman-digits)
+(defvar pakistan-extra-balochi-brahui-translations nil)
+(defvar pakistan-extra-pashto-translations)
+(defvar pakistan-extra-saraiki-hindko-translations nil)
+(defvar pakistan-extra-sindhi-translations nil)
+
+;;;;;; Helper functions
+(defun pakistan--define-quail-rules (rules &optional prefix package)
+  "Define translations for `urdu-custom' input method as determined by RULES.
+PACKAGE determines the input method and defaults to `urdu-custom'.  RULES is
+the list of rules to define, see `quail-defrule' for details.  If non-nil
+PREFIX is a string that is prefixed to each string in RULES.  PREFIX can be a
+symbol in which case it is looked up in `pakistan-urdu-prefixes' to obtain the
+string."
+  (setq package (or package "urdu-custom"))
+  (when (and prefix (symbolp prefix))
+    (setq prefix (car (alist-get prefix pakistan-urdu-prefixes))))
+  (dolist (rule rules)
+    (quail-defrule (concat prefix (car rule)) (cadr rule) package)))
+
+(defun pakistan--make-setter (&optional prefix package)
+  "Return the setter function.
+The function adds rules to PACKAGE with PREFIX."
+  (lambda (var val)
+    (set-default-toplevel-value var val)
+    (pakistan--define-quail-rules val prefix package)
+    (when (equal current-input-method (quail-name))
+      (activate-input-method current-input-method))))
+
+(defun pakistan--set-numeral-translations (var val)
+  "VAR should be `pakistan-urdu-use-roman-digits' and VAL its value.
+This is a setter function for the custom-variable."
+  (set-default-toplevel-value var val)
+  (if val
+      (pakistan--regenerate-translations)
+    (pakistan--define-quail-rules
+     '(("0"  ?۰)
+       ("1"  ?۱)
+       ("2"  ?۲)
+       ("3"  ?۳)
+       ("4"  ?۴)
+       ("5"  ?۵)
+       ("6"  ?۶)
+       ("7"  ?۷)
+       ("8"  ?۸)
+       ("9"  ?۹)
+       ("%" ?٪)))))
+
+(defun pakistan--regenerate-translations ()
+  "Regenerate the translations for urdu-custom input method."
+  (quail-install-map '(nil) "urdu-custom")
+  (pakistan--define-quail-rules pakistan-urdu-translations)
+  (pakistan--set-numeral-translations
+   'pakistan-urdu-use-roman-digits pakistan-urdu-use-roman-digits)
+  (pakistan--define-quail-rules
+   pakistan-urdu-diacritics-and-other-symbols 'diacritics)
+  (pakistan--define-quail-rules pakistan-urdu-poetic-symbols 'poetic)
+  (pakistan--define-quail-rules pakistan-urdu-religious-symbols 'religious)
+  (pakistan--define-quail-rules
+   pakistan-extra-balochi-brahui-translations 'balochi-brahui)
+  (pakistan--define-quail-rules pakistan-extra-pashto-translations 'pashto)
+  (pakistan--define-quail-rules
+   pakistan-extra-saraiki-hindko-translations 'saraiki-hindko)
+  (pakistan--define-quail-rules pakistan-extra-sindhi-translations 'sindhi))
+
+(defun pakistan--set-prefixes (var val)
+  "VAR should be `pakistan-urdu-prefixes' and VAL is the value to be set.
+Setter function for `pakistan-urdu-prefixes'."
+  (set-default-toplevel-value var val)
+  (when (boundp 'pakistan-urdu-translations)
+    (pakistan--regenerate-translations)))
+
+;;;;;; Package definition
+(quail-define-package
+ "urdu-custom" "Urdu" "اا" t
+ "Intuitive and customizable transl input method for Urdu.
+By default this input method doesn't try to follow the common romanization of
+Urdu very closely.  The reason for this is allow to for input efficiency. It
+works as follows:
+
+1) All lower case letters on QWERTY keyboard are translated to an urdu
+character.  When more than one Urdu letter corresponds to the same Roman
+letter, the most common Urdu letter has been chosen.  The frequency analysis
+was done on the basis of Urdu word list at
+https://github.com/urduhack/urdu-words/blob/master/words.txt As a result some
+of the translations are:
+h → ہ
+s → س , c → ص
+z → ز
+
+2) For the next common letter the uppercase English letter is used, e.g.
+r → ر , R → ڑ
+n → ن , N → ں
+
+3) The letter x is used for postfix completions.  There are two subcases:
+3a) When more than two urdu letter map to the same roman letter,
+e.g.
+t → ت, T → ٹ , tx → ط , Tx → ۃ
+h → ہ , H → ھ , hx → ح , Hx → ۂ
+s → س , c → ص , sx → ش , S → ث , cx → چ
+z → ز , Z → ض, zx → ذ , Zx → ظ
+3b) The urdu letters that are commonly romanized by a English letter + h
+can be obtained by the same English letter + x i.e.
+gx → غ , cx → چ, kx → خ , sx → ش
+
+4) Y → ژ is somewhat of an abberation.  All four of z, Z, zx and Zx are
+used by more common letters.  Y is used for ژ because it is sometimes
+pronounced close to Y for some European languages.
+
+These translations can be changed by customizing `pakistan-urdu-translations'.
+
+5) o is used for prefix completion of diacrtics or اعر۱ب as well as some
+poetic and religious symbols.  The most common three diacritics are mapped to
+oa → zabr (a for above)
+ob → zer  (b for below)
+oo → pesh (o for the circle in pesh)
+
+6) The poetic symbols are also available under G (for غزل), while religious
+symbols are also available under M (for مزہب).
+
+7) Characters from Balochi, Brahui Pashto, Saraiki and Sindhi which are not
+part of Urdu alphabet can also be input.  Each set of these sets correspond to
+a different prefixes. See `pakistan-urdu-prefixes' for the prefixes.
+
+The translations and the prefixes described above can be customized. Various
+customization options can be found under the customization group
+`pakistan-urdu-input'."
+ nil t t t t nil nil nil nil nil t)
+
+;;;;;; Customizations
+(defgroup pakistan-urdu-input nil
+  "Customization group for Urdu input methods."
+  :group 'quail)
+
+(defcustom pakistan-urdu-prefixes
+  '((diacritics "o")
+    (poetic "G")
+    (religious "M")
+    (balochi-brahui "B")
+    (pashto "P")
+    (sindhi "C")
+    (saraiki-hindko "X"))
+  "Prefixes for `urdu-custom' input method."
+  :set #'pakistan--set-prefixes
+  :type '(repeat (list symbol string))
+  :group 'pakistan-urdu-input)
+
+(defcustom pakistan-urdu-translations
+  '(("a" ?ا)
+    ("y" ?ی)
+    ("r" ?ر)
+    ("n" ?ن)
+    ("v" ?و)
+    ("m" ?م)
+    ("t" ?ت)
+    ("l" ?ل)
+    ("k" ?ک)
+    ("b" ?ب)
+    ("d" ?د)
+    ("h" ?ہ)
+    ("s" ?س)
+    ("H" ?ھ)
+    ("p" ?پ)
+    ("N" ?ں)
+    ("g" ?گ)
+    ("sx" ?ش)
+    ("j" ?ج)
+    ("T" ?ٹ)
+    ("f" ?ف)
+    ("cx" ?چ)
+    ("z" ?ز)
+    ("u" ?ع)
+    ("q" ?ق)
+    ("kx" ?خ)
+    ("e" ?ے)
+    ("E" ?ۓ)
+    ("hx" ?ح)
+    ("i" ?ئ)
+    ("R" ?ڑ)
+    ("tx" ?ط)
+    ("c" ?ص)
+    ("D" ?ڈ)
+    ("gx" ?غ)
+    ("A" ?آ)
+    ("Z" ?ض)
+    ("V" ?ؤ)
+    ("zx" ?ذ)
+    ("S" ?ث)
+    ("Zx" ?ظ)
+    ("Hx" ?ۂ)
+    ("ix" ?ء)
+    ("Tx" ?ۃ)
+    ("Y" ?ژ)
+    ("ax" ?أ)
+    ("." ?۔)
+    ("," ?،)
+    (";"  ?؛)
+    ("?"  ?؟))
+  "Translations for Urdu characters and common punctuations."
+  :set (pakistan--make-setter)
+  :type '(repeat (list string character))
+  :group 'pakistan-urdu-input)
+
+(defcustom pakistan-urdu-diacritics-and-other-symbols
+  '(("a" ?َ)  ;; zabar زبر
+    ("b" ?ِ)  ;; zer زير
+    ("o" ?ُ)  ;; pesh پيش
+    ("j" ?ْ)  ;; jazam جزم
+    ("S" ?ّ)  ;; tashdid تشدید
+    ("k" ?ٰ)  ;; khari zabar کھڑی زبر
+    ("u" ?٘)  ;; ulti jazm الٹی جزم
+    ("s" ?؎)
+    ("m" ?؏)
+    ("t" ?ؔ)
+    ("c" ?ؐ)
+    ("r" ?ؒ)
+    ("R" ?ؓ)
+    ("A" ?ؑ))
+  "Translations to input Urdu diacrtics.
+These are available under the prefix specified in `pakistan-urdu-prefixes'."
+  :set (pakistan--make-setter 'diacritics)
+  :type '(repeat (list string character))
+  :group 'pakistan-urdu-input)
+
+(defcustom pakistan-urdu-poetic-symbols
+  '(("s" ?؎)
+    ("m" ?؏)
+    ("t" ?ؔ))
+  "Translation to input Urdu peotic symbols.
+These are available under the prefix specified in `pakistan-urdu-prefixes'."
+  :set (pakistan--make-setter 'poetic)
+  :type '(repeat (list string character))
+  :group 'pakistan-urdu-input)
+
+(defcustom pakistan-urdu-religious-symbols
+  '(("s" ?ؐ)
+    ("r" ?ؒ)
+    ("R" ?ؓ)
+    ("a" ?ؑ)
+    ("A" ?ﷲ)
+    ("S" ?ﷺ))
+  "Translation to input Urdu peotic symbols.
+These are available under the prefix specified in `pakistan-urdu-prefixes'."
+  :set (pakistan--make-setter 'religious)
+  :type '(repeat (list string character))
+  :group 'pakistan-urdu-input)
+
+;; I don't understand how many of these letters are pronounced.
+;; So better translations are welcome.
+(defcustom pakistan-extra-balochi-brahui-translations
+  '(("v" ?ۏ)
+    ("y" ?ݔ)
+;; Brahui
+   ("l" ?ڷ))
+  "Translations to input Balochi and Brahui letters not found in Urdu.
+These are available under the prefix specified in `pakistan-urdu-prefixes'."
+  :set (pakistan--make-setter 'balochi-brahui)
+  :type '(repeat (list string character))
+  :group 'pakistan-urdu-input)
+
+(defcustom pakistan-extra-pashto-translations
+  '(("t" ?ټ)
+    ("d" ?ډ)
+    ("r" ?ړ)
+    ("n" ?ڼ)
+    ("s" ?ښ)
+    ("R" ?ږ)
+    ("h" ?څ)
+    ("H" ?ځ))
+  "Translations to input Pashto letters not found in Urdu.
+These are available under the prefix specified in `pakistan-urdu-prefixes'."
+  :set (pakistan--make-setter 'pashto)
+  :type '(repeat (list string character))
+  :group 'pakistan-urdu-input)
+
+(defcustom pakistan-extra-sindhi-translations
+  '(("k" ?ڪ)
+    ("j" ?ڄ)
+    ("t" ?ٺ)
+    ("T" ?ٽ)
+    ("tx" ?ٿ)
+    ("b" ?ٻ)
+    ("B" ?ڀ)
+    ("r" ?ڙ)
+    ("d" ?ڌ)
+    ("D" ?ڏ)
+    ("dx" ?ڊ)
+    ("Dx" ?ڍ)
+    ("h" ?ڃ)
+    ("c" ?ڇ)
+    ("p" ?ڦ)
+    ("n" ?ڻ)
+    ("g" ?ڳ)
+    ("G" ?ڱ))
+  "Translations to input Sindhi letters not found in Urdu.
+These are available under the prefix specified in `pakistan-urdu-prefixes'."
+  :set (pakistan--make-setter 'sindhi)
+  :type '(repeat (list string character))
+  :group 'pakistan-urdu-input)
+
+(defcustom pakistan-extra-saraiki-hindko-translations
+  '(("b" ?ٻ)
+    ("h" ?ڄ)
+    ("g" ?ڳ)
+    ("d" ?ݙ)
+    ("n" ?ݨ)
+;; Hindko
+    ("r" ?ݬ)
+    ("v" ?ڨ)
+    ("N" ?ݩ)
+    ("V" ?ٷ))
+"Translations to input Saraiki letters not found in Urdu.
+These are available under the prefix specified in `pakistan-urdu-prefixes'."
+  :set (pakistan--make-setter 'saraiki-hindko)
+  :type '(repeat (list string character))
+  :group 'pakistan-urdu-input)
+
+(defcustom pakistan-urdu-use-roman-digits
+  nil
+  "Whether urdu-custom input method should use roman digits."
+  :set #'pakistan--set-numeral-translations
+  :type 'boolean
+  :group 'pakistan-urdu-input)
+
+;;;; Sindhi Input Methods
+;;;;; Keyboard
+;; Layout taken from https://www.branah.com/sindhi
+(quail-define-package
+ "sindhi-keyboard" "Sindhi" "سِ" t
+ "Input method for Sindhi.
+Uses keyboard layout from https://www.branah.com/sindhi ."
+ nil t t t t nil nil nil nil nil t)
+
+(quail-define-rules
+ ("q" ?ق)
+ ("w" ?ص)
+ ("e" ?ي)
+ ("r" ?ر)
+ ("t" ?ت)
+ ("y" ?ٿ)
+ ("u" ?ع)
+ ("i" ?ڳ)
+ ("o" ?و)
+ ("p" ?پ)
+ ("a" ?ا)
+ ("s" ?س)
+ ("d" ?د)
+ ("f" ?ف)
+ ("g" ?گ)
+ ("h" ?ه)
+ ("j" ?ج)
+ ("k" ?ڪ)
+ ("l" ?ل)
+ ("z" ?ز)
+ ("x" ?خ)
+ ("c" ?ط)
+ ("v" ?ڀ)
+ ("b" ?ب)
+ ("n" ?ن)
+ ("m" ?م)
+ ("Q" ?َ)
+ ("W" ?ض)
+ ("E" ?ِ)
+ ("R" ?ڙ)
+ ("T" ?ٽ)
+ ("Y" ?ث)
+ ("U" ?غ)
+ ("I" ?ھ)
+ ("O" ?ُ)
+ ("P" ?ڦ)
+ ("A" ?آ)
+ ("S" ?ش)
+ ("D" ?ڊ)
+ ("F" ?ڦ)
+ ("G" ?ً)
+ ("H" ?ح)
+ ("J" ?ٍ)
+ ("K" ?ۡ)
+ ("L" ?:)
+ ("Z" ?ذ)
+ ("X" ?ّ)
+ ("C" ?ظ)
+ ("V" ?ء)
+ ("B" ?ٻ)
+ ("N" ?ڻ)
+ ("M" ?۾)
+ ("1" ?۱)
+ ("2" ?۲)
+ ("3" ?۳)
+ ("4" ?۴)
+ ("5" ?۵)
+ ("6" ?٦)
+ ("7" ?۷)
+ ("8" ?۸)
+ ("9" ?۹)
+ ("0" ?۰)
+ ("`" ?’)
+ ("-" ?ڏ)
+ ("=" ?ڌ)
+ ("~" ?‘)
+ ("@" ?ى)
+ ("#" ?ؔ)
+ ("$" ?ؒ)
+ ("%" ?٪)
+ ("^" ?ؓ)
+ ("&" ?۽)
+ ("*" ?ؤ)
+ ("(" ?\))
+ (")" ?\()
+ ("[" ?ڇ)
+ ("]" ?چ)
+ ("{" ?ڃ)
+ ("}" ?ڄ)
+ (";" ?ک)
+ ("'" ?ڱ)
+ ("\\" ?ڍ)
+ (":" ?؛)
+ ("|" ?ٺ)
+ ("," ?،)
+ ("/" ?ئ)
+ ("<" ?“)
+ (">" ?”)
+ ("?" ?؟))
+
+
+;;;; Pashto Input Methods
+;;;;; Keyboard
+(quail-define-package
+ "pashto-keyboard" "Pashto" "پ" t
+ "Input method for Pashto.
+Uses keyboard layout from https://www.branah.com/pashto ."
+ nil t t t t nil nil nil nil nil t)
+
+(quail-define-rules
+ ("q" ?ض)
+ ("w" ?ص)
+ ("e" ?ث)
+ ("r" ?ق)
+ ("t" ?ف)
+ ("y" ?غ)
+ ("u" ?ع)
+ ("i" ?ه)
+ ("o" ?خ)
+ ("p" ?ح)
+ ("a" ?ش)
+ ("s" ?س)
+ ("d" ?ی)
+ ("f" ?ب)
+ ("g" ?ل)
+ ("h" ?ا)
+ ("j" ?ت)
+ ("k" ?ن)
+ ("l" ?م)
+ ("z" ?ۍ)
+ ("x" ?ې)
+ ("c" ?ز)
+ ("v" ?ر)
+ ("b" ?ذ)
+ ("n" ?د)
+ ("m" ?ړ)
+ ("Q" ?ْ)
+ ("W" ?ٌ)
+ ("E" ?ٍ)
+ ("R" ?ً)
+ ("T" ?ُ)
+ ("Y" ?ِ)
+ ("U" ?َ)
+ ("I" ?ّ)
+ ("O" ?څ)
+ ("P" ?ځ)
+ ("A" ?ښ)
+ ("S" ?ﺉ)
+ ("D" ?ي)
+ ("F" ?پ)
+ ("G" ?أ)
+ ("H" ?آ)
+ ("J" ?ټ)
+ ("K" ?ڼ)
+ ("L" ?ة)
+ ("Z" ?ظ)
+ ("X" ?ط)
+ ("C" ?ژ)
+ ("V" ?ء)
+ ("B" ?‌)
+ ("N" ?ډ)
+ ("M" ?ؤ)
+ ("1" ?۱)
+ ("2" ?۲)
+ ("3" ?۳)
+ ("4" ?۴)
+ ("5" ?۵)
+ ("6" ?۶)
+ ("7" ?۷)
+ ("8" ?۸)
+ ("9" ?۹)
+ ("0" ?۰)
+ ("`" ?‍)
+ ("~" ?÷)
+ ("@" ?٬)
+ ("#" ?٫)
+ ("%" ?٪)
+ ("^" ?×)
+ ("&" ?«)
+ ("*" ?»)
+ ("_" ?ـ)
+ ("[" ?ج)
+ ("]" ?چ)
+ ("{" ?\[)
+ ("}" ?\])
+ (";" ?ک)
+ ("'" ?ګ)
+ ("\"" ?؛)
+ ("|" ?٭)
+ ("," ?و)
+ ("." ?ږ)
+ ("<" ?،)
+ (">" ?.)
+ ("?" ?؟))
+
+;;; End Matter
+(provide 'pakistan)
+;;; pakistan.el ends here
-- 
2.42.0


  reply	other threads:[~2023-11-04 10:56 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-11 18:36 bug#66470: 29.1; Provide Urdu input method Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-11 18:50 ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-14  8:53   ` Eli Zaretskii
2023-10-14  9:50     ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-14 10:53       ` Eli Zaretskii
2023-10-14 11:10         ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-14 12:36           ` Eli Zaretskii
2023-10-21 18:59             ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-22  4:53               ` Eli Zaretskii
2023-10-29 11:51               ` Eli Zaretskii
2023-10-29 16:27                 ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-04  8:39                   ` Eli Zaretskii
2023-11-04  8:50                     ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-04  9:27                       ` Eli Zaretskii
2023-11-04 10:56                         ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
2023-11-04 11:15                           ` Eli Zaretskii
2023-11-04 14:23                             ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-11 10:21                               ` Eli Zaretskii
2023-11-11 11:54                                 ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-18  9:36                                   ` Eli Zaretskii
2023-11-18 11:12                                     ` Rahguzar via Bug reports for GNU Emacs, the Swiss army knife of text editors

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878r7diy29.fsf@zohomail.eu \
    --to=bug-gnu-emacs@gnu.org \
    --cc=66470@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=rahguzar@zohomail.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).