diff options
| author | Mohsen Banan | 2023-05-07 10:11:55 -0700 |
|---|---|---|
| committer | Eli Zaretskii | 2023-05-08 15:27:37 +0300 |
| commit | e6b4784a37fb6bfecfa5ee5d84b60fc79c1fc2db (patch) | |
| tree | 9c8c05ee85d37a8a71ca560d7821685c3e4100bf | |
| parent | c1363a04bb201f8444072903a89a77f8203a9e3a (diff) | |
| download | emacs-e6b4784a37fb6bfecfa5ee5d84b60fc79c1fc2db.tar.gz emacs-e6b4784a37fb6bfecfa5ee5d84b60fc79c1fc2db.zip | |
Improved transliterations + improved bidi insertion support for Farsi
* lisp/leim/quail/persian.el ("farsi-transliterate-banan"):
Improve and add transliterations. (Bug#63361)
| -rw-r--r-- | lisp/leim/quail/persian.el | 124 |
1 files changed, 75 insertions, 49 deletions
diff --git a/lisp/leim/quail/persian.el b/lisp/leim/quail/persian.el index 2915f362ee6..77f1a4cd293 100644 --- a/lisp/leim/quail/persian.el +++ b/lisp/leim/quail/persian.el | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | ;;; persian.el --- Quail package for inputting Persian/Farsi keyboard -*- coding: utf-8; lexical-binding: t -*- | 1 | ;;; persian.el --- Quail package for inputting Persian/Farsi keyboard -*- coding: utf-8; lexical-binding: t -*- |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2011-2023 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2011-2022 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Mohsen BANAN <libre@mohsen.1.banan.byname.net> | 5 | ;; Author: Mohsen BANAN <emacs@mohsen.1.banan.byname.net> |
| 6 | ;; URL: http://mohsen.1.banan.byname.net/contact | 6 | ;; URL: http://mohsen.1.banan.byname.net/contact |
| 7 | 7 | ||
| 8 | ;; Keywords: multilingual, input method, Farsi, Persian, keyboard | 8 | ;; Keywords: multilingual, input method, Farsi, Persian, keyboard |
| @@ -23,7 +23,7 @@ | |||
| 23 | ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. | 23 | ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. |
| 24 | 24 | ||
| 25 | ;;; Commentary: | 25 | ;;; Commentary: |
| 26 | 26 | ;; | |
| 27 | ;; This file contains a collection of input methods for | 27 | ;; This file contains a collection of input methods for |
| 28 | ;; Persian languages (Farsi, Urdu, Pashto/Afghanic, ...) | 28 | ;; Persian languages (Farsi, Urdu, Pashto/Afghanic, ...) |
| 29 | ;; | 29 | ;; |
| @@ -395,6 +395,7 @@ | |||
| 395 | ("u" ?و) | 395 | ("u" ?و) |
| 396 | ("V" ?ؤ) | 396 | ("V" ?ؤ) |
| 397 | ("h" ?ه) | 397 | ("h" ?ه) |
| 398 | ("Hh" ?ه) ;; to take care of هه -- hHh | ||
| 398 | ("y" ?ی) | 399 | ("y" ?ی) |
| 399 | ("i" ?ی) | 400 | ("i" ?ی) |
| 400 | ("I" ?ئ) | 401 | ("I" ?ئ) |
| @@ -402,7 +403,7 @@ | |||
| 402 | 403 | ||
| 403 | ;;;;;;;;;;; isiri-6219 Table 6 -- جدول ۶ - حروِفِ عربی | 404 | ;;;;;;;;;;; isiri-6219 Table 6 -- جدول ۶ - حروِفِ عربی |
| 404 | ("F" ?إ) | 405 | ("F" ?إ) |
| 405 | ("D" ?\u0671) ;; (insert-char #x0671)ٱ named: حرفِ الفِ وصل | 406 | ("D" ?\u0671) ;; (ucs-insert #x0671)ٱ named: حرفِ الفِ وصل |
| 406 | ("K" ?ك) ;; Arabic kaf | 407 | ("K" ?ك) ;; Arabic kaf |
| 407 | ("Th" ?ة) ;; ta marbuteh | 408 | ("Th" ?ة) ;; ta marbuteh |
| 408 | ("Y" ?ي) | 409 | ("Y" ?ي) |
| @@ -421,40 +422,40 @@ | |||
| 421 | ("8" ?۸) | 422 | ("8" ?۸) |
| 422 | ("9" ?۹) | 423 | ("9" ?۹) |
| 423 | 424 | ||
| 424 | ("\\/" ?\u066B) ;; (insert-char #x066B)٫ named: ممیزِ فارسی | 425 | ("\\/" ?\u066B) ;; (ucs-insert #x066B)٫ named: ممیزِ فارسی |
| 425 | ("\\," ?\u066C) ;; (insert-char #x066C)٬ named: جداکنندهی هزارهای فارسی | 426 | ("\\," ?\u066C) ;; (ucs-insert #x066C)٬ named: جداکنندهی هزارهای فارسی |
| 426 | ("%" ?\u066A) ;; (insert-char #x066A)٪ named: درصدِ فارسی | 427 | ("%" ?\u066A) ;; (ucs-insert #x066A)٪ named: درصدِ فارسی |
| 427 | ("+" ?\u002B) ;; (insert-char #x002B)+ named: علامتِ بهاضافه | 428 | ("+" ?\u002B) ;; (ucs-insert #x002B)+ named: علامتِ بهاضافه |
| 428 | ("-" ?\u2212) ;; (insert-char #x2212)− named: علامتِ منها | 429 | ("-" ?\u2212) ;; (ucs-insert #x2212)− named: علامتِ منها |
| 429 | ("\\*" ?\u00D7) ;; (insert-char #x00D7)× named: علامتِ ضرب | 430 | ("\\*" ?\u00D7) ;; (ucs-insert #x00D7)× named: علامتِ ضرب |
| 430 | ("\\-" ?\u00F7) ;; (insert-char #x00F7)÷ named: علامتِ تقسیم | 431 | ("\\-" ?\u00F7) ;; (ucs-insert #x00F7)÷ named: علامتِ تقسیم |
| 431 | ("<" ?\u003C) ;; (insert-char #x003C)< named: علامتِ کوچکتر | 432 | ("<" ?\u003C) ;; (ucs-insert #x003C)< named: علامتِ کوچکتر |
| 432 | ("=" ?\u003D) ;; (insert-char #x003D)= named: علامتِ مساوی | 433 | ("=" ?\u003D) ;; (ucs-insert #x003D)= named: علامتِ مساوی |
| 433 | (">" ?\u003E) ;; (insert-char #x003E)> named: علامتِ بزرگتر | 434 | (">" ?\u003E) ;; (ucs-insert #x003E)> named: علامتِ بزرگتر |
| 434 | 435 | ||
| 435 | 436 | ||
| 436 | ;;;;;;;;;;; isiri-6219 Table 2 -- جدول ۲ - علائم نقطه گذاریِ مشترک | 437 | ;;;;;;;;;;; isiri-6219 Table 2 -- جدول ۲ - علائم نقطه گذاریِ مشترک |
| 437 | ;;; Space | 438 | ;;; Space |
| 438 | ("." ?.) ;; | 439 | ("." ?.) ;; |
| 439 | (":" ?\u003A) ;; (insert-char #x003A): named: | 440 | (":" ?\u003A) ;; (ucs-insert #x003A): named: |
| 440 | ("!" ?\u0021) ;; (insert-char #x0021)! named: | 441 | ("!" ?\u0021) ;; (ucs-insert #x0021)! named: |
| 441 | ("\\." ?\u2026) ;; (insert-char #x2026)… named: | 442 | ("\\." ?\u2026) ;; (ucs-insert #x2026)… named: |
| 442 | ("\\-" ?\u2010) ;; (insert-char #x2010)‐ named: | 443 | ("\\-" ?\u2010) ;; (ucs-insert #x2010)‐ named: |
| 443 | ("-" ?\u002D) ;; (insert-char #x002D)- named: | 444 | ("-" ?\u002D) ;; (ucs-insert #x002D)- named: |
| 444 | ("|" ?|) | 445 | ("|" ?|) |
| 445 | ;;("\\\\" ?\) | 446 | ;;("\\\\" ?\) |
| 446 | ("//" ?/) | 447 | ("//" ?/) |
| 447 | ("*" ?\u002A) ;; (insert-char #x002A)* named: | 448 | ("*" ?\u002A) ;; (ucs-insert #x002A)* named: |
| 448 | ("(" ?\u0028) ;; (insert-char #x0028)( named: | 449 | ("(" ?\u0028) ;; (ucs-insert #x0028)( named: |
| 449 | (")" ?\u0029) ;; (insert-char #x0029)) named: | 450 | (")" ?\u0029) ;; (ucs-insert #x0029)) named: |
| 450 | ("[" ?\u005B) ;; (insert-char #x005B)[ named: | 451 | ("[" ?\u005B) ;; (ucs-insert #x005B)[ named: |
| 451 | ("[" ?\u005D) ;; (insert-char #x005D)] named: | 452 | ("[" ?\u005D) ;; (ucs-insert #x005D)] named: |
| 452 | ("{" ?\u007B) ;; (insert-char #x007B){ named: | 453 | ("{" ?\u007B) ;; (ucs-insert #x007B){ named: |
| 453 | ("}" ?\u007D) ;; (insert-char #x007D)} named: | 454 | ("}" ?\u007D) ;; (ucs-insert #x007D)} named: |
| 454 | ("\\<" ?\u00AB) ;; (insert-char #x00AB)« named: | 455 | ("\\<" ?\u00AB) ;; (ucs-insert #x00AB)« named: |
| 455 | ("\\>" ?\u00BB) ;; (insert-char #x00BB)» named: | 456 | ("\\>" ?\u00BB) ;; (ucs-insert #x00BB)» named: |
| 456 | ("N" ?\u00AB) ;; (insert-char #x00AB)« named: | 457 | ("N" ?\u00AB) ;; (ucs-insert #x00AB)« named: |
| 457 | ("M" ?\u00BB) ;; (insert-char #x00BB)» named: | 458 | ("M" ?\u00BB) ;; (ucs-insert #x00BB)» named: |
| 458 | 459 | ||
| 459 | ;;;;;;;;;;; isiri-6219 Table 3 -- جدول ۳ - علائم نقطه گذاریِ فارسی | 460 | ;;;;;;;;;;; isiri-6219 Table 3 -- جدول ۳ - علائم نقطه گذاریِ فارسی |
| 460 | ("," ?،) ;; farsi | 461 | ("," ?،) ;; farsi |
| @@ -463,24 +464,49 @@ | |||
| 463 | ("_" ?ـ) ;; | 464 | ("_" ?ـ) ;; |
| 464 | 465 | ||
| 465 | 466 | ||
| 466 | ;;;;;;;;;;; isiri-6219 Table 1 -- جدول ۱ - نویسههای کنترلی | 467 | ;;;;;;;;;;; isiri-6219 Table 1 (plus bidi updates) - جدول ۱ - نویسههای کنترلی |
| 467 | ;; LF | 468 | ;; LF |
| 468 | ;; CR | 469 | ;; CR |
| 469 | ("‌" ?\u200C) ;; (insert-char #x200C) named: فاصلهی مجازی | 470 | ("‌" ?\u200C) ;; (ucs-insert #x200C) named: فاصلهی مجازی |
| 470 | ("/" ?\u200C) ;; | 471 | ("/" ?\u200C) ;; |
| 471 | ("‍" ?\u200D) ;; (insert-char #x200D) named: اتصالِ مجازی | 472 | ("‍" ?\u200D) ;; (ucs-insert #x200D) named: اتصالِ مجازی |
| 472 | ("J" ?\u200D) ;; | 473 | ("J" ?\u200D) ;; |
| 473 | ("‎" ?\u200E) ;; (insert-char #x200E) named: نشانهی چپبهراست | 474 | ("&ls;" ?\u2028) ;; (ucs-insert #x2028) named: جداکنندهی سطرها |
| 474 | ("‏" ?\u200F) ;; (insert-char #x200F) named: نشانهی راستبهچپ | 475 | ("&ps;" ?\u2029) ;; (ucs-insert #x2029) named: جداکنندهی بندها |
| 475 | ("&ls;" ?\u2028) ;; (insert-char #x2028) named: جداکنندهی سطرها | 476 | ;; |
| 476 | ("&ps;" ?\u2028) ;; (insert-char #x2029) named: جداکنندهی بندها | 477 | ;; Byte Order Mark (Historic) |
| 477 | ("&lre;" ?\u202A) ;; (insert-char #x202A) named: زیرمتنِ چپبهراست | 478 | ("&bom;" ?\uFEFF) ;; (ucs-insert #xFEFF) named: نشانهی ترتیبِ بایتها |
| 478 | ("&rle;" ?\u202B) ;; (insert-char #x202B) named: زیرمتنِ راستبهچپ | 479 | ;; BIDI Controls |
| 479 | ("&pdf;" ?\u202C) ;; (insert-char #x202C) named: پایانِ زیرمتن | 480 | ;; ------- |
| 480 | ("&lro;" ?\u202D) ;; (insert-char #x202D) named: زیرمتنِ اکیداً چپبهراست | 481 | ;; LEFT-TO-RIGHT MARK (strongly typed LTR character) |
| 481 | ("&rlo;" ?\u202D) ;; (insert-char #x202E) named: زیرمتنِ اکیداً راستبهچپ | 482 | ("‎" ?\u200E) ;; (ucs-insert #x200E) named: نشانهی چپبهراست |
| 482 | ("&bom;" ?\uFEFF) ;; (insert-char #xFEFF) named: نشانهی ترتیبِ بایتها | 483 | ("L" ?\u200E) |
| 483 | 484 | ;; RIGHT-TO-LEFT MARK (strongly typed RTL character) | |
| 485 | ("‏" ?\u200F) ;; (ucs-insert #x200F) named: نشانهی راستبهچپ | ||
| 486 | ("R" ?\u200F) | ||
| 487 | ;; LEFT-TO-RIGHT ISOLATE (sets base direction to LTR & isolates the embedded) | ||
| 488 | ("&lri;" ?\u2066) ;; (ucs-insert #x2066) | ||
| 489 | ;; RIGHT-TO-LEFT ISOLATE (sets base direction to RTL & isolates the embedded) | ||
| 490 | ("&rli;" ?\u2067) ;; (ucs-insert #x2067) | ||
| 491 | ;; FIRST-STRONG ISOLATE (isolates content & sets dir to first strongly typed) | ||
| 492 | ("&fsi;" ?\u2068) ;; (ucs-insert #x2068) | ||
| 493 | ;; POP DIRECTIONAL ISOLATE (used for RLI, LRI or FSI) | ||
| 494 | ;; EMACS BUG | ||
| 495 | ;; If ("&pdi;" ?\u2069) is included Emacs fully hangs with a (describe-input-method 'farsi-transliterate-banan) | ||
| 496 | ;;("&pdi;" ?\u2069) ;; (ucs-insert #x2069) | ||
| 497 | ;; LEFT-TO-RIGHT EMBEDDING (sets base dir to LTR but allows embedded text) | ||
| 498 | ("&lre;" ?\u202A) ;; (ucs-insert #x202A) named: زیرمتنِ چپبهراست | ||
| 499 | ("B" ?\u202A) | ||
| 500 | ;; RIGHT-TO-LEFT EMBEDDING (sets base dir to RTL but allows embedded text) | ||
| 501 | ("&rle;" ?\u202B) ;; (ucs-insert #x202B) named: زیرمتنِ راستبهچپ | ||
| 502 | ;; POP DIRECTIONAL FORMATTING (used for RLE or LRE and RLO or LRO) | ||
| 503 | ;; EMACS ANOMOLY --- Why does &pdf not show up in (describe-input-method 'farsi-transliterate-banan) | ||
| 504 | ("&pdf;" ?\u202C) ;; (ucs-insert #x202C) named: پایانِ زیرمتن | ||
| 505 | ("P" ?\u202C) | ||
| 506 | ;; LEFT-TO-RIGHT OVERRIDE (overrides the bidirectional algorithm, display LTR) | ||
| 507 | ("&lro;" ?\u202D) ;; (ucs-insert #x202D) named: زیرمتنِ اکیداً چپبهراست | ||
| 508 | ;; RIGHT-TO-LEFT OVERRIDE (overrides the bidirectional algorithm, display RTL) | ||
| 509 | ("&rlo;" ?\u202E) ;; (ucs-insert #x202E) named: زیرمتنِ اکیداً راستبهچپ | ||
| 484 | 510 | ||
| 485 | ;;;;;;;;;;; isiri-6219 Table 7 -- جدول ۷ - نشانههایِ فارسی | 511 | ;;;;;;;;;;; isiri-6219 Table 7 -- جدول ۷ - نشانههایِ فارسی |
| 486 | ("^" ?َ) ;; zbar ;; زبر فارسى | 512 | ("^" ?َ) ;; zbar ;; زبر فارسى |
| @@ -491,14 +517,14 @@ | |||
| 491 | ("O" ?ٌ) ;; دو پيش فارسى -- تنوين رفع | 517 | ("O" ?ٌ) ;; دو پيش فارسى -- تنوين رفع |
| 492 | ("~" ?ّ) ;; tashdid ;; تشديد فارسى | 518 | ("~" ?ّ) ;; tashdid ;; تشديد فارسى |
| 493 | ("@" ?ْ) ;; ساکن فارسى | 519 | ("@" ?ْ) ;; ساکن فارسى |
| 494 | ("U" ?\u0653) ;; (insert-char #x0653)ٓ named: مدِ فارسی | 520 | ("U" ?\u0653) ;; (ucs-insert #x0653)ٓ named: مدِ فارسی |
| 495 | ("`" ?ٔ) ;; همزه فارسى بالا | 521 | ("`" ?ٔ) ;; همزه فارسى بالا |
| 496 | ("C" ?\u0655) ;; (insert-char #x0655)ٕ named: همزه فارسى پایین | 522 | ("C" ?\u0655) ;; (ucs-insert #x0655)ٕ named: همزه فارسى پایین |
| 497 | ("$" ?\u0670) ;; (insert-char #x0670)ٰ named: الفِ مقصورهی فارسی | 523 | ("$" ?\u0670) ;; (ucs-insert #x0670)ٰ named: الفِ مقصورهی فارسی |
| 498 | 524 | ||
| 499 | 525 | ||
| 500 | ;;;;;;;;;;; isiri-6219 Table 8 - Forbidden Characters -- جدول ۸ - نویسههایِ ممنوع | 526 | ;;;;;;;;;;; isiri-6219 Table 8 - Forbidden Characters -- جدول ۸ - نویسههایِ ممنوع |
| 501 | ;; ;; he ye (insert-char 1728) (insert-char #x06c0) kills emacs-24.0.90 | 527 | ;; ;; he ye (ucs-insert 1728) (ucs-insert #x06c0) kills emacs-24.0.90 |
| 502 | ;; arabic digits 0-9 | 528 | ;; arabic digits 0-9 |
| 503 | 529 | ||
| 504 | 530 | ||
| @@ -508,7 +534,7 @@ | |||
| 508 | ("\\~" ?~) | 534 | ("\\~" ?~) |
| 509 | ("\\@" ?@) | 535 | ("\\@" ?@) |
| 510 | ("\\#" ?#) | 536 | ("\\#" ?#) |
| 511 | ("\\$" ?\uFDFC) ;; (insert-char #xFDFC)﷼ named: | 537 | ("\\$" ?\uFDFC) ;; (ucs-insert #xFDFC)﷼ named: |
| 512 | ("\\^" ?^) | 538 | ("\\^" ?^) |
| 513 | ("\\1" ?1) | 539 | ("\\1" ?1) |
| 514 | ("\\2" ?2) | 540 | ("\\2" ?2) |