1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-11 16:08:13 +00:00

Update the Persian input methods.

leim/quail/persian.el: Update which includes: (1) full compliance to
 ISIRI-6219, forbiden characters were eliminated and missing
 characters were added; (2) layer 3 of ISIRI-9147 is now
 implemented with a '\' prefix; (3) double entry of characters
 which were postfixed with 'h' is now supported; (4) lots of
 comment and additional pointers have been added.
This commit is contained in:
Mohsen BANAN 2012-03-09 14:18:25 +02:00 committed by Eli Zaretskii
parent 3f018d6d39
commit 4f96ea3f4f
2 changed files with 308 additions and 81 deletions

View File

@ -1,3 +1,12 @@
2012-03-09 Mohsen BANAN <libre@mohsen.1.banan.byname.net>
* quail/persian.el: Update which includes: (1) full compliance to
ISIRI-6219, forbiden characters were eliminated and missing
characters were added; (2) layer 3 of ISIRI-9147 is now
implemented with a '\' prefix; (3) double entry of characters
which were postfixed with 'h' is now supported; (4) lots of
comment and additional pointers have been added.
2011-12-15 Kenichi Handa <handa@m17n.org>
* quail/ethiopic.el ("ethiopic"): Do not refer to

View File

@ -2,8 +2,8 @@
;; Copyright (C) 2011-2012 Free Software Foundation, Inc.
;; Author: Mohsen BANAN <libre@mohsen.banan.1.byname.net>
;; http://mohsen.banan.1.byname.net/contact
;; Author: Mohsen BANAN <libre@mohsen.1.banan.byname.net>
;; http://mohsen.1.banan.byname.net/contact
;; Keywords: multilingual, input method, Farsi, Persian, keyboard
@ -27,12 +27,15 @@
;;; Commentary:
;;
;; This file contains a collection of input methods for
;; Persian languages - Farsi, Urdu, Pashto (Afghani), ...
;; Persian languages (Farsi, Urdu, Pashto/Afghanic, ...)
;;
;; At this time, the following input methods are specified:
;;
;; - (farsi) Persian Keyboard based on Islamic Republic of Iran's ISIR-9147
;; - (farsi-translit) Intuitive transliteration keyboard layout for Persian
;; - (farsi-isiri-9149) Persian Keyboard based on Islamic Republic of Iran's ISIR-9147
;; - (farsi-transliterate-banan) An intuitive transliteration keyboard for Farsi
;;
;; Additional documentaion for these inpput methods can be found at:
;; http://www.persoarabic.org/PLPC/120036
;;
;;; Code:
@ -42,42 +45,71 @@
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; farsi
;; farsi-isiri-9147
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; The keyboard mapping defined here is based on:
;;
;; Institute of Standards and Industrial Research of Iran
;; Information Technology Layout of Persian Letters and Symbols on Computer Keyboards
;; ISIRI 9147 -- 1st edition
;; http://www.isiri.org/UserStd/DownloadStd.aspx?id=9147
;; Institute of Standards and Industrial Research of Iran
;; Information Technology Layout of Persian Letters and Symbols
;; on Computer Keyboards
;; ISIRI 9147 -- 1st edition
;; http://www.isiri.org/UserStd/DownloadStd.aspx?id=9147
;;
;; Only layers 1 and 2 of ISIRI-9147 are applicable to emacs.
;; The specification is also republished at
;; http://www.farsiweb.ir/wiki/Image:Isiri-9147.pdf
;; and various other sites.
;;
;; This input method was built using the Farsi table in X Keyboard Configuration Data Base.
;; ISIRI-6219 is also relevant.
;;
;; 0) Selected gnome keyboard "USA"
;; 1) Created a list of all keys
;; 2) Selected gnome keyboard "Iran"
;; 3) For each key just press it and get the mapped persian character
;; Layers 1, 2 and 3 of ISIRI-9147 are fully implemented with the
;; exception of the Backslash, Alt-Backslash, Shift-Space and
;; Alt-Space keys.
;;
;; The Backslash key is used to replace کلید با دگر ساز راست‌ -- the Alt or
;; Meta key.
;;
;; Layer 3 is then entered with the Backslash key and Layer 3 is
;; implemented as two letter keys as specified in ISIRI-9147.
;;
;; The character corresponding to Backslash is entered with Backslash-Backslash.
;; Alt-Backslash has been moved to Backslash-r.
;; Alt-Space has been moved to Backslash-t.
;; Shift-Space has been moved to Backslash-y.
;;
;; With these modifications, farsi-isiri-9147 is a full implementation
;; of ISIRI-9147. Additionally, these modifications allow for this
;; implementation to be ascii input stream based -- in addition to
;; being a keyboard layout.
;;
;; If a key on Layer 1 was reserved to replace دگر ساز راست‌ (the Alt
;; or Meta key), then farsi-isiri-9147 could have claimed full
;; compliance -- without the need for the above description. Perhaps
;; this can be considered a flaw in the base ISIRI-9147 specification
;; to be addressed in the next revision.
;;
(quail-define-package
"farsi" "Farsi" " ف" nil "Farsi input method.
"farsi-isiri-9147" "Farsi" " ف" nil "Farsi input method.
Based on ISIRI-9149 Layout of Persian Letters and Symbols on Computer Keyboards.
Based on ISIRI-9147 Layout of Persian Letters and Symbols on Computer Keyboards.
" nil t t t t nil nil nil nil nil t)
;; Note: the rows of keys below are enclosed in Left-To-Right Override
;; embedding, to prevent them from being reordered by the Emacs
;; display engine.
;; +----------------------------------------------------------------+
;; | ۱! | ۲٬ | ۳٫ | ۴﷼ | ۵٪ | ۶× | ۷، | ۸* | ۹) | ۰( | -ـ | =+ | `÷ |
;; | ۱! | ۲٬ | ۳٫ | ۴﷼ | ۵٪ | ۶× | ۷، | ۸* | ۹( | ۰) | -ـ | =+ | `÷ |
;; +----------------------------------------------------------------+
;; | ضْ| صٌ| ثٍ| قً| فُ| غِ| عَ| هّ| خ] | ح[ | ج} | چ{ |
;; | ضْ| صٌ| ثٍ| قً| فُ| غِ| عَ| هّ| خ] | ح[ | ج{ | چ} |
;; +------------------------------------------------------------+
;; | شؤ | سئ | یي | بإ | لأ | اآ | تة | ن» | م« | ک: | گ؛ | \| |
;; | ش‌ؤ | س‌ئ | ی‌ي | ب‌إ | لأ | اآ | ت‌ة | ن« | م» | ک: | گ؛ | \| |
;; +-----------------------------------------------------------+
;; | ظك | طٓ| زژ | رٰ| ذB | دٔ| پء | و> | .< | /؟ |
;; | ظ‌ك | طٓ| زژ | رٰ| ذB | دٔ| پء | و< | .> | /؟ |
;; +-------------------------------------------+
(quail-define-rules
@ -93,7 +125,7 @@ Based on ISIRI-9149 Layout of Persian Letters and Symbols on Computer Keyboards.
("0" ?۰)
("-" ?-)
("=" ?=)
;;("`" ?\)) ;; اتصال مجازى
("`" ?\u200D) ;; ZWJ -- ZERO WIDTH JOINER اتصال مجازى
("q" )
("w" )
("e" )
@ -117,7 +149,7 @@ Based on ISIRI-9149 Layout of Persian Letters and Symbols on Computer Keyboards.
("l" )
(";" )
("'" )
("\\" ?\\) ;; خط اريب وارو
("z" )
("x" )
("c" )
@ -170,93 +202,204 @@ Based on ISIRI-9149 Layout of Persian Letters and Symbols on Computer Keyboards.
("X" )
("C" )
("V" )
;; ("B" ?) ;; فاصلهً مجازى
("B" ?\u200C) ;; ZWNJ -- ZERO WIDTH NON-JOINER فاصلهٔ مجازى
("N" ) ;; همزه فارسى بالا
("M" ) ;; harf farsi hamzeh
("<" ?>)
(">" ?<)
("?" )
;; Level 3 Entered with \
;;
("\\" ?\\) ;; خط اريب وارو
("\\\\" ?\\)
("\\~" ?\u007E)
("\\1" ?\u0060)
("\\2" ?\u0040)
("\\3" ?\u0023)
("\\4" ?\u0024)
("\\5" ?\u0025)
("\\6" ?\u005E)
("\\7" ?\u0026)
("\\8" ?\u2022)
("\\9" ?\u200E)
("\\0" ?\u200F)
("\\-" ?\u005F)
("\\+" ?\u2212)
("\\q" ?\u00B0)
;;\\w" ?\u0000)
("\\e" ?\u20AC)
("\\r" ?\u2010) ;; replacement for Alt-BSL
("\\t" ?\u00A0) ;; replacement for ALT-SPC
("\\y" ?\u200C) ;; replacement for SHIFT-SPC
;;("\\u" ?\u0000)
("\\i" ?\u202D)
("\\o" ?\u202E)
("\\p" ?\u202C)
("\\[" ?\u202A)
("\\]" ?\u202B)
;;("\\a" ?\u0000)
;;("\\s" ?\u0000)
("\\d" ?\u0649)
;;("\\f" ?\u0000)
;;("\\g" ?\u0000)
("\\h" ?\u0671)
;;("\\j" ?\u0000)
("\\k" ?\uFD3E)
("\\l" ?\uFD3F)
("\\;" ?\u003B)
("\\'" ?\u0022)
;;("\\z" ?\u0000)
;;("\\x" ?\u0000)
;;("\\c" ?\u0000)
("\\v" ?\u0656)
("\\b" ?\u200D)
("\\n" ?\u0655)
("\\m" ?\u2026)
("\\," ?\u002C)
("\\." ?\u0027)
("\\?" ?\u003F)
;;("\\\\" ?\u2010) ;; Moved to backslash r to leave room for BSL-BSL
)
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; farsi-translit
;; farsi-transliterate-banan
;;
;; Given a Qwerty keyboard, use Persian-to-Latin transliteration knowledge
;; to reverse transliterate in persian
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; This is a persian/farsi transliteration keyboard designed
;;; for people who:
;;; - Know how to write in farsi
;;; - Are comfortable with the qwerty keyboard
;;; - Are familiar with two letter phonetic mapping to persian characters
;;; (e.g.: gh, kh, ch, sh, zh, hh, lh)
;;; See http://www.persoarabic.org/PLPC/120036 document for more complete
;;; documentation of keyboard bindings and usage instructions.
;;;
;;; This translit keyboard is designed to be intuitive such that
;;; mapping are easy and natural to remember for a persian writer.
;;; For some persian characters there are multiple ways of inputting
;;; the same character.
;;;
;;; The letter 'h' is used for a number of two character mappings,
;;; this means that some character sequence inputs need to be repeated
;;; followed by a backspace followed by the 'h'.
;;; For example: سحر = 's' 's' '<bs>' 'h' 'h' 'r'
;;; In practice such sequences are rare.
;;;
;;
;; ISIRI-9147 Persian keyboard is generally not well suited for Iranian-Expatriates
;; working/living in the West.
;;
;; The qwetry keyboard is usually second nature to Persian speaking expatriates and they
;; don't want to learn/adapt to ISIRI-9147. They expect software to adapt to them.
;;
;; That is what the ``Banan Multi-Character (Reverse) Transliteration Persian Input Method'' does.
;;
;; The typical profile of the user is assumed to be one who:
;;
;; - can write in farsi (not just speak it).
;; - is fully comfortable with a qwerty latin keyboard.
;; - is not familiar with isir-9147 and does not wish to be trained.
;; - communicatates and writes in a mixed globish/persian -- not pure persian.
;; - is intuitively familiar with transliteration of farsi/persian into latin based on two letter
;; phonetic mapping to persian characters (e.g., gh ق -- kh خ -- sh ش -- ch چ -- zh ژ.
;;
;; This transliteration keyboard is designed to be intuitive such that
;; mapping are easy and natural to remember for a persian writer.
;; It is designed to be equivalent in capability to farsi-isiri-9147
;; and provide for inputing all characters enumerated in ISIRI-6219.
;;
;; farsi-transliterate-banan is of course phonetic oriented. But it is very different from
;; pinglish. Pinglish is word oriented where you sound out the word with latin letters --
;; incuding the vowels. farsi-transliterate-banan is letter oriented where you enter the
;; latin letter/letters closest to the persian letter. And usually omit vowels.
;;
;; For some persian characters there are multiple ways of inputing
;; the same character. For example both ``i'' and ``y'' produce ی.
;; For یک ``yk'', ``y'' is more natural and for این ``ain'', ``i'' is more natural.
;;
;; The more frequently used keys are mapped to lower case. The less frequently used letter moves to
;; upper case. For example: ``s'' is س and ``S'' is ص. ``h'' is ح and ``H''
;; is ه.
;;
;; Multi-character input is based on \, &, and / prefix
;; characters. The letter 'h' is used as a postfix for the following two character mappings:
;; gh ق -- kh خ -- sh ش -- ch چ -- zh ژ -- Th ة -- Yh ى.
;;
;;
;; Prefix letter \ is used for two character inputs when an alternate form of a letter
;; is desired for exampe \% is: ‌÷ when % is: ٪.
;;
;; Prefix letter & is used for multi-character inputs when special characters are
;; desired based on their abbreviate name. For example you can enter &lrm; to enter the
;; ``LEFT-TO-RIGHT MARK'' character.
;;
;; Prefix letter / is used to provide two characters. / is: ``ZERO WIDTH NON-JOINER''
;; and // is /.
;;
;; The letter 'h' is used in a number of two character postfix mappings,
;; for example ``sh'' ش. So if you need the sequence of ``s'' and ``h'' you
;; need to repeat the ``s''. For example: سحر = 's' 's' 'h' 'r'.
;;
(quail-define-package
"farsi-translit" "Farsi" "پ" t
"farsi-transliterate-banan" "Farsi" "ب" t
"Intuitive transliteration keyboard layout for persian/farsi.
" nil t t t t nil nil nil nil nil t)
(quail-define-rules
("a" ?ا)
("A" ) ;; alef madde
("b" )
("p" )
;;;;;;;;;;; isiri-6219 Table 5 -- جدول ۵ - حروِفِ اصلیِ فارسی
("W" ) ;; hamzeh
("A" ) ;; U+0622 & ARABIC LETTER ALEF WITH MADDA ABOVE & الف با کلاه
("a" ?ا) ;; U+0627 & ARABIC LETTER ALEF & الف
("\\a" )
("b" ) ;; U+0628 & ARABIC LETTER BEH &
("p" ) ;; U+067e & ARABIC LETTER PEH &
("t" )
("tt" )
("c" )
("cc" )
("j" )
("ch" )
("hh" )
("h" )
("kh" )
("d" )
("Z" )
("r" )
("z" )
("zz" )
("zh" )
("s" )
("ss" )
("sh" )
("S" )
("x" )
("T" )
("TT" )
("X" )
("w" )
("Q" )
("q" )
("f" )
("q" )
("Q" )
("gh" )
("k" )
("K" ) ;; Arabic kaf
("kk" )
("g" )
("gg" )
("l" )
("lh" ?ﻻ)
("m" )
("n" )
("v" )
("V" )
("u" )
("V" )
("H" ?ه)
("h" ?ه)
("th" ) ;; ta marbuteh
("yh" ) ;; he ye
("y" )
("i" )
("y" )
("i" )
("I" )
;;;;;;;;;;; isiri-6219 Table 6 -- جدول ۶ - حروِفِ عربی
("F" )
("D" ?\u0671) ;; (ucs-insert #x0671)ٱ named: حرفِ الفِ وصل
("K" ) ;; Arabic kaf
("Th" ) ;; ta marbuteh
("Y" )
("YY" )
("Yh" )
;;;;;;;;;;; isiri-6219 Table 4 -- جدول ۴ - ارقام و علائم ریاضی
("0" ?۰)
("1" ?۱)
("2" )
("3" )
@ -266,31 +409,106 @@ Based on ISIRI-9149 Layout of Persian Letters and Symbols on Computer Keyboards.
("7" ?۷)
("8" )
("9" )
("0" ?۰)
("F" )
("G" )
("\\/" ?\u066B) ;; (ucs-insert #x066B)٫ named: ممیزِ فارسی
("\\," ?\u066C) ;; (ucs-insert #x066C)٬ named: جداکننده‌ی هزارهای فارسی
("%" ?\u066A) ;; (ucs-insert #x066A)٪ named: درصدِ فارسی
("+" ?\u002B) ;; (ucs-insert #x002B)+ named: علامتِ به‌اضافه
("-" ?\u2212) ;; (ucs-insert #x2212) named: علامتِ منها
("\\*" ?\u00D7) ;; (ucs-insert #x00D7)× named: علامتِ ضرب
("\\%" ?\u007F) ;; (ucs-insert #x00F7)÷ named: علامتِ تقسیم
("<" ?\u003C) ;; (ucs-insert #x003C)< named: علامتِ کوچکتر
("=" ?\u003D) ;; (ucs-insert #x003D)= named: علامتِ مساوی
(">" ?\u003E) ;; (ucs-insert #x003E)> named: علامتِ بزرگتر
("~" ) ;; tashdid ;; تشديد فارسى
("`" )
("e" ) ;; zir زير فارسى -- فتحه
("E" ) ;; eizan ;; دو زير فارسى -- تنوين جر
("#" ) ;; ً tanvin nasb ;; دو زبر فارسى -- تنوين نصب
("@" ) ;; ساکن فارسى
("^" ) ;; zbar ;; زبر فارسى -- فتحه
("o" ) ;; peesh ;; پيش فارسى -- ضمه
("O" ) ;; دو پيش فارسى -- تنوين رفع
("?" ) ;; alamat soal
("&" ) ;; همزه فارسى بالا
("$" ) ;; hamzeh
("%" ) ;;
("*" ?×) ;;
(";" ) ;;
(",h" ) ;; farsi
(",h" ?,) ;; latin
;;;;;;;;;;; isiri-6219 Table 2 -- جدول ۲ - علائم نقطه گذاریِ مشترک
;;; Space
("." ?.) ;;
(":" ?\u003A) ;; (ucs-insert #x003A): named:
("!" ?\u0021) ;; (ucs-insert #x0021)! named:
("\\." ?\u2026) ;; (ucs-insert #x2026)… named:
("\\-" ?\u2010) ;; (ucs-insert #x2010) named:
("-" ?\u002D) ;; (ucs-insert #x002D)- named:
("|" ?|)
;;("\\\\" ?\)
("//" ?/)
("*" ?\u002A) ;; (ucs-insert #x002A)* named:
("(" ?\u0028) ;; (ucs-insert #x0028)( named:
(")" ?\u0029) ;; (ucs-insert #x0029)) named:
("[" ?\u005B) ;; (ucs-insert #x005B)[ named:
("[" ?\u005D) ;; (ucs-insert #x005D)] named:
("{" ?\u007B) ;; (ucs-insert #x007B){ named:
("}" ?\u007D) ;; (ucs-insert #x007D)} named:
("\\<" ?\u00AB) ;; (ucs-insert #x00AB)« named:
("\\>" ?\u00BB) ;; (ucs-insert #x00BB)» named:
;;;;;;;;;;; isiri-6219 Table 3 -- جدول ۳ - علائم نقطه گذاریِ فارسی
("," ) ;; farsi
(";" ) ;;
("?" ) ;; alamat soal
("_" ) ;;
;;;;;;;;;;; isiri-6219 Table 1 -- جدول ۱ - نویسه‌های کنترلی
;; LF
;; CR
("&zwnj;" ?\u200C) ;; (ucs-insert #x200C) named: فاصله‌ی مجازی
("/" ?\u200C) ;;
("&zwj;" ?\u200D) ;; (ucs-insert #x200D) named: اتصالِ مجازی
("J" ?\u200D) ;;
("&lrm;" ?\u200E) ;; (ucs-insert #x200E) named: نشانه‌ی چپ‌به‌راست
("&rlm;" ?\u200F) ;; (ucs-insert #x200F) named: نشانه‌ی راست‌به‌چپ
("&ls;" ?\u2028) ;; (ucs-insert #x2028) named: جداکننده‌ی سطرها
("&ps;" ?\u2028) ;; (ucs-insert #x2029) named: جداکننده‌ی بندها
("&lre;" ?\u202A) ;; (ucs-insert #x202A) named: زیرمتنِ چپ‌به‌راست
("&rle;" ?\u202B) ;; (ucs-insert #x202B) named: زیرمتنِ راست‌به‌چپ
("&pdf;" ?\u202C) ;; (ucs-insert #x202C) named: پایانِ زیرمتن
("&lro;" ?\u202D) ;; (ucs-insert #x202D) named: زیرمتنِ اکیداً چپ‌به‌راست
("&rlo;" ?\u202D) ;; (ucs-insert #x202E) named: زیرمتنِ اکیداً راست‌به‌چپ
("&bom;" ?\uFEFF) ;; (ucs-insert #xFEFF) named: نشانه‌ی ترتیبِ بایت‌ها
;;;;;;;;;;; isiri-6219 Table 7 -- جدول ۷ - نشانه‌هایِ فارسی
("^" ) ;; zbar ;; زبر فارسى
("e" ) ;; zir زير فارسى
("o" ) ;; peesh ;; پيش فارسى -- ضمه
("E" ) ;; eizan ;; دو زير فارسى -- تنوين جر
("#" ) ;; دو زبر
("O" ) ;; دو پيش فارسى -- تنوين رفع
("~" ) ;; tashdid ;; تشديد فارسى
("@" ) ;; ساکن فارسى
("U" ?\u0653) ;; (ucs-insert #x0653)ٓ named: مدِ فارسی
("`" ) ;; همزه فارسى بالا
("C" ?\u0655) ;; (ucs-insert #x0655)ٕ named: همزه فارسى پایین
("$" ?\u0670) ;; (ucs-insert #x0670)ٰ named: الفِ مقصوره‌ی فارسی
;;;;;;;;;;; isiri-6219 Table 8 - Forbiden Characters -- جدول ۸ - نویسه‌هایِ ممنوع
;; ;; he ye (ucs-insert 1728) kills emacs-24.0.90
;; arabic digits 0-9
;;;;;;; Latin Extensions
("\\" ?\\) ;; خط اريب وارو
("\\\\" ?\\)
("\\~" ?~)
("\\@" ?@)
("\\#" ?#)
("\\$" ?\uFDFC) ;; (ucs-insert #xFDFC)﷼ named:
("\\^" ?^)
("\\1" ?1)
("\\2" ?2)
("\\3" ?3)
("\\4" ?4)
("\\5" ?5)
("\\6" ?6)
("\\7" ?7)
("\\8" ?8)
("\\9" ?9)
("\\0" ?0)
)
;;; persian.el ends here