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: Sun, 29 Oct 2023 17:27:38 +0100 [thread overview]
Message-ID: <87v8apqtff.fsf@zohomail.eu> (raw)
In-Reply-To: <83leblbq9e.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 2035 bytes --]
Hi Eli,
Thanks for the review. I have made the changes you asked for, please
let me know of other changes need.
Eli Zaretskii <eliz@gnu.org> writes:
> Thanks. This lacks a ChangeLog-style commit log message (see
> CONTRIBUTE and "git log" for how we write those).
I have added the commit message with some help from magit. Please let me
know if changes to it are needed.
> Can you come up with a shorter mode-line indicator for this and other
> input methods? We usually use just 1 or 2 letters for it; you used
> something much longer.
Done now, all of them are now 1 or 2 letters.
>> +(defun pakistan--define-quail-rules (rules &optional prefix package)
>> + "Define the rules for an input method.
>
> Our style is to have the first sentence of a doc string be a summary
> of what the function does and also mention all the mandatory
> arguments. I would suggest something like
>
> Define rules for a Pakistan input method as determined by RULES.
Done, with a slight rewording.
>> +(defun pakistan--make-setter (&optional prefix package)
>> + "Retrun the setter function.
> ^^^^^^
> Typo.
Thanks, fixed now.
>> +The function add rules to PACKAGE with PREFIX."
> ^^^
> "adds".
>
>> +(defun pakistan--set-numeral-translations (var val)
>> + "Add translations for digits.
>
> This should mention the arguments.
It does now but awkwardly. Maybe instead of defining this function, the
setter should be lambda?
>> +(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:
>
> Please try not to use lines longer than 79 characters in doc strings.
I have filled the lines in the doc string with a fill column of 78.
> Thanks.
Thanks for the review,
Rahguzar
[-- Attachment #2: 0001-Input-methods-for-Urdu-Pashto-and-Sindhi.patch --]
[-- Type: text/x-patch, Size: 18572 bytes --]
From e2a5f5ce78f3fe0b0f8256f6f2b61412f137200f 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 (quail):
("urdu-keyboard"): new input method
("urdu-phonetic-keyboard"): new input method
("urdu-custom"): new input method
("sindhi-keyboard"): new input method
("pashto-keyboard"): new input method
; (pakistan--define-quail-rules): helper function
; (pakistan--make-setter): helper function
; (pakistan--regenerate-translations): helper function
; (pakistan--set-prefixes): helper function
; (pakistan--set-numeral-translations):
(pakistan-urdu-input): new customization group
(pakistan-urdu-prefixes): new custom variable
(pakistan-urdu-translations): new custom variable
(pakistan-urdu-diacritics-and-other-symbols): new custom var
(pakistan-urdu-poetic-symbols): new custom var
(pakistan-urdu-religious-symbols): new custom var
(pakistan-extra-balochi-brahui-translations): new custom var
(pakistan-extra-pashto-translations): new custom var
(pakistan-extra-sindhi-translations): new custom var
(pakistan-extra-saraiki-hindko-translations): new custom var
(pakistan-urdu-use-roman-digits): new custom var
(pakistan): new package
---
lisp/leim/quail/pakistan.el | 700 ++++++++++++++++++++++++++++++++++++
1 file changed, 700 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..25c1c7a08b8
--- /dev/null
+++ b/lisp/leim/quail/pakistan.el
@@ -0,0 +1,700 @@
+;;; 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
+;;;;;; 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--regenerate-translations ()
+ "Regenerate the translations for urdu-custom input method."
+ (quail-install-map '(nil) "urdu-custom")
+ (pakistan--define-quail-rules pakistan-urdu-translations)
+ (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-translations 'balochi-brahui)
+ (pakistan--define-quail-rules pakistan-extra-pashto-translations 'pashto)
+ (pakistan--define-quail-rules pakistan-extra-saraiki-translations 'saraiki-hindko)
+ (pakistan--define-quail-rules pakistan-extra-sindhi-translations 'sindhi))
+
+(defun pakistan--set-prefixes (var val)
+ "Setter function for `pakistan-urdu-prefixes'.
+VAR should be `pakistan-urdu-prefixes' and VAL is value to be set."
+ (set-default-toplevel-value var val)
+ (when (boundp 'pakistan-urdu-translations)
+ (pakistan--regenerate-translations)))
+
+(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" ?۹)
+ ("%" ?٪)))))
+
+;;;;;; 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 which 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
next prev parent reply other threads:[~2023-10-29 16:27 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 [this message]
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
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=87v8apqtff.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).