Commit 4f96ea3f authored by Mohsen BANAN's avatar Mohsen BANAN Committed by Eli Zaretskii
Browse files

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.
parent 3f018d6d
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
......
......@@ -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
;;
;; The specification is also republished at
;; http://www.farsiweb.ir/wiki/Image:Isiri-9147.pdf
;; and various other sites.
;;
;; ISIRI-6219 is also relevant.
;;
;; 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.
;;
;; Only layers 1 and 2 of ISIRI-9147 are applicable to emacs.
;; Layer 3 is then entered with the Backslash key and Layer 3 is
;; implemented as two letter keys as specified in ISIRI-9147.
;;
;; This input method was built using the Farsi table in X Keyboard Configuration Data Base.
;; 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.
;;
;; 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
;; 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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment