annotate lisp/language/hebrew.el @ 109383:dcdf09a52e2c

[[[ * lisp/bookmark.el (bookmark-bmenu-switch-other-window, bookmark-bmenu-other-window, bookmark-bmenu-2-window): Don't override ambient binding of `bookmark-automatically-show-annotations'. (Bug #6515) ]]] === modified file 'lisp/bookmark.el' --- lisp/bookmark.el 2010-04-14 15:07:53 +0000 +++ lisp/bookmark.el 2010-06-27 03:40:14 +0000 @@ -1860,8 +1860,7 @@ (pop-up-windows t)) (delete-other-windows) (switch-to-buffer (other-buffer)) - (let ((bookmark-automatically-show-annotations nil)) ;FIXME: needed? - (bookmark--jump-via bmrk 'pop-to-buffer)) + (bookmark--jump-via bmrk 'pop-to-buffer) (bury-buffer menu))) @@ -1875,8 +1874,7 @@ "Select this line's bookmark in other window, leaving bookmark menu visible." (interactive) (let ((bookmark (bookmark-bmenu-bookmark))) - (let ((bookmark-automatically-show-annotations t)) ;FIXME: needed? - (bookmark--jump-via bookmark 'switch-to-buffer-other-window)))) + (bookmark--jump-via bookmark 'switch-to-buffer-other-window))) (defun bookmark-bmenu-switch-other-window () @@ -1887,8 +1885,7 @@ (pop-up-windows t) same-window-buffer-names same-window-regexps) - (let ((bookmark-automatically-show-annotations t)) ;FIXME: needed? - (bookmark--jump-via bookmark 'display-buffer)))) + (bookmark--jump-via bookmark 'display-buffer))) (defun bookmark-bmenu-other-window-with-mouse (event) "Select bookmark at the mouse pointer in other window, leaving bookmark menu visible." === modified file 'lisp/saveplace.el' --- lisp/saveplace.el 2010-01-13 08:35:10 +0000 +++ lisp/saveplace.el 2010-02-07 23:14:52 +0000 @@ -213,7 +213,7 @@ (symbol-name coding-system-for-write))) (let ((print-length nil) (print-level nil)) - (print save-place-alist (current-buffer))) + (pp save-place-alist (current-buffer))) (let ((version-control (cond ((null save-place-version-control) nil)
author Karl Fogel <kfogel@red-bean.com>
date Tue, 13 Jul 2010 18:09:20 -0400
parents 09daf1538316
children c18e82c381e4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109354
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
1 ;;; hebrew.el --- support for Hebrew -*- coding: utf-8 -*-
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
3 ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
74544
43cc94d955c2 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 64085
diff changeset
4 ;; Free Software Foundation, Inc.
74605
6ee41fdd69ff Update AIST copyright years.
Kenichi Handa <handa@m17n.org>
parents: 74544
diff changeset
5 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
6 ;; 2005, 2006, 2007, 2008, 2009, 2010
62396
197607499a29 Fix copyrights.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
7 ;; National Institute of Advanced Industrial Science and Technology (AIST)
197607499a29 Fix copyrights.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
8 ;; Registration Number H14PRO021
42058
265cb913043e Fix typo.
Pavel Janík <Pavel@Janik.cz>
parents: 42052
diff changeset
9
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 88707
diff changeset
10 ;; Copyright (C) 2003
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 88707
diff changeset
11 ;; National Institute of Advanced Industrial Science and Technology (AIST)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 88707
diff changeset
12 ;; Registration Number H13PRO009
42058
265cb913043e Fix typo.
Pavel Janík <Pavel@Janik.cz>
parents: 42052
diff changeset
13
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
14 ;; Keywords: multilingual, Hebrew
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
15
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
16 ;; This file is part of GNU Emacs.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
17
94665
55b7f25d920a Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
18 ;; GNU Emacs is free software: you can redistribute it and/or modify
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
19 ;; it under the terms of the GNU General Public License as published by
94665
55b7f25d920a Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
20 ;; the Free Software Foundation, either version 3 of the License, or
55b7f25d920a Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
21 ;; (at your option) any later version.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
22
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
23 ;; GNU Emacs is distributed in the hope that it will be useful,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
24 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
25 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
26 ;; GNU General Public License for more details.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
27
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
28 ;; You should have received a copy of the GNU General Public License
94665
55b7f25d920a Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
29 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
30
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
31 ;;; Commentary:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
32
42052
95bb550ed1ff ("Windows-1255"): New language.
Dave Love <fx@gnu.org>
parents: 38414
diff changeset
33 ;; For Hebrew, the character set ISO8859-8 is supported.
37112
9bd793285be5 comment
Dave Love <fx@gnu.org>
parents: 33778
diff changeset
34 ;; See http://www.ecma.ch/ecma1/STAND/ECMA-121.HTM.
42052
95bb550ed1ff ("Windows-1255"): New language.
Dave Love <fx@gnu.org>
parents: 38414
diff changeset
35 ;; Windows-1255 is also supported.
42058
265cb913043e Fix typo.
Pavel Janík <Pavel@Janik.cz>
parents: 42052
diff changeset
36
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
37 ;;; Code:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
38
88414
fad0f879877f Call define-coding-system instead of make-coding-system. All CCL program deleted.
Kenichi Handa <handa@m17n.org>
parents: 42152
diff changeset
39 (define-coding-system 'hebrew-iso-8bit
fad0f879877f Call define-coding-system instead of make-coding-system. All CCL program deleted.
Kenichi Handa <handa@m17n.org>
parents: 42152
diff changeset
40 "ISO 2022 based 8-bit encoding for Hebrew (MIME:ISO-8859-8)."
fad0f879877f Call define-coding-system instead of make-coding-system. All CCL program deleted.
Kenichi Handa <handa@m17n.org>
parents: 42152
diff changeset
41 :coding-type 'charset
fad0f879877f Call define-coding-system instead of make-coding-system. All CCL program deleted.
Kenichi Handa <handa@m17n.org>
parents: 42152
diff changeset
42 :mnemonic ?8
fad0f879877f Call define-coding-system instead of make-coding-system. All CCL program deleted.
Kenichi Handa <handa@m17n.org>
parents: 42152
diff changeset
43 :charset-list '(iso-8859-8)
88513
bafe04d82c5d Fix :mime-charset properties.
Dave Love <fx@gnu.org>
parents: 88414
diff changeset
44 :mime-charset 'iso-8859-8)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
45
18520
383d11185239 Swap args to define-coding-system-alias.
Richard M. Stallman <rms@gnu.org>
parents: 18377
diff changeset
46 (define-coding-system-alias 'iso-8859-8 'hebrew-iso-8bit)
18203
0745f30aec66 Adjusted for coding system name change.
Kenichi Handa <handa@m17n.org>
parents: 17993
diff changeset
47
29157
f0754aea38e3 (iso-8859-8-e, iso-8859-8-i): For now, just
Eli Zaretskii <eliz@gnu.org>
parents: 28906
diff changeset
48 ;; These are for Explicit and Implicit directionality information, as
f0754aea38e3 (iso-8859-8-e, iso-8859-8-i): For now, just
Eli Zaretskii <eliz@gnu.org>
parents: 28906
diff changeset
49 ;; defined in RFC 1556. We don't yet support directional information
f0754aea38e3 (iso-8859-8-e, iso-8859-8-i): For now, just
Eli Zaretskii <eliz@gnu.org>
parents: 28906
diff changeset
50 ;; in bidi languages, so these aliases are a lie, especially as far as
f0754aea38e3 (iso-8859-8-e, iso-8859-8-i): For now, just
Eli Zaretskii <eliz@gnu.org>
parents: 28906
diff changeset
51 ;; iso-8859-8-e is concerned. FIXME.
f0754aea38e3 (iso-8859-8-e, iso-8859-8-i): For now, just
Eli Zaretskii <eliz@gnu.org>
parents: 28906
diff changeset
52 (define-coding-system-alias 'iso-8859-8-e 'hebrew-iso-8bit)
f0754aea38e3 (iso-8859-8-e, iso-8859-8-i): For now, just
Eli Zaretskii <eliz@gnu.org>
parents: 28906
diff changeset
53 (define-coding-system-alias 'iso-8859-8-i 'hebrew-iso-8bit)
f0754aea38e3 (iso-8859-8-e, iso-8859-8-i): For now, just
Eli Zaretskii <eliz@gnu.org>
parents: 28906
diff changeset
54
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
55 (set-language-info-alist
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 88707
diff changeset
56 "Hebrew" '((charset iso-8859-8)
22714
e632673d8975 ("Hebrew"): Add coding-priority.
Kenichi Handa <handa@m17n.org>
parents: 20741
diff changeset
57 (coding-priority hebrew-iso-8bit)
88707
42305f57ba27 ("Hebrew"): Add windows-1255, cp862 coding
Dave Love <fx@gnu.org>
parents: 88619
diff changeset
58 (coding-system hebrew-iso-8bit windows-1255 cp862)
88414
fad0f879877f Call define-coding-system instead of make-coding-system. All CCL program deleted.
Kenichi Handa <handa@m17n.org>
parents: 42152
diff changeset
59 (nonascii-translation . iso-8859-8)
22982
5fef9d1a7fc2 (setup-XXX-environment): Just call set-language-environment. If
Kenichi Handa <handa@m17n.org>
parents: 22714
diff changeset
60 (input-method . "hebrew")
5fef9d1a7fc2 (setup-XXX-environment): Just call set-language-environment. If
Kenichi Handa <handa@m17n.org>
parents: 22714
diff changeset
61 (unibyte-display . hebrew-iso-8bit)
109354
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
62 (sample-text . "Hebrew שלום")
108598
bd78a6519aa5 lisp/language/hebrew.el ("Hebrew", "Windows-1255"): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 106815
diff changeset
63 (documentation . "Bidirectional editing is supported.")))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
64
42052
95bb550ed1ff ("Windows-1255"): New language.
Dave Love <fx@gnu.org>
parents: 38414
diff changeset
65 (set-language-info-alist
95bb550ed1ff ("Windows-1255"): New language.
Dave Love <fx@gnu.org>
parents: 38414
diff changeset
66 "Windows-1255" '((coding-priority windows-1255)
95bb550ed1ff ("Windows-1255"): New language.
Dave Love <fx@gnu.org>
parents: 38414
diff changeset
67 (coding-system windows-1255)
42152
e3ae5ef41293 Improving doc strings.
Werner LEMBERG <wl@gnu.org>
parents: 42058
diff changeset
68 (documentation . "\
e3ae5ef41293 Improving doc strings.
Werner LEMBERG <wl@gnu.org>
parents: 42058
diff changeset
69 Support for Windows-1255 encoding, e.g. for Yiddish.
108598
bd78a6519aa5 lisp/language/hebrew.el ("Hebrew", "Windows-1255"): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 106815
diff changeset
70 Bidirectional editing is supported.")))
42052
95bb550ed1ff ("Windows-1255"): New language.
Dave Love <fx@gnu.org>
parents: 38414
diff changeset
71
88558
cb333bb24363 (windows-1255, cp1255): New coding systems.
Dave Love <fx@gnu.org>
parents: 88513
diff changeset
72 (define-coding-system 'windows-1255
cb333bb24363 (windows-1255, cp1255): New coding systems.
Dave Love <fx@gnu.org>
parents: 88513
diff changeset
73 "windows-1255 (Hebrew) encoding (MIME: WINDOWS-1255)"
cb333bb24363 (windows-1255, cp1255): New coding systems.
Dave Love <fx@gnu.org>
parents: 88513
diff changeset
74 :coding-type 'charset
cb333bb24363 (windows-1255, cp1255): New coding systems.
Dave Love <fx@gnu.org>
parents: 88513
diff changeset
75 :mnemonic ?h
cb333bb24363 (windows-1255, cp1255): New coding systems.
Dave Love <fx@gnu.org>
parents: 88513
diff changeset
76 :charset-list '(windows-1255)
cb333bb24363 (windows-1255, cp1255): New coding systems.
Dave Love <fx@gnu.org>
parents: 88513
diff changeset
77 :mime-charset 'windows-1255)
cb333bb24363 (windows-1255, cp1255): New coding systems.
Dave Love <fx@gnu.org>
parents: 88513
diff changeset
78 (define-coding-system-alias 'cp1255 'windows-1255)
cb333bb24363 (windows-1255, cp1255): New coding systems.
Dave Love <fx@gnu.org>
parents: 88513
diff changeset
79
88619
3157a3f9d92d (cp862, ibm862): New coding systems.
Dave Love <fx@gnu.org>
parents: 88558
diff changeset
80 (define-coding-system 'cp862
88707
42305f57ba27 ("Hebrew"): Add windows-1255, cp862 coding
Dave Love <fx@gnu.org>
parents: 88619
diff changeset
81 "DOS codepage 862 (Hebrew)"
88619
3157a3f9d92d (cp862, ibm862): New coding systems.
Dave Love <fx@gnu.org>
parents: 88558
diff changeset
82 :coding-type 'charset
3157a3f9d92d (cp862, ibm862): New coding systems.
Dave Love <fx@gnu.org>
parents: 88558
diff changeset
83 :mnemonic ?D
3157a3f9d92d (cp862, ibm862): New coding systems.
Dave Love <fx@gnu.org>
parents: 88558
diff changeset
84 :charset-list '(cp862)
3157a3f9d92d (cp862, ibm862): New coding systems.
Dave Love <fx@gnu.org>
parents: 88558
diff changeset
85 :mime-charset 'cp862)
3157a3f9d92d (cp862, ibm862): New coding systems.
Dave Love <fx@gnu.org>
parents: 88558
diff changeset
86 (define-coding-system-alias 'ibm862 'cp862)
3157a3f9d92d (cp862, ibm862): New coding systems.
Dave Love <fx@gnu.org>
parents: 88558
diff changeset
87
109354
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
88 ;; Return a nested alist of Hebrew character sequences vs the
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
89 ;; corresponding glyph of FONT-OBJECT.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
90 (defun hebrew-font-get-precomposed (font-object)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
91 (let ((precomposed (font-get font-object 'hebrew-precomposed))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
92 ;; Vector of Hebrew precomposed charaters.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
93 (chars [#xFB2A #xFB2B #xFB2C #xFB2D #xFB2E #xFB2F #xFB30 #xFB31
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
94 #xFB32 #xFB33 #xFB34 #xFB35 #xFB36 #xFB38 #xFB39 #xFB3A
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
95 #xFB3B #xFB3C #xFB3E #xFB40 #xFB41 #xFB43 #xFB44 #xFB46
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
96 #xFB47 #xFB48 #xFB49 #xFB4A #xFB4B #xFB4C #xFB4D #xFB4E])
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
97 ;; Vector of decomposition character sequences corresponding
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
98 ;; to the above vector.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
99 (decomposed
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
100 [[#x05E9 #x05C1]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
101 [#x05E9 #x05C2]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
102 [#x05E9 #x05BC #x05C1]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
103 [#x05E9 #x05BC #x05C2]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
104 [#x05D0 #x05B7]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
105 [#x05D0 #x05B8]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
106 [#x05D0 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
107 [#x05D1 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
108 [#x05D2 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
109 [#x05D3 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
110 [#x05D4 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
111 [#x05D5 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
112 [#x05D6 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
113 [#x05D8 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
114 [#x05D9 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
115 [#x05DA #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
116 [#x05DB #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
117 [#x05DC #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
118 [#x05DE #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
119 [#x05E0 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
120 [#x05E1 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
121 [#x05E3 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
122 [#x05E4 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
123 [#x05E6 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
124 [#x05E7 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
125 [#x05E8 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
126 [#x05E9 #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
127 [#x05EA #x05BC]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
128 [#x05D5 #x05B9]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
129 [#x05D1 #x05BF]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
130 [#x05DB #x05BF]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
131 [#x05E4 #x05BF]]))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
132 (unless precomposed
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
133 (setq precomposed (list t))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
134 (let ((gvec (font-get-glyphs font-object 0 (length chars) chars)))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
135 (dotimes (i (length chars))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
136 (if (aref gvec i)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
137 (set-nested-alist (aref decomposed i) (aref gvec i)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
138 precomposed))))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
139 ;; Cache the result in FONT-OBJECT's property.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
140 (font-put font-object 'hebrew-precomposed precomposed))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
141 precomposed))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
142
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
143 ;; Composition function for hebrew. GSTRING is made of a Hebrew base
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
144 ;; character followed by Hebrew diacritical marks, or is made of
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
145 ;; single Hebrew diacritical mark. Adjust GSTRING to display that
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
146 ;; sequence properly. The basic strategy is:
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
147 ;;
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
148 ;; (1) If there's single diacritical, add padding space to the left
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
149 ;; and right of the glyph.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
150 ;;
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
151 ;; (2) If the font has OpenType features for Hebrew, ask the OTF
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
152 ;; driver the whole work.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
153 ;;
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
154 ;; (3) If the font has precomposed glyphs, use them as far as
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
155 ;; possible. Adjust the remaining glyphs artificially.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
156
108762
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
157 (defun hebrew-shape-gstring (gstring)
109354
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
158 (let* ((font (lgstring-font gstring))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
159 (otf (font-get font :otf))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
160 (nchars (lgstring-char-len gstring))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
161 header nglyphs base-width glyph precomposed val idx)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
162 (cond
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
163 ((= nchars 1)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
164 ;; Independent diacritical mark. Add padding space to left or
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
165 ;; right so that the glyph doesn't overlap with the surrounding
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
166 ;; chars.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
167 (setq glyph (lgstring-glyph gstring 0))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
168 (let ((width (lglyph-width glyph))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
169 bearing)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
170 (if (< (setq bearing (lglyph-lbearing glyph)) 0)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
171 (lglyph-set-adjustment glyph bearing 0 (- width bearing)))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
172 (if (> (setq bearing (lglyph-rbearing glyph)) width)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
173 (lglyph-set-adjustment glyph 0 0 bearing))))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
174
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
175 ((or (assq 'hebr (car otf)) (assq 'hebr (cdr otf)))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
176 ;; FONT has OpenType features for Hebrew.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
177 (font-shape-gstring gstring))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
178
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
179 (t
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
180 ;; FONT doesn't have OpenType features for Hebrew.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
181 ;; Try a precomposed glyph.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
182 ;; Now GSTRING is in this form:
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
183 ;; [[FONT CHAR1 CHAR2 ... CHARn] nil GLYPH1 GLYPH2 ... GLYPHn nil ...]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
184 (setq precomposed (hebrew-font-get-precomposed font)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
185 header (lgstring-header gstring)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
186 val (lookup-nested-alist header precomposed nil 1))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
187 (if (and (consp val) (vectorp (car val)))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
188 ;; All characters can be displayed by a single precomposed glyph.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
189 ;; Reform GSTRING to [HEADER nil PRECOMPOSED-GLYPH nil ...]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
190 (let ((glyph (copy-sequence (car val))))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
191 (lglyph-set-from-to glyph 0 (1- nchars))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
192 (lgstring-set-glyph gstring 0 glyph)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
193 (lgstring-set-glyph gstring 1 nil))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
194 (if (and (integerp val) (> val 2)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
195 (setq glyph (lookup-nested-alist header precomposed val 1))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
196 (consp glyph) (vectorp (car glyph)))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
197 ;; The first (1- VAL) characters can be displayed by a
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
198 ;; precomposed glyph. Provided that VAL is 3, the first
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
199 ;; two glyphs should be replaced by the precomposed glyph.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
200 ;; In that case, reform GSTRING to:
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
201 ;; [HEADER nil PRECOMPOSED-GLYPH GLYPH3 ... GLYPHn nil ...]
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
202 (let* ((ncmp (1- val)) ; number of composed glyphs
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
203 (diff (1- ncmp))) ; number of reduced glyphs
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
204 (setq glyph (copy-sequence (car glyph)))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
205 (lglyph-set-from-to glyph 0 (1- nchars))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
206 (lgstring-set-glyph gstring 0 glyph)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
207 (setq idx ncmp)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
208 (while (< idx nchars)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
209 (setq glyph (lgstring-glyph gstring idx))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
210 (lglyph-set-from-to glyph 0 (1- nchars))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
211 (lgstring-set-glyph gstring (- idx diff) glyph)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
212 (setq idx (1+ idx)))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
213 (lgstring-set-glyph gstring (- idx diff) nil)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
214 (setq idx (- ncmp diff)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
215 nglyphs (- nchars diff)))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
216 (setq glyph (lgstring-glyph gstring 0))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
217 (lglyph-set-from-to glyph 0 (1- nchars))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
218 (setq idx 1 nglyphs nchars))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
219 ;; Now IDX is an index to the first non-precomposed glyph.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
220 ;; Adjust positions of the remaining glyphs artificially.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
221 (setq base-width (lglyph-width (lgstring-glyph gstring 0)))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
222 (while (< idx nglyphs)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
223 (setq glyph (lgstring-glyph gstring idx))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
224 (lglyph-set-from-to glyph 0 (1- nchars))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
225 (if (>= (lglyph-lbearing glyph) (lglyph-width glyph))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
226 ;; It seems that this glyph is designed to be rendered
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
227 ;; before the base glyph.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
228 (lglyph-set-adjustment glyph (- base-width) 0 0)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
229 (if (>= (lglyph-lbearing glyph) 0)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
230 ;; Align the horizontal center of this glyph to the
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
231 ;; horizontal center of the base glyph.
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
232 (let ((width (- (lglyph-rbearing glyph)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
233 (lglyph-lbearing glyph))))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
234 (lglyph-set-adjustment glyph
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
235 (- (/ (- base-width width) 2)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
236 (lglyph-lbearing glyph)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
237 base-width) 0 0))))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
238 (setq idx (1+ idx))))))
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
239 gstring))
108762
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
240
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
241 (let ((pattern1 "[\u05D0-\u05F2][\u0591-\u05BF\u05C1-\u05C5\u05C7]+")
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
242 (pattern2 "[\u05D0-\u05F2]\u200D[\u0591-\u05BF\u05C1-\u05C5\u05C7]+"))
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
243 (set-char-table-range
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
244 composition-function-table '(#x591 . #x5C7)
109354
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
245 (list (vector pattern2 3 'hebrew-shape-gstring)
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
246 (vector pattern2 2 'hebrew-shape-gstring)
108762
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
247 (vector pattern1 1 'hebrew-shape-gstring)
109354
09daf1538316 Improve Hebrew rendering.
Kenichi Handa <handa@etlken>
parents: 108801
diff changeset
248 [nil 0 hebrew-shape-gstring]))
108762
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
249 (set-char-table-range
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
250 composition-function-table #x5C0 nil)
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
251 (set-char-table-range
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
252 composition-function-table #x5C6 nil))
d3db77511b9e Add Hebrew shaper.
Kenichi Handa <handa@etlken>
parents: 108598
diff changeset
253
33778
6d966e8b4bbe Use provide.
Dave Love <fx@gnu.org>
parents: 29157
diff changeset
254 (provide 'hebrew)
6d966e8b4bbe Use provide.
Dave Love <fx@gnu.org>
parents: 29157
diff changeset
255
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
256 ;; arch-tag: 3ca04f32-3f1e-498e-af46-8267498ba5d9
18203
0745f30aec66 Adjusted for coding system name change.
Kenichi Handa <handa@m17n.org>
parents: 17993
diff changeset
257 ;;; hebrew.el ends here