Now on revision 105316. ------------------------------------------------------------ revno: 105316 committer: Michael Albinus branch nick: trunk timestamp: Sun 2011-07-24 11:56:26 +0200 message: * net/tramp-sh.el (tramp-barf-unless-okay): Return the value of `tramp-send-command-and-check' if there is no error. (tramp-send-command-and-read): Suppress *all* errors if NOERROR. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2011-07-22 12:53:46 +0000 +++ lisp/ChangeLog 2011-07-24 09:56:26 +0000 @@ -1,3 +1,9 @@ +2011-07-24 Michael Albinus + + * net/tramp-sh.el (tramp-barf-unless-okay): Return the value of + `tramp-send-command-and-check' if there is no error. + (tramp-send-command-and-read): Suppress *all* errors if NOERROR. + 2011-07-22 Alan Mackenzie Prevent cc-langs.elc being loaded at run time. === modified file 'lisp/net/tramp-sh.el' --- lisp/net/tramp-sh.el 2011-07-08 14:25:25 +0000 +++ lisp/net/tramp-sh.el 2011-07-24 09:56:26 +0000 @@ -4505,27 +4505,30 @@ "Run COMMAND, check exit status, throw error if exit status not okay. Similar to `tramp-send-command-and-check' but accepts two more arguments FMT and ARGS which are passed to `error'." - (unless (tramp-send-command-and-check vec command) - (apply 'tramp-error vec 'file-error fmt args))) + (or (tramp-send-command-and-check vec command) + (apply 'tramp-error vec 'file-error fmt args))) (defun tramp-send-command-and-read (vec command &optional noerror) "Run COMMAND and return the output, which must be a Lisp expression. In case there is no valid Lisp expression and NOERROR is nil, it raises an error." - (tramp-barf-unless-okay vec command "`%s' returns with error" command) - (with-current-buffer (tramp-get-connection-buffer vec) - ;; Read the expression. - (goto-char (point-min)) - (condition-case nil - (prog1 (read (current-buffer)) - ;; Error handling. - (when (re-search-forward "\\S-" (point-at-eol) t) - (error nil))) - (error (unless noerror - (tramp-error - vec 'file-error - "`%s' does not return a valid Lisp expression: `%s'" - command (buffer-string))))))) + (when (if noerror + (tramp-send-command-and-check vec command) + (tramp-barf-unless-okay + vec command "`%s' returns with error" command)) + (with-current-buffer (tramp-get-connection-buffer vec) + ;; Read the expression. + (goto-char (point-min)) + (condition-case nil + (prog1 (read (current-buffer)) + ;; Error handling. + (when (re-search-forward "\\S-" (point-at-eol) t) + (error nil))) + (error (unless noerror + (tramp-error + vec 'file-error + "`%s' does not return a valid Lisp expression: `%s'" + command (buffer-string)))))))) (defun tramp-convert-file-attributes (vec attr) "Convert file-attributes ATTR generated by perl script, stat or ls. ------------------------------------------------------------ revno: 105315 committer: Eli Zaretskii branch nick: trunk timestamp: Sun 2011-07-24 01:30:09 -0400 message: Fix crash at startup under XASSERTS. src/xfaces.c (check_lface_attrs) [HAVE_WINDOW_SYSTEM]: Allow `nil' for attrs[LFACE_FONTSET_INDEX]. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2011-07-23 18:31:25 +0000 +++ src/ChangeLog 2011-07-24 05:30:09 +0000 @@ -1,3 +1,8 @@ +2011-07-24 Eli Zaretskii + + * xfaces.c (check_lface_attrs) [HAVE_WINDOW_SYSTEM]: Allow `nil' + for attrs[LFACE_FONTSET_INDEX]. + 2011-07-23 Paul Eggert * xml.c (parse_region): Remove unused local === modified file 'src/xfaces.c' --- src/xfaces.c 2011-07-10 08:20:10 +0000 +++ src/xfaces.c 2011-07-24 05:30:09 +0000 @@ -1918,7 +1918,8 @@ || IGNORE_DEFFACE_P (attrs[LFACE_FONT_INDEX]) || FONTP (attrs[LFACE_FONT_INDEX])); xassert (UNSPECIFIEDP (attrs[LFACE_FONTSET_INDEX]) - || STRINGP (attrs[LFACE_FONTSET_INDEX])); + || STRINGP (attrs[LFACE_FONTSET_INDEX]) + || NILP (attrs[LFACE_FONTSET_INDEX])); #endif } ------------------------------------------------------------ revno: 105314 author: Andrew Cohen committer: Katsumi Yamaoka branch nick: trunk timestamp: Sun 2011-07-24 00:19:29 +0000 message: Merge changes made in Gnus trunk. nnir.el (nnir-search-thread): New function to make an nnir group based on a thread query. gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use of nnir in thread referral. (gnus-summary-refer-thread): Use it. nnimap.el (nnimap-request-thread): Use it. diff: === modified file 'lisp/gnus/ChangeLog' --- lisp/gnus/ChangeLog 2011-07-20 22:48:00 +0000 +++ lisp/gnus/ChangeLog 2011-07-24 00:19:29 +0000 @@ -1,3 +1,14 @@ +2011-07-23 Andrew Cohen + + * nnir.el (nnir-search-thread): New function to make an nnir group + based on a thread query. + + * gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use + of nnir in thread referral. + (gnus-summary-refer-thread): Use it. + + * nnimap.el (nnimap-request-thread): Use it. + 2011-07-20 Lars Magne Ingebrigtsen * shr.el (shr-tag-comment): Ignore HTML comments. === modified file 'lisp/gnus/gnus-sum.el' --- lisp/gnus/gnus-sum.el 2011-07-20 14:19:52 +0000 +++ lisp/gnus/gnus-sum.el 2011-07-24 00:19:29 +0000 @@ -118,6 +118,13 @@ :type '(choice number (sexp :menu-tag "other" t))) +(defcustom gnus-refer-thread-use-nnir nil + "*Use nnir to search an entire server when referring threads. A +nil value will only search for thread-related articles in the +current group." + :group 'gnus-thread + :type 'boolean) + (defcustom gnus-summary-make-false-root 'adopt "*nil means that Gnus won't gather loose threads. If the root of a thread has expired or been read in a previous @@ -8972,11 +8979,16 @@ result)) (defun gnus-summary-refer-thread (&optional limit) - "Fetch all articles in the current thread. -If no backend-specific 'request-thread function is available -fetch LIMIT (the numerical prefix) old headers. If LIMIT is nil -fetch what's specified by the `gnus-refer-thread-limit' -variable." + "Fetch all articles in the current thread. For backends that +know how to search for threads (currently only 'nnimap) a +non-numeric prefix arg will use nnir to search the entire +server; without a prefix arg only the current group is +searched. If the variable `gnus-refer-thread-use-nnir' is +non-nil the prefix arg has the reverse meaning. If no +backend-specific 'request-thread function is available fetch +LIMIT (the numerical prefix) old headers. If LIMIT is +non-numeric or nil fetch the number specified by the +`gnus-refer-thread-limit' variable." (interactive "P") (gnus-warp-to-article) (let* ((header (gnus-summary-article-header)) @@ -8984,13 +8996,16 @@ (gnus-inhibit-demon t) (gnus-summary-ignore-duplicates t) (gnus-read-all-available-headers t) - (limit (if limit (prefix-numeric-value limit) - gnus-refer-thread-limit)) + (gnus-refer-thread-use-nnir + (if (and (not (null limit)) (listp limit)) + (not gnus-refer-thread-use-nnir) gnus-refer-thread-use-nnir)) (new-headers (if (gnus-check-backend-function 'request-thread gnus-newsgroup-name) (gnus-request-thread header gnus-newsgroup-name) - (let* ((last (if (numberp limit) + (let* ((limit (if (numberp limit) (prefix-numeric-value limit) + gnus-refer-thread-limit)) + (last (if (numberp limit) (min (+ (mail-header-number header) limit) gnus-newsgroup-highest) @@ -9005,17 +9020,19 @@ (regexp-opt (append refs (list id subject))))))) (gnus-fetch-headers (list last) (if (numberp limit) (* 2 limit) limit) t))))) - (dolist (header new-headers) - (when (member (mail-header-number header) gnus-newsgroup-unselected) - (push (mail-header-number header) gnus-newsgroup-unreads) - (setq gnus-newsgroup-unselected - (delete (mail-header-number header) gnus-newsgroup-unselected)))) - (setq gnus-newsgroup-headers - (gnus-delete-duplicate-headers - (gnus-merge - 'list gnus-newsgroup-headers new-headers - 'gnus-article-sort-by-number))) - (gnus-summary-limit-include-thread id))) + (when (listp new-headers) + (dolist (header new-headers) + (when (member (mail-header-number header) gnus-newsgroup-unselected) + (push (mail-header-number header) gnus-newsgroup-unreads) + (setq gnus-newsgroup-unselected + (delete (mail-header-number header) + gnus-newsgroup-unselected)))) + (setq gnus-newsgroup-headers + (gnus-delete-duplicate-headers + (gnus-merge + 'list gnus-newsgroup-headers new-headers + 'gnus-article-sort-by-number))) + (gnus-summary-limit-include-thread id)))) (defun gnus-summary-refer-article (message-id) "Fetch an article specified by MESSAGE-ID." === modified file 'lisp/gnus/nnimap.el' --- lisp/gnus/nnimap.el 2011-07-20 14:19:52 +0000 +++ lisp/gnus/nnimap.el 2011-07-24 00:19:29 +0000 @@ -1566,15 +1566,17 @@ (articles &optional limit force-new dependencies)) (deffoo nnimap-request-thread (header &optional group server) - (when (nnimap-possibly-change-group group server) - (let* ((cmd (nnimap-make-thread-query header)) - (result (with-current-buffer (nnimap-buffer) - (nnimap-command "UID SEARCH %s" cmd)))) - (when result - (gnus-fetch-headers - (and (car result) (delete 0 (mapcar #'string-to-number - (cdr (assoc "SEARCH" (cdr result)))))) - nil t))))) + (if gnus-refer-thread-use-nnir + (nnir-search-thread header) + (when (nnimap-possibly-change-group group server) + (let* ((cmd (nnimap-make-thread-query header)) + (result (with-current-buffer (nnimap-buffer) + (nnimap-command "UID SEARCH %s" cmd)))) + (when result + (gnus-fetch-headers + (and (car result) (delete 0 (mapcar #'string-to-number + (cdr (assoc "SEARCH" (cdr result)))))) + nil t)))))) (defun nnimap-possibly-change-group (group server) (let ((open-result t)) === modified file 'lisp/gnus/nnir.el' --- lisp/gnus/nnir.el 2011-07-20 15:24:16 +0000 +++ lisp/gnus/nnir.el 2011-07-24 00:19:29 +0000 @@ -289,6 +289,7 @@ (autoload 'nnimap-buffer "nnimap") (autoload 'nnimap-command "nnimap") (autoload 'nnimap-possibly-change-group "nnimap") + (autoload 'nnimap-make-thread-query "nnimap") (autoload 'gnus-registry-action "gnus-registry") (defvar gnus-registry-install)) @@ -1649,6 +1650,16 @@ (nnir-open-server server))) +(defun nnir-search-thread (header) + "Make an nnir group based on the thread containing the article header" + (let ((parm (list + (cons 'query + (nnimap-make-thread-query header)) + (cons 'criteria "") + (cons 'server (gnus-method-to-server + (gnus-find-method-for-group + gnus-newsgroup-name)))))) + (gnus-group-make-nnir-group nil parm))) ;; unused? (defun nnir-artlist-groups (artlist) ------------------------------------------------------------ revno: 105313 committer: Paul Eggert branch nick: trunk timestamp: Sat 2011-07-23 11:31:25 -0700 message: * xml.c (parse_region): Remove unused local that was recently introduced. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2011-07-23 12:15:53 +0000 +++ src/ChangeLog 2011-07-23 18:31:25 +0000 @@ -1,3 +1,8 @@ +2011-07-23 Paul Eggert + + * xml.c (parse_region): Remove unused local + that was recently introduced. + 2011-07-23 Eli Zaretskii * xfns.c (unwind_create_frame) [GLYPH_DEBUG]: Adapt to changes in === modified file 'src/xml.c' --- src/xml.c 2011-07-20 20:45:13 +0000 +++ src/xml.c 2011-07-23 18:31:25 +0000 @@ -87,7 +87,6 @@ parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, int htmlp) { xmlDoc *doc; - xmlNode *node; Lisp_Object result = Qnil; const char *burl = ""; EMACS_INT bytes; ------------------------------------------------------------ revno: 105312 author: Yair F committer: Eli Zaretskii branch nick: trunk timestamp: Sat 2011-07-23 20:29:42 +0300 message: Improve and expand the Hebrew input methods. leim/quail/hebrew.el ("hebrew"): Additional key mappings. ("hebrew-new", "hebrew-lyx", "hebrew-full") ("hebrew-biblical-tiro", "hebrew-biblical-sil", "yiddish-royal") ("yiddish-keyman"): New input methods. diff: === modified file 'leim/ChangeLog' --- leim/ChangeLog 2011-06-12 10:37:40 +0000 +++ leim/ChangeLog 2011-07-23 17:29:42 +0000 @@ -1,3 +1,10 @@ +2011-07-23 Yair F + + * quail/hebrew.el ("hebrew"): Additional key mappings. + ("hebrew-new", "hebrew-lyx", "hebrew-full") + ("hebrew-biblical-tiro", "hebrew-biblical-sil", "yiddish-royal") + ("yiddish-keyman"): New input methods. + 2011-06-12 Andreas Schwab * SKK-DIC/SKK-JISYO.L: Add proper coding tag. === modified file 'leim/quail/hebrew.el' --- leim/quail/hebrew.el 2011-01-15 23:16:57 +0000 +++ leim/quail/hebrew.el 2011-07-23 17:29:42 +0000 @@ -1,11 +1,14 @@ -;;; hebrew.el --- Quail package for inputting Hebrew characters -*-coding: iso-2022-7bit;-*- +;; hebrew.el --- Quail package for inputting Hebrew characters -*-coding: iso-2022-7bit;-*- ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, ;; 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H14PRO021 -;; Keywords: mule, input method, Hebrew +;; Many input methods in this file provided +;; by Yair Friedman + +;; Keywords: multilingual, input method, Hebrew ;; This file is part of GNU Emacs. @@ -29,50 +32,851 @@ (require 'quail) (quail-define-package - "hebrew" "Hebrew" ",Hr(B" nil "Hebrew (ISO 8859-8) input method. + "hebrew" "Hebrew" ",Hr(B" nil "Hebrew SI-1452 input method. -Based on Hebrew typewriter keys. -Hebrew letters are assigned to lowercases. +Based on SI-1452 keyboard layout. +Only Hebrew-related characters are considered. + 'q' is used to switch levels instead of Alt-Gr. + Maqaaf ($,1,^(B) is mapped to '/,Ht(B'. " nil t t t t nil nil nil nil nil t) -;; 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) -_ =+ ;~ -;; /Q 'W ,Hw(BE ,Hx(BR ,H`(BT ,Hh(BY ,He(BU ,Ho(BI ,Hm(BO ,Ht(BP [{ ]} -;; ,Hy(BA ,Hc(BS ,Hb(BD ,Hk(BF ,Hr(BG ,Hi(BH ,Hg(BJ ,Hl(BK ,Hj(BL ,Hs(B: ," \| -;; ,Hf(BZ ,Hq(BX ,Ha(BC ,Hd(BV ,Hp(BB ,Hn(BN ,Hv(BM ,Hz(B< ,Hu(B> .? -;; - (quail-define-rules ("`" ?\;) + ("w" ?\') + ("e" ?,Hw(B) ; Qof + ("r" ?,Hx(B) ; Resh + ("t" ?,H`(B) ; Alef + ("y" ?,Hh(B) ; Tet + ("u" ?,He(B) ; Vav + ("i" ?,Ho(B) ; Final Nun + ("o" ?,Hm(B) ; Final Mem + ("p" ?,Ht(B) ; Pe + ("[" ?\]) ; mirroring + ("]" ?\[) ; mirroring + ("a" ?,Hy(B) ; Shin + ("s" ?,Hc(B) ; Dalet + ("d" ?,Hb(B) ; Gimel + ("f" ?,Hk(B) ; Kaf + ("g" ?,Hr(B) ; Ayin + ("h" ?,Hi(B) ; Yod + ("j" ?,Hg(B) ; Het + ("k" ?,Hl(B) ; Lamed + ("l" ?,Hj(B) ; Final Kaf + (";" ?,Hs(B) ; Final Pe + ("'" ?,) + ("z" ?,Hf(B) ; Zayin + ("x" ?,Hq(B) ; Samekh + ("c" ?,Ha(B) ; Bet + ("v" ?,Hd(B) ; He + ("b" ?,Hp(B) ; Nun + ("n" ?,Hn(B) ; Mem + ("m" ?,Hv(B) ; Tsadi + ("," ?,Hz(B) ; Tav + ("." ?,Hu(B) ; Final Tsadi + ("/" ?.) ; Stop + ("(" ?\)) ; mirroring + (")" ?\() ; mirroring + ("{" ?}) ; mirroring + ("}" ?{) ; mirroring + ("<" ?>) ; mirroring + (">" ?<) ; mirroring + ("q`" ?$,1,P(B) ; Sheva + ("q1" ?$,1,Q(B) ; Hataf Segol + ("q2" ?$,1,R(B) ; Hataf Patah + ("q3" ?$,1,S(B) ; Hataf Qamats + ("q4" ?$,1,T(B) ; Hiriq + ("q5" ?$,1,U(B) ; Tsere + ("q6" ?$,1,V(B) ; Segol (Point) + ("q7" ?$,1,W(B) ; Patah + ("q8" ?$,1,X(B) ; Qamats + ("q9" ?$,1,b(B) ; Sin dot + ("q0" ?$,1,a(B) ; Shin dot + ("q-" ?$,1,Y(B) ; Holam + ("q=" ?$,1,\(B) ; Dagesh or Mapiq + ("q\\" ?$,1,[(B) ; Qubuts + ("qq" ?/) + ("qw" ?$,1-3(B) ; Geresh (Punct.) + ("qi" ?$,1-0(B) ; Yiddish Double Vav + ("qp" ?$,1,^(B) ; Maqaf + ("q[" ?$,1,_(B) ; Rafe + ("q]" ?$,1,](B) ; Meteg + ("qa" ?$,1tJ(B) ; New Sheqel sign + ("qh" ?$,1-2(B) ; Yiddish Double Yod + ("qj" ?$,1-1(B) ; Yiddish Vav Yod + ("q\"" ?$,1-4(B) ; Gershayim (Punct.) + ("q," ?\u200E) ; LRM + ("q." ?\u200F) ; RLM +) + +(quail-define-package + "hebrew-new" "Hebrew" ",Hr(B" nil "Hebrew SI-1452 new draft input method. + +Based on latest draft of SI-1452 keyboard layout. +Only Hebrew-related characters are considered. + '`' is used to switch levels instead of Alt-Gr. +Geresh is mapped to '`k'. +" nil t t t t nil nil nil nil nil t) + +(quail-define-rules ("q" ?/) + ("w" ?\') + ("e" ?,Hw(B) ; Qof + ("r" ?,Hx(B) ; Resh + ("t" ?,H`(B) ; Alef + ("y" ?,Hh(B) ; Tet + ("u" ?,He(B) ; Vav + ("i" ?,Ho(B) ; Final Nun + ("o" ?,Hm(B) ; Final Mem + ("p" ?,Ht(B) ; Pe + ("[" ?\]) ; mirroring + ("]" ?\[) ; mirroring + ("a" ?,Hy(B) ; Shin + ("s" ?,Hc(B) ; Dalet + ("d" ?,Hb(B) ; Gimel + ("f" ?,Hk(B) ; Kaf + ("g" ?,Hr(B) ; Ayin + ("h" ?,Hi(B) ; Yod + ("j" ?,Hg(B) ; Het + ("k" ?,Hl(B) ; Lamed + ("l" ?,Hj(B) ; Final Kaf + (";" ?,Hs(B) ; Final Pe + ("'" ?,) + ("z" ?,Hf(B) ; Zayin + ("x" ?,Hq(B) ; Samekh + ("c" ?,Ha(B) ; Bet + ("v" ?,Hd(B) ; He + ("b" ?,Hp(B) ; Nun + ("n" ?,Hn(B) ; Mem + ("m" ?,Hv(B) ; Tsadi + ("," ?,Hz(B) ; Tav + ("." ?,Hu(B) ; Final Tsadi + ("/" ?.) ; Stop + ("(" ?\)) ; mirroring + (")" ?\() ; mirroring + ("{" ?}) ; mirroring + ("}" ?{) ; mirroring + ("<" ?>) ; mirroring + (">" ?<) ; mirroring + + ("``" ?\;) + ("`1" ?$,1,](B) ; Meteg +;("`2" ??) ; Unassigned + ("`3" ?,F$(B) ; Euro Sign + ("`4" ?$,1tJ(B) ; New Sheqel sign + ("`5" ?,A0(B) ; Degree Sign + ("`6" ?$,1,K(B) ; Ole +;("`7" ??) ; Unassigned + ("`8" ?,AW(B) ; Multiplication Sign + ("`9" ?\u200E) ; LRM + ("`0" ?\u200F) ; RLM + ("`-" ?$,1,^(B) ; Maqaf + ("`=" ?$(G!9(B) ; En Dash + ("`q" ?$,1,b(B) ; Sin dot + ("`w" ?$,1,a(B) ; Shin dot + ("`e" ?$,1,X(B) ; Qamats + ("`r" ?$,1,S(B) ; Hataf Qamats +;("`t" ??) ; Unassigned + ("`y" ?$,1-0(B) ; Yiddish Double Vav + ("`u" ?$,1,Y(B) ; Holam +;("`i" ??) ; Unassigned +;("`o" ??) ; Unassigned + ("`p" ?$,1,W(B) ; Patah + ("`[" ?$,1,R(B) ; Hataf Patah + ("`]" ?$,1,_(B) ; Rafe + ("`\\" ?$,1,[(B) ; Qubuts + ("`a" ?$,1,P(B) ; Sheva + ("`s" ?$,1,\(B) ; Dagesh or Mapiq +;("`d" ??) ; Unassigned +;("`f" ??) ; Unassigned + ("`g" ?$,1-1(B) ; Yiddish Vav Yod + ("`h" ?$,1-2(B) ; Yiddish Double Yod + ("`j" ?$,1,T(B) ; Hiriq + ("`k" ?$,1-3(B) ; Geresh (Punct.) + ("`l" ?,Y4(B) ; Left Double Quotation Mark + ("`;" ?,Y!(B) ; Right Double Quotation Mark + ("`'" ?$,1-4(B) ; Gershayim (Punct.) +;("`z" ??) ; Unassigned + ("`x" ?$,1,V(B) ; Segol (Point) + ("`c" ?$,1,Q(B) ; Hataf Segol +;("`v" ??) ; Unassigned +;("`b" ??) ; Unassigned +;("`n" ??) ; Unassigned + ("`m" ?$,1,U(B) ; Tsere +;("`," ??) ; Unassigned +;("`." ??) ; Unassigned + ("`/" ?,Aw(B) ; Division Sign + + ("``" ?$,1,c(B) ; Sof Pasuq + ("`!" ?$,1,1(B) ; Etnahta + ("`@" ?$,1,2(B) ; Segol (Accent) + ("`#" ?$,1,3(B) ; Shalshelet + ("`$" ?$,1,4(B) ; Zaqef Qatan + ("`%" ?$,1,5(B) ; Zaqef Gadol + ("`^" ?$,1,6(B) ; Tipeha + ("`&" ?$,1,7(B) ; Revia + ("`*" ?$,1,8(B) ; Zarqa + ("`(" ?$,1,9(B) ; Pashta + ("`)" ?$,1,:(B) ; Yetiv + ("`_" ?$,1,;(B) ; Tevir + ("`+" ?$,1,<(B) ; Geresh (Accent) + ("`Q" ?$,1,=(B) ; Geresh Muqdam + ("`W" ?$,1,>(B) ; Gershayim (Accent) + ("`E" ?$,1,g(B) ; Qamats Qatan + ("`R" ?$,1,?(B) ; Qarney Para + ("`T" ?$,1,@(B) ; Telisha Gedola + ("`Y" ?$,1,A(B) ; Pazer + ("`U" ?$,1,Z(B) ; Holam Haser for Vav + ("`I" ?$,1,B(B) ; Atnah Hafukh + ("`O" ?$,1,C(B) ; Munah +;("`P" ??) ; Reserved + ("`{" ?$,1,D(B) ; Mahapakh + ("`}" ?$,1,E(B) ; Merkha + ("`|" ?$,1,F(B) ; Merkha Kefula +;("`A" ??) ; Reserved +;("`S" ??) ; Reserved + ("`D" ?$,1,G(B) ; Darga + ("`F" ?$,1,H(B) ; Qadma + ("`G" ?$,1,I(B) ; Telisha Qetana + ("`H" ?$,1,J(B) ; Yerah Ben Yomo + ("`J" ?\u200D) ; ZWJ + ("`K" ?$,1,L(B) ; Iluy + ("`L" ?,Y4(B) ; Left Double Quotation Mark (2nd) + ("`:" ?,Y%(B) ; Double Low-9 Quotation Mark + ("`\"" ?$,1,M(B) ; Dehi + ("`Z" ?$,1,N(B) ; Zinor + ("`X" ?$,1,O(B) ; Masora Circle + ("`C" ?\u034F) ; CGJ + ("`V" ?$,1,`(B) ; Paseq + ("`B" ?$,1,f(B) ; Nun Hafukha + ("`N" ?\u200C) ; ZWNJ +;("`M" ??) ; Unassigned +;("`<" ??) ; Unassigned + ("`>" ?$,1,e(B) ; Lower Dot + ("`?" ?$,1,d(B) ; Upper Dot +) + +(quail-define-package + "hebrew-lyx" "Hebrew" ",Hl$,1,T(B" nil "Hebrew LyX input method. + +Based on LyX keyboard layout. +Additional mappings for Rafe and Yiddish ligatures. +" nil t t t t nil nil nil nil nil t) + +(quail-define-rules + ("`" ?\;) + ("_" ?$,1,^(B) ; Maqaf + ("q`" ?$,1,P(B) ; Sheva + ("w" ?\') + ("e" ?,Hw(B) ; Qof + ("r" ?,Hx(B) ; Resh + ("t" ?,H`(B) ; Alef + ("y" ?,Hh(B) ; Tet + ("u" ?,He(B) ; Vav + ("i" ?,Ho(B) ; Final Nun + ("o" ?,Hm(B) ; Final Mem + ("p" ?,Ht(B) ; Pe + ("[" ?\]) ; mirroring + ("]" ?\[) ; mirroring + ("a" ?,Hy(B) ; Shin + ("s" ?,Hc(B) ; Dalet + ("d" ?,Hb(B) ; Gimel + ("f" ?,Hk(B) ; Kaf + ("g" ?,Hr(B) ; Ayin + ("h" ?,Hi(B) ; Yod + ("j" ?,Hg(B) ; Het + ("k" ?,Hl(B) ; Lamed + ("l" ?,Hj(B) ; Final Kaf + (";" ?,Hs(B) ; Final Pe + ("'" ?,) + ("z" ?,Hf(B) ; Zayin + ("x" ?,Hq(B) ; Samekh + ("c" ?,Ha(B) ; Bet + ("v" ?,Hd(B) ; He + ("b" ?,Hp(B) ; Nun + ("n" ?,Hn(B) ; Mem + ("m" ?,Hv(B) ; Tsadi + ("," ?,Hz(B) ; Tav + ("." ?,Hu(B) ; Final Tsadi + ("/" ?.) ; Stop + ("(" ?\)) ; mirroring + (")" ?\() ; mirroring + ("W" ?$,1-3(B) ; Geresh (Punct.) + ("E" ?$,1,X(B) ; Qamats + ("R" ?$,1,_(B) ; Rafe + ("T" ?\u200E) ; LRM + ("Y" ?\u200F) ; RLM + ("U" ?$,1,Y(B) ; Holam + ("I" ?$,1-2(B) ; Yiddish Double Yod + ("O" ?$,1-0(B) ; Yiddish Double Vav + ("P" ?$,1,W(B) ; Patah + ("{" ?}) ; mirroring + ("}" ?{) ; mirroring + ("A" ?$,1,P(B) ; Sheva + ("S" ?$,1,\(B) ; Dagesh or Mapiq + ("F" ?$,1-4(B) ; Gershayim (Punct.) + ("G" ?$,1,b(B) ; Sin dot + ("H" ?$,1,a(B) ; Shin dot + ("J" ?$,1,T(B) ; Hiriq + ("K" ?$,1tJ(B) ; New Sheqel sign + ("L" ?$,1-1(B) ; Yiddish Vav Yod + ("X" ?$,1,V(B) ; Segol (Point) + ("C" ?$,1,[(B) ; Qubuts + ("V" ?$,1,Q(B) ; Hataf Segol + ("B" ?$,1,R(B) ; Hataf Patah + ("N" ?$,1,S(B) ; Hataf Qamats + ("M" ?$,1,U(B) ; Tsere + ("<" ?>) ; mirroring + (">" ?<) ; mirroring +) + + +(quail-define-package + "hebrew-full" "Hebrew" ",Hr$,1,T,K(B" nil "Hebrew Full method. + +Provides access to all Hebrew characters suiltable to Modern Hebrew. +" nil t t t t nil nil nil nil nil t) + +(quail-define-rules + ("`" ?\;) + ("-" ?$,1,^(B) ; Maqaf ("w" ?') - ("e" ?,Hw(B) - ("r" ?,Hx(B) - ("t" ?,H`(B) - ("y" ?,Hh(B) - ("u" ?,He(B) - ("i" ?,Ho(B) - ("o" ?,Hm(B) - ("p" ?,Ht(B) - ("a" ?,Hy(B) - ("s" ?,Hc(B) - ("d" ?,Hb(B) - ("f" ?,Hk(B) - ("g" ?,Hr(B) - ("h" ?,Hi(B) - ("j" ?,Hg(B) - ("k" ?,Hl(B) - ("l" ?,Hj(B) - (";" ?,Hs(B) - ("z" ?,Hf(B) - ("x" ?,Hq(B) - ("c" ?,Ha(B) - ("v" ?,Hd(B) - ("b" ?,Hp(B) - ("n" ?,Hn(B) - ("m" ?,Hv(B) - ("," ?,Hz(B) - ("." ?,Hu(B) + ("e" ?,Hw(B) ; Qof + ("r" ?,Hx(B) ; Resh + ("t" ?,H`(B) ; Alef + ("y" ?,Hh(B) ; Tet + ("u" ?,He(B) ; Vav + ("i" ?,Ho(B) ; Final Nun + ("o" ?,Hm(B) ; Final Mem + ("p" ?,Ht(B) ; Pe + ("[" ?\]) ; mirroring + ("]" ?\[) ; mirroring + ("a" ?,Hy(B) ; Shin + ("s" ?,Hc(B) ; Dalet + ("d" ?,Hb(B) ; Gimel + ("f" ?,Hk(B) ; Kaf + ("g" ?,Hr(B) ; Ayin + ("h" ?,Hi(B) ; Yod + ("j" ?,Hg(B) ; Het + ("k" ?,Hl(B) ; Lamed + ("l" ?,Hj(B) ; Final Kaf + (";" ?,Hs(B) ; Final Pe + ("'" ?,) + ("z" ?,Hf(B) ; Zayin + ("x" ?,Hq(B) ; Samekh + ("c" ?,Ha(B) ; Bet + ("v" ?,Hd(B) ; He + ("b" ?,Hp(B) ; Nun + ("n" ?,Hn(B) ; Mem + ("m" ?,Hv(B) ; Tsadi + ("," ?,Hz(B) ; Tav + ("." ?,Hu(B) ; Final Tsadi ("/" ?.) - ("'" ?,)) + + ("(" ?\)) ; mirroring + (")" ?\() ; mirroring + ("Q" ?/) + ("W" ?$,1-3(B) ; Geresh (Punct.) + ("E" ?$,1tJ(B) ; New Sheqel Sign + ("R" ?$,1,_(B) ; Rafe + ("T" ?$,1,Q(B) ; Hataf Segol + ("Y" ?$,1-1(B) ; Yiddish Vav Yod + ("U" ?$,1-0(B) ; Yiddish Double Vav + ("I" ?$,1,R(B) ; Hataf Patah + ("O" ?$,1,S(B) ; Hataf Qamats + ("P" ?$,1-4(B) ; Gershayim (Punct.) + ("{" ?}) ; mirroring + ("}" ?{) ; mirroring + ("A" ?$,1,P(B) ; Sheva + ("S" ?$,1,\(B) ; Dagesh or Mapiq + ("D" ?$,1,[(B) ; Qubuts + ("F" ?$,1,Y(B) ; Holam + ("G" ?$,1,V(B) ; Segol (Point) + ("H" ?$,1,U(B) ; Tsere + ("J" ?$,1,T(B) ; Hiriq + ("K" ?$,1,W(B) ; Patah + ("L" ?$,1,X(B) ; Qamats + ("Z" ?$,1,b(B) ; Sin Dot + ("X" ?$,1,a(B) ; Shin Dot + ("C" ?$,1,K(B) ; Ole + ("V" ?$,1-2(B) ; Yiddish Double Yod + ("B" ?$,1,c(B) ; Sof Pasuq + ("N" ?\u200E) ; LRM + ("M" ?\u200F) ; RLM + ("<" ?>) ; mirroring + (">" ?<) ; mirroring + + ("q`" ?\u202D) ; LRO + ("q1" ?\u202E) ; RLO + ("q2" ?\u202A) ; LRE + ("q3" ?\u202B) ; RLE + ("q4" ?\u202C) ; PDF + ("q5" ?\u034F) ; CGJ + ("q6" ?$,1,L(B) ; Iluy + ("q8" ?$,1,M(B) ; Dehi + ("q9" ?$,1,g(B) ; Qamats Qatan + ("q0" ?$,1,=(B) ; Geresh Muqdam + ("q-" ?-) ; Minus + ("q=" ?$,1,N(B) ; Zinor + ("q|" ?$,1,`(B) ; Paseq + ("qw" ?$,1,O(B) ; Masora Circle + ("qe" ?$,1,d(B) ; Upper Dot + ("qr" ?$,1,e(B) ; Lower Dot + ("qy" ?$,1,?(B) ; Qarney Para + ("qu" ?$,1,3(B) ; Shalshelet + ("qi" ?$,1,>(B) ; Gershayim (Accent) + ("qo" ?$,1,<(B) ; Geresh (Accent) + ("qp" ?$,1,H(B) ; Qadma + ("q[" ?$,1,f(B) ; Nun Hafukha + ("qa" ?$,1,Z(B) ; Holam Haser for Vav + ("qs" ?$,1,I(B) ; Telisha Qetana + ("qd" ?$,1,@(B) ; Telisha Gedola + ("qf" ?$,1,A(B) ; Pazer + ("qg" ?$,1,5(B) ; Zaqef Gadol + ("qh" ?$,1,4(B) ; Zaqef Qatan + ("qj" ?$,1,9(B) ; Pashta + ("qk" ?$,1,D(B) ; Mahapakh + ("ql" ?$,1,7(B) ; Revia + ("q;" ?$,1,2(B) ; Segol (Accent) + ("q'" ?$,1,8(B) ; Zarqa + ("qz" ?$,1,J(B) ; Yerah Ben Yomo + ("qx" ?$,1,F(B) ; Merkha Kefula + ("qc" ?$,1,:(B) ; Yetiv + ("qv" ?$,1,;(B) ; Tevir + ("qb" ?$,1,G(B) ; Darga + ("qn" ?$,1,1(B) ; Etnahta + ("qm" ?$,1,C(B) ; Munah + ("q," ?$,1,6(B) ; Tipeha + ("q." ?$,1,E(B) ; Merkha + ("q/" ?$,1,](B) ; Meteg +) + + +(quail-define-package + "hebrew-biblical-tiro" "Hebrew" ",Hz$,1,T,Hx$,1,Y(B" nil +"Biblical Hebrew Tiro input method. + +Based on Society of Biblical Literature's Tiro keyboard layout. +Not suiltable for modern Hebrew input. + 'q' is used to switch levels instead of Alt-Gr. + Combining dot above (Called Masora dot) ($,1%G(B) is mapped to 'q1'. +" nil t t t t nil nil nil nil nil t) + +(quail-define-rules + ("`" ?$,1,c(B) ; Sof Pasuq + ("-" ?$,1,^(B) ; Maqaf + ("=" ?$(O#?(B) ; White Bullet + ("w" ?$,1-3(B) ; Geresh (Punct.) + ("e" ?,Hw(B) ; Qof + ("r" ?,Hx(B) ; Resh + ("t" ?,H`(B) ; Alef + ("y" ?,Hh(B) ; Tet + ("u" ?,He(B) ; Vav + ("i" ?,Ho(B) ; Final Nun + ("o" ?,Hm(B) ; Final Mem + ("p" ?,Ht(B) ; Pe + ("[" ?\]) ; mirroring + ("]" ?\[) ; mirroring + ("\\" ?$,1,`(B) ; Paseq + ("a" ?,Hy(B) ; Shin + ("s" ?,Hc(B) ; Dalet + ("d" ?,Hb(B) ; Gimel + ("f" ?,Hk(B) ; Kaf + ("g" ?,Hr(B) ; Ayin + ("h" ?,Hi(B) ; Yod + ("j" ?,Hg(B) ; Het + ("k" ?,Hl(B) ; Lamed + ("l" ?,Hj(B) ; Final Kaf + (";" ?,Hs(B) ; Final Pe + ("'" ?$,1,:(B) ; Yetiv + ("z" ?,Hf(B) ; Zayin + ("x" ?,Hq(B) ; Samekh + ("c" ?,Ha(B) ; Bet + ("v" ?,Hd(B) ; He + ("b" ?,Hp(B) ; Nun + ("n" ?,Hn(B) ; Mem + ("m" ?,Hv(B) ; Tsadi + ("," ?,Hz(B) ; Tav + ("." ?,Hu(B) ; Final Tsadi + ("/" ?$,1,M(B) ; Dehi + ("~" ?$,1,N(B) ; Zinor + ("!" ?$,1,I(B) ; Telisha Qetana + ("@" ?$,1,9(B) ; Pashta + ("#" ?$,1,2(B) ; Segol (Accent) + ("$" ?$,1,O(B) ; Masora circle + ("%" ?$,1,Z(B) ; Holam Haser for Vav + ("^" ?$,1,Y(B) ; Holam + ("&" ?$,1,_(B) ; Rafe + ("*" ?$,1,b(B) ; Sin dot + ("(" ?$,1,a(B) ; Shin dot + (")" ?$,1,=(B) ; Geresh Muqdam + ("_" ?$,1,@(B) ; Telisha Gedola + ("+" ?$,1,\(B) ; Dagesh or Mapiq + ("Q" ?$,1,d(B) ; Upper dot + ("W" ?$,1,L(B) ; Iluy + ("E" ?$,1,K(B) ; Ole + ("R" ?$,1,?(B) ; Qarney Para + ("T" ?$,1,3(B) ; Shalshelet + ("Y" ?$,1,>(B) ; Gershayim (Accent) + ("U" ?$,1,<(B) ; Geresh (Accent) + ("I" ?$,1,A(B) ; Pazer + ("O" ?$,1,5(B) ; Zaqef Gadol + ("P" ?$,1,4(B) ; Zaqef Qatan + ("{" ?$,1,7(B) ; Revia + ("}" ?$,1,8(B) ; Zarqa + ("|" ?$,1,H(B) ; Qadma + ("A" ?$,1,](B) ; Meteg + ("S" ?$,1,P(B) ; Sheva + ("D" ?$,1,[(B) ; Qubuts + ("F" ?$,1,T(B) ; Hiriq + ("G" ?$,1,Q(B) ; Hataf Segol + ("H" ?$,1,V(B) ; Segol (Point) + ("J" ?$,1,U(B) ; Tsere + ("K" ?$,1,S(B) ; Hataf Qamats + ("L" ?$,1,X(B) ; Qamats + (":" ?$,1,R(B) ; Hataf Patah + ("\"" ?$,1,W(B) ; Patah + ("Z" ?$,1,e(B) ; Lower dot + ("X" ?$,1,D(B) ; Mahapakh + ("C" ?$,1,J(B) ; Yerah Ben Yomo + ("V" ?$,1,F(B) ; Merkha Kefula + ("B" ?$,1,E(B) ; Merkha + ("N" ?$,1,G(B) ; Darga + ("M" ?$,1,;(B) ; Tevir + ("<" ?$,1,1(B) ; Etnahta + (">" ?$,1,6(B) ; Tipeha + ("?" ?$,1,C(B) ; Munah + + ("q`" ?\;) + ("q1" ?\u0307) ; Combining dot above + ("q2" ?\u0336) ; Combining long stroke overlay + ("q3" ?\u030A) ; Combining ring above + ("q4" ?$,1tJ(B) ; New Sheqel Sign + ("q5" ?\u200D) ; ZWJ + ("q6" ?\u200C) ; ZWNJ + ("q7" ?\u034F) ; CGJ + ("q8" ?\u200E) ; LRM + ("q9" ?\u200F) ; RLM + ("q0" ?$,2",(B) ; Dotted Circle + ("q-" ?-) ; Minus + ("q=" ?$(O#@(B) ; Bullet + ("qq" ?\u0308) ; Combining Diaeresis + ("qw" ?$,1-4(B) ; Gershayim (Punct.) + ("qe" ?,F$(B) ; Euro Sign + ("qu" ?$,1-0(B) ; Yiddish Double Vav + ("q\\" ?\\) + ("qh" ?$,1-2(B) ; Yiddish Double Yod + ("qj" ?$,1-1(B) ; Yiddish Vav Yod + ("ql" ?$,1,g(B) ; Qamats Qatan + ("q'" ?,) + ("qc" ?$,1,B(B) ; Atnah Hafukh + ("qb" ?$,1,f(B) ; Nun Hafukha + ("q/" ?.) + + ("q~" ?~) + ("q!" ?!) + ("q@" ?@) + ("q#" ?#) + ("q$" ?$) + ("q%" ?%) + ("q^" ?^) + ("q&" ?&) + ("q*" ?*) + ("q(" ?\)) ; mirroring + ("q)" ?\() ; mirroring + ("q_" ?_) + ("q+" ?+) + ("qQ" ?/) + ("qW" ?') + ("q{" ?}) ; mirroring + ("q}" ?{) ; mirroring + ("q|" ?|) + ("q:" ?:) + ("q\"" ?\") + ("q<" ?>) + ("q>" ?<) + ("q?" ??) +) + +(quail-define-package + "hebrew-biblical-sil" "Hebrew" ",Hq$,1,T,Hl(B" nil +"Biblical Hebrew SIL input method. + +Based on Society of Biblical Literature's SIL keyboard layout. +Phonetic and not suiltable for modern Hebrew input. + '`' is used to switch levels instead of Alt-Gr. + Euro Sign (,F$(B) is mapped to 'Z'. +" nil t t t t nil nil nil nil nil t) + +(quail-define-rules + ("-" ?$,1,^(B) ; Maqaf + ("=" ?$,1,\(B) ; Dagesh or Mapiq + ("q" ?,Hw(B) ; Qof + ("w" ?,He(B) ; Vav + ("e" ?$,1,V(B) ; Segol (Point) + ("r" ?,Hx(B) ; Resh + ("t" ?,Hz(B) ; Tav + ("y" ?,Hi(B) ; Yod + ("u" ?$,1,[(B) ; Qubuts + ("i" ?$,1,T(B) ; Hiriq + ("o" ?$,1,Y(B) ; Holam + ("p" ?,Ht(B) ; Pe + ("[" ?\]) ; mirroring + ("]" ?\[) ; mirroring + ("\\" ?$,1,`(B) ; Paseq + ("a" ?$,1,W(B) ; Patah + ("s" ?,Hq(B) ; Samekh + ("d" ?,Hc(B) ; Dalet + ("f" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot + ("g" ?,Hb(B) ; Gimel + ("h" ?,Hd(B) ; He + ("j" [ ",Hy$,1,a(B" ]) ; Shin + Shin dot + ("k" ?,Hk(B) ; Kaf + ("l" ?,Hl(B) ; Lamed + (";" ?$,1,P(B) ; Sheva + ("'" ?,F"(B) ; Right Single Quotation Mark + ("z" ?,Hf(B) ; Zayin + ("x" ?,Hg(B) ; Het + ("c" ?,Hv(B) ; Tsadi + ("v" ?,Hh(B) ; Tet + ("b" ?,Ha(B) ; Bet + ("n" ?,Hp(B) ; Nun + ("m" ?,Hn(B) ; Mem + + ("~" ?$,1tJ(B) ; New Sheqel Sign + ("@" ?$,1,8(B) ; Zarqa + ("#" ?$,1,H(B) ; Qadma + ("$" ?$,1,<(B) ; Geresh (Accent) + ("%" ?$,1,>(B) ; Gershayim (Accent) + ("&" ?$,1,L(B) ; Iluy + ("*" ?$,1,=(B) ; Geresh Muqdam + ("(" ?\)) ; mirroring + (")" ?\() ; mirroring + ("_" ?$(G!9(B) ; Em Dash + ("Q" ?$,1,7(B) ; Revia + ("E" ?$,1,U(B) ; Tsere + ("Y" ?$,1,?(B) ; Qarney Para + ("O" ?$,1,Z(B) ; Holam Haser for Vav + ("P" ?,Hs(B) ; Final Pe + ("{" ?}) ; mirroring + ("}" ?{) ; mirroring + + ("A" ?$,1,X(B) ; Qamats + ("S" ?,Hy(B) ; Shin + ("K" ?,Hj(B) ; Final Kaf + (":" ?$,1-4(B) ; Gershayim (Punct.) + ("\"" ?,Y!(B) ; Right Double Quotation Mark + ("Z" ?,F$(B) ; Euro Sign + ("C" ?,Hu(B) ; Final Tsadi + ("N" ?,Ho(B) ; Final Nun + ("M" ?,Hm(B) ; Final Mem + ("<" ?,Hr(B) ; Ayin + (">" ?,H`(B) ; Alef + + ("``" ?$) + ("`1" ?$,1,](B) ; Meteg + ("`2" ?$,1,B(B) ; Atnah Hafukh + ("`3" ?$,1,6(B) ; Tipeha + ("`4" ?$,1,E(B) ; Merkha + ("`5" ?$,1,F(B) ; Merkha Kefula + ("`6" ?$,1,M(B) ; Dehi + ("`7" ?$,1,C(B) ; Munah + ("`8" ?$,1,;(B) ; Tevir + ("`9" ?$,1,G(B) ; Darga + ("`0" ?$,1,J(B) ; Yerah Ben Yomo + ("`-" ?$(G!7(B) ; Em Dash + ("`=" ?$,1,1(B) ; Etnahta + ("`]" ?$,1,:(B) ; Accent Yetiv + ("`\\" ?$,1,D(B) ; Mahapakh + ("`a" ?$,1,g(B) ; Qamats Qatan + ("`g" ? $(O#?(B) ; White Bullet + ("`h" ?\u0336) ; Combining Long Stroke Overlay + ("`;" ?\;) + ("`'" ?\u0323); Combining Dot Below (Lower Point??) + ("`m" ?\u200C) ; ZWNJ + ("`," ?,A;(B) ; mirroring + ("`." ?,A+(B) ; mirroring + ("`/" ?$,1-3(B) ; Geresh (Punct.) + + ("`!" ?$,1,7(B) ; Revia + ("`@" ?$,1,N(B) ; Zinor + ("`#" ?$,1,9(B) ; Pashta + ("`$" ?$,1,@(B) ; Telisha Gedola + ("`%" ?$,1,I(B) ; Telisha Qetana + ("`&" ?$,1,A(B) ; Pazer + ("`*" ?$,1,5(B) ; Zaqef Gadol + ("`(" ?$,1,3(B) ; Shalshelet + ("`)" ?$,1,O(B) ; Masora Circle + ("`_" ?$,1,_(B) ; Rafe + ("`+" ?$,2",(B) ; Dotted Circle + ("`E" ?$,1,Q(B) ; Hataf Segol + ("`O" ?$,1,S(B) ; Hataf Qamats + ("`P" ?\u034F) ; CGJ + ("`{" ?$,1,4(B) ; Zaqef Qatan + ("`}" ?$,1,2(B) ; Segol (Accent) + ("`|" ?$,1,K(B) ; Ole + ("`A" ?$,1,R(B) ; Hataf Patah + ("`G" ?$(O#@(B) ; Bullet + ("`H" ?\u030A) ; Combining ring above + ("`:" ?$,1,c(B) ; Sof Pasuq + ("`\"" ?$,1,d(B) ; Upper Dot + ("`M" ?\u200D) ; ZWJ + ("`<" ?\u0307) ; Combining dot above + ("`>" ?\u0308) ; Combining Diaeresis +) + + +(quail-define-package + "yiddish-royal" "Hebrew" "$,1-2,Hx(B" nil "Yiddish Royal input method. + +Based on Royal Yiddish typewriter. +Better for yiddish than Hebrew methods. +" nil t t t t nil nil nil nil nil t) + +(quail-define-rules + ("`" ?~) + ("q" ?,Hw(B) ; Qof + ("w" [ ",H`$,1,X(B" ]) ; Qamats Alef (Komets Alef) + ("e" ?,Hx(B) ; Resh + ("r" ?,H`(B) ; Alef (Shtumer Alef) + ("t" ?,Hh(B) ; Tet + ("y" ?$,1-0(B) ; Yiddish Double Vav (Tsvey Vovn) + ("u" ?,He(B) ; Vav + ("i" ?,Ho(B) ; Final Nun + ("o" ?,Hm(B) ; Final Mem + ("p" [ ",Ht$,1,_(B" ]) ; Rafe Pe (Fey) + ("[" [ ",Ht$,1,\(B" ]) ; Dagesh Pe (Pey) + ("]" ?,) + ("a" ?,Hy(B) ; Shin + ("s" ?,Hc(B) ; Dalet + ("d" ?,Hb(B) ; Gimel + ("f" ?,Hk(B) ; Kaf + ("g" ?,Hr(B) ; Ayin + ("h" ?$,1-2(B) ; Yiddish Double Yod (Tsvey Yudn) + ("j" ?,Hi(B) ; Yod + ("k" ?,Hg(B) ; Het + ("l" ?,Hl(B) ; Lamed + (";" ?,Hj(B) ; Final Kaf + ("'" ?,Hs(B) ; Final Pe + ("z" ?.) + ("x" ?,Hf(B) ; Zayin + ("c" ?,Hq(B) ; Samekh + ("v" ?,Ha(B) ; Bet + ("b" ?,Hd(B) ; He + ("n" ?,Hp(B) ; Nun + ("m" ?,Hn(B) ; Mem + ("," ?,Hv(B) ; Tsadi + ("." ?,Hz(B) ; Tav + ("/" ?,Hu(B) ; Final Tsadi + + ("~" ?@) + ("!" ?,Y!(B) ; Right Double Quotation Mark + ("@" ?,Y%(B) ; Double Low-9 Quotation Mark + ("(" ?\)) ; mirroring + (")" ?\() ; mirroring + ("Q" ?,A=(B) ; Right Double Quotation Mark + ("W" ?,A<(B) + ("E" ?,A>(B) ; Yiddish Double Yod (x2) + ("R" [ ",H`$,1,W(B" ]) ; Patah Alef (Pasekh Alef) +; ("T" "") + ("Y" ?$,1-1(B) ; Ligature Yiddish Vav Yod (vov yud) + ("U" [ ",He$,1,\(B" ]) ; Melupm vov + ("I" ?/) + ("O" ?\\) + ("P" ?,Ht(B) ; Pe + ("{" ??) + ("}" ?!) + ("A" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot + ("S" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot +; ("D" "") + ("F" [ ",Hk$,1,\(B" ]) ; Dagesh Kaf (Kof) +; ("G" "") + ("H" [ "$,1-2,W(B" ]) ; Yiddish Double Yod + Patah (Pasekh Tsvey Yudn) + ("J" [ ",Hi$,1,T(B" ]) ; Khirik Yud + ("K" ?}) ; mirroring + ("L" ?{) ; mirroring + ("\"" ?\;) + ("Z" ??) + ("X" ?|) + ("C" [ ",Ha$,1,\(B" ]) ; Dagesh Bet (Beys) + ("V" [ ",Ha$,1,_(B" ]) ; Rafe Bet (Veys) + ("B" ?\]) ; mirroring + ("N" ?\[) ; mirroring + ("M" ?>) ; mirroring + ("<" ?<) ; mirroring + (">" [ ",Hz$,1,\(B" ]) ; Dagesh Tav (Tof) + ("?" ?\') +) + + +(quail-define-package + "yiddish-keyman" "Hebrew" "$,1-2,Hw(B" nil "Yiddish Keyman input method. + +Based on Keyman keyboard layout. +Better for yiddish than Hebrew methods.. +" nil t t t t nil nil nil nil nil t) + +(quail-define-rules + ("`" ?\;) + ("q" ?,Y%(B) ; Double Low-9 Quotation Mark + ("w" ?,Hy(B) ; Shin + ("e" ?,Hr(B) ; Ayin + ("r" ?,Hx(B) ; Resh + ("t" ?,Hh(B) ; Tet + ("y" ?,Hi(B) ; Yod + ("u" ?,He(B) ; Vav + ("i" ?,Hi(B) ; Yod (x2) + ("o" [ ",H`$,1,X(B" ]) ; Qamats Alef (Komets Alef) + ("p" [ ",Ht$,1,\(B" ]) ; Dagesh Pe (Pey) + ("[" ?\]) ; mirroring + ("]" ?\[) ; mirroring + ("a" [ ",H`$,1,W(B" ]) ; Patah Alef (Pasekh Alef) + ("s" ?,Hq(B) ; Samekh + ("d" ?,Hc(B) ; Dalet + ("f" [ ",Ht$,1,_(B" ]) ; Rafe Pe (Fey) + ("g" ?,Hb(B) ; Gimel + ("h" ?,Hd(B) ; He + ("j" ?$,1-2(B) ; Yiddish Double Yod (Tsvey Yudn) + ("k" ?,Hw(B) ; Qof + ("l" ?,Hl(B) ; Lamed + ("z" ?,Hf(B) ; Zayin + ("x" ?,Hk(B) ; Kaf + ("c" ?,Hv(B) ; Tsadi + ("v" ?$,1-0(B) ; Yiddish Double Vav (Tsvey Vovn) + ("b" ?,Ha(B) ; Bet + ("n" ?,Hp(B) ; Nun + ("m" ?,Hn(B) ; Mem + + ("(" ?\)) ; mirroring + (")" ?\() ; mirroring + ("Q" ?,Y!(B) ; Right Double Quotation Mark + ("W" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot + ("E" ?$,1-2(B) ; Yiddish Double Yod (x2) +; ("R" "") ; + ("T" [ ",Hz$,1,\(B" ]) ; Dagesh Tav (Tof) + ("Y" [ "$,1-2,W(B" ]) ; Yiddish Double Yod + Patah (Pasekh Tsvey Yudn) + ("U" [ ",He$,1,\(B" ]) ; Melupm vov + ("I" [ ",Hi$,1,T(B" ]) ; Khirik Yud + ("O" ?$,1-1(B) ; Ligature Yiddish Vav Yod (vov yud) +; ("P" "") + ("{" ?}) ; mirroring + ("}" ?{) ; mirroring + ("A" ?,H`(B) ; Alef (Shtumer Alef) + ("S" ?,Hz(B) ; Tav + ("F" ?,Hs(B) ; Final Pe + ("G" ?$,1-3(B) ; Geresh (Punct.) + ("H" ?,Hg(B) ; Het + ("J" ?$,1-2(B) ; Yiddish Double Yod (x2) + ("K" [ ",Hk$,1,\(B" ]) ; Dagesh Kaf (Kof) +; ("L" "") +; ("Z" "") + ("X" ?,Hj(B) ; Final Kaf + ("C" ?,Hu(B) ; Final Tsadi + ("V" [ ",Ha$,1,_(B" ]) ; Rafe Bet (Veys) ) ; Bet +; ("B" "") + ("N" ?,Ho(B) ; Final Nun + ("M" ?,Hm(B) ; Final Mem + ("<" ?>) ; mirroring + (">" ?<) ; mirroring +) ;;; hebrew.el ends here ------------------------------------------------------------ revno: 105311 committer: Eli Zaretskii branch nick: trunk timestamp: Sat 2011-07-23 18:36:52 +0300 message: doc/lispref/display.texi (Bidirectional Display): New section. diff: === modified file 'doc/lispref/ChangeLog' --- doc/lispref/ChangeLog 2011-07-16 20:05:20 +0000 +++ doc/lispref/ChangeLog 2011-07-23 15:36:52 +0000 @@ -1,3 +1,7 @@ +2011-07-23 Eli Zaretskii + + * display.texi (Bidirectional Display): New section. + 2011-07-16 Lars Magne Ingebrigtsen Tim Cross (tiny change) Glenn Morris === modified file 'doc/lispref/display.texi' --- doc/lispref/display.texi 2011-07-14 17:28:42 +0000 +++ doc/lispref/display.texi 2011-07-23 15:36:52 +0000 @@ -34,6 +34,8 @@ * Display Tables:: How to specify other conventions. * Beeping:: Audible signal to the user. * Window Systems:: Which window system is being used. +* Bidirectional Display:: Display of bidirectional scripts, such as + Arabic and Farsi. @end menu @node Refresh Screen @@ -5966,3 +5968,131 @@ the window system, and creating the initial window. Users should not interfere with it. @end defvar + +@node Bidirectional Display +@section Bidirectional Display +@cindex bidirectional display +@cindex right-to-left text + + Emacs can display text written in scripts, such as Arabic, Farsi, +and Hebrew, whose natural ordering of horizontal text for display is +from right to left. However, digits and Latin text embedded in these +scripts are still displayed left to right. It is also not uncommon to +have small portions of text in Arabic or Hebrew embedded in otherwise +Latin document, e.g., as comments and strings in a program source +file. Likewise, small portions of Latin text can be embedded in an +Arabic or Farsi document. For these reasons, text that uses these +scripts is actually @dfn{bidirectional}: a mixture of runs of +left-to-right and right-to-left characters. + + This section describes the facilities and options provided by Emacs +for editing and displaying bidirectional text. + +@cindex logical order +@cindex visual order +@cindex unicode bidirectional algorithm + Emacs stores right-to-left and bidirectional text in the so-called +@dfn{logical} (or @dfn{reading}) order: the buffer or string position +of the first character you read precedes that of the next character. +Reordering of bidirectional text into the @dfn{visual} order happens +at display time. As result, character positions no longer increase +monotonically with their positions on display. Emacs implements the +Unicode Bidirectional Algorithm (a.k.a.@: @acronym{UBA}) described in +the Unicode Standard Annex #9, for reordering of bidirectional text +for display. Reordering of bidirectional text for display in Emacs is +a ``Full bidirectionality'' class implementation of the @acronym{UBA}. + +@defvar bidi-display-reordering + The buffer-local variable @code{bidi-display-reordering} controls +whether text in the buffer is reordered for display. If its value is +non-@code{nil}, Emacs reorders characters that have right-to-left +directionality when they are displayed. The default value is +@code{nil}. Text in overlay strings (@pxref{Overlay +Properties,,before-string}), display strings (@pxref{Overlay +Properties,,display}), and @code{display} text properties +(@pxref{Display Property}) is also reordered if the buffer whose text +includes these strings is reordered for display. Turning off +@code{bidi-display-reordering} for a buffer turns off reordering of +all the overlay and display strings in that buffer. + + Reordering of strings that are unrelated to any buffer, such as text +displayed on the mode line (@pxref{Mode Line Format}) or header line +(@pxref{Header Lines}), is controlled by the default value of +@code{bidi-display-reordering}. +@end defvar + +@cindex unibyte buffers, and bidi reordering + Emacs does not reorder text in unibyte buffers, even if +@code{bidi-display-reordering} is non-@code{nil} in such a buffer. +This is because unibyte buffers contain raw bytes, not characters, and +thus don't have bidirectional properties defined for them which are +required for correct reordering. Therefore, to test whether text in a +buffer will be reordered for display, it is not enough to test the +value of @code{bidi-display-reordering} alone. The correct test is +this: + +@example + (if (and enable-multibyte-characters + bidi-display-reordering) + ;; Buffer is being reordered for display + ) +@end example + + In contrast to unibyte buffers, unibyte display and overlay strings +@emph{are} reordered, if their parent buffer is reordered. This is +because plain-@sc{ascii} strings are stored by Emacs as unibyte +strings. If a unibyte display or overlay string includes +non-@sc{ascii} characters, these characters are assumed to have +left-to-right direction. + +@cindex display properties, and bidi reordering of text + Text covered by @code{display} text properties, by overlays with +@code{display} properties whose value is a string, and by any other +properties that replace buffer text, is treated as a single unit when +it is reordered for display. That is, the entire chunk of text +covered by these properties is reordered together. Moreover, the +bidirectional properties of the characters in this chunk of text are +ignored, and Emacs reorders them as if they were replaced with a +single character @code{u+FFFC}, known as the @dfn{Object Replacement +Character}. This means that placing a display property over a portion +of text may change the way that the surrounding text is reordered for +display. To prevent this unexpected effect, always place such +properties on text whose directionality is identical with text that +surrounds it. + +@cindex base direction of a paragraph + Each paragraph of bidirectional text can have its own @dfn{base +direction}, either right-to-left or left-to-right. Text in +left-to-right paragraphs is displayed beginning at the left margin of +the window and is truncated or continued when it reaches the right +margin. By contrast, display of text in right-to-left paragraphs +begins at the right margin and is continued or truncated at the left +margin. + +@defvar bidi-paragraph-direction + Emacs determines the base direction of each paragraph dynamically, +based on the text at the beginning of the paragraph. The precise +method of determining the base direction is specified by the +@acronym{UBA}; in a nutshell, the first character in a paragraph that +has an explicit directionality determines the base direction of the +paragraph. However, sometimes a buffer may need to force a certain +base direction for its paragraphs. For example, a buffer that visits +a source code of a program should force all its paragraphs to be +displayed left to right. The variable +@code{bidi-paragraph-direction}, if non-@code{nil}, disables the +dynamic determination of the base direction, and instead forces all +paragraphs in the buffer to have the direction specified by its +buffer-local value. The value can be either @code{right-to-left} or +@code{left-to-right}. Any other value is interpreted as @code{nil}. +@end defvar + +@defun current-bidi-paragraph-direction &optional buffer +This function returns the paragraph direction at point in the named +@var{buffer}. The returned value is a symbol, either +@code{left-to-right} or @code{right-to-left}. If @var{buffer} is +omitted or @code{nil}, it defaults to the current buffer. If the +buffer-local value of the variable @code{bidi-paragraph-direction} is +non-@code{nil}, the returned value will be identical to that value; +otherwise, the returned value reflects the paragraph direction +determined dynamically by Emacs. +@end defun ------------------------------------------------------------ revno: 105310 committer: Eli Zaretskii branch nick: trunk timestamp: Sat 2011-07-23 08:15:53 -0400 message: Fix compilation with GLYPH_DEBUG. src/xfns.c (unwind_create_frame) [GLYPH_DEBUG]: Adapt to changes in revision 84777 on 2008-02-22. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2011-07-23 10:46:21 +0000 +++ src/ChangeLog 2011-07-23 12:15:53 +0000 @@ -1,5 +1,8 @@ 2011-07-23 Eli Zaretskii + * xfns.c (unwind_create_frame) [GLYPH_DEBUG]: Adapt to changes in + revision 84777 on 2008-02-22. + * xdisp.c (move_it_in_display_line_to): Record the best matching position for TO_CHARPOS while scanning the line, and restore it on exit if none of the characters scanned was an exact match. Fixes === modified file 'src/xfns.c' --- src/xfns.c 2011-07-10 08:20:10 +0000 +++ src/xfns.c 2011-07-23 12:15:53 +0000 @@ -2933,7 +2933,7 @@ #if GLYPH_DEBUG /* Check that reference counts are indeed correct. */ xassert (dpyinfo->reference_count == dpyinfo_refcount); - xassert (dpyinfo->image_cache->refcount == image_cache_refcount); + xassert (dpyinfo->terminal->image_cache->refcount == image_cache_refcount); #endif return Qt; }