Mercurial > emacs
annotate lisp/composite.el @ 110410:f2e111723c3a
Merge changes made in Gnus trunk.
Reimplement nnimap, and do tweaks to the rest of the code to support that.
* gnus-int.el (gnus-finish-retrieve-group-infos)
(gnus-retrieve-group-data-early): New functions.
* gnus-range.el (gnus-range-nconcat): New function.
* gnus-start.el (gnus-get-unread-articles): Support early retrieval of
data.
(gnus-read-active-for-groups): Support finishing the early retrieval of
data.
* gnus-sum.el (gnus-summary-move-article): Pass the move-to group name
if the move is internal, so that nnimap can do fast internal moves.
* gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for
nnimap usage.
* nnimap.el: Rewritten.
* nnmail.el (nnmail-inhibit-default-split-group): New internal variable
to allow the mail splitting to not return a default group. This is
useful for nnimap, which will leave unmatched mail in the inbox.
* utf7.el (utf7-encode): Autoload.
Implement shell connection.
* nnimap.el (nnimap-open-shell-stream): New function.
(nnimap-open-connection): Use it.
Get the number of lines by using BODYSTRUCTURE.
(nnimap-transform-headers): Get the number of lines in each message.
(nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the
number of lines.
Not all servers return UIDNEXT. Work past this problem.
Remove junk from end of file.
Fix typo in "bogus" section.
Make capabilties be case-insensitive.
Require cl when compiling.
Don't bug out if the LIST command doesn't have any parameters.
2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change)
* nnimap.el (nnimap-get-groups): Don't bug out if the LIST command
doesn't have any parameters.
(mm-text-html-renderer): Document gnus-article-html.
2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix)
* mm-decode.el (mm-text-html-renderer): Document gnus-article-html.
* dgnushack.el: Define netrc-credentials.
If the user doesn't have a /etc/services, supply some sensible port defaults.
Have `unseen-or-unread' select an unread unseen article first.
(nntp-open-server): Return whether the open was successful or not.
Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ).
Save result so that it doesn't say "failed" all the time.
Add ~/.authinfo to the default, since that's probably most useful for users.
Don't use the "finish" method when we're reading from the agent.
Add some more nnimap-relevant agent stuff to nnagent.el.
* nnimap.el (nnimap-with-process-buffer): Removed.
Revert one line that was changed by mistake in the last checkin.
(nnimap-open-connection): Don't error out when we can't make a connection
nnimap-related changes to avoid bugging out if we can't contact a server.
* gnus-start.el (gnus-get-unread-articles): Don't try to scan groups
from methods that are denied.
* nnimap.el (nnimap-possibly-change-group): Return nil if we can't log
in.
(nnimap-finish-retrieve-group-infos): Make sure we're not waiting for
nothing.
* gnus-sum.el (gnus-select-newsgroup): Indent.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Sat, 18 Sep 2010 10:02:19 +0000 |
parents | 619b4d494232 |
children | 515d80e174ba |
rev | line source |
---|---|
38414
67b464da13ec
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37232
diff
changeset
|
1 ;;; composite.el --- support character composition |
26880 | 2 |
79721 | 3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, |
106815 | 4 ;; 2008, 2009, 2010 |
67658 | 5 ;; National Institute of Advanced Industrial Science and Technology (AIST) |
6 ;; Registration Number H14PRO021 | |
26880 | 7 |
101080
af243a06900c
Comment (add an author based on ack.texi).
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
8 ;; Author: Kenichi HANDA <handa@etl.go.jp> |
af243a06900c
Comment (add an author based on ack.texi).
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
9 ;; (according to ack.texi) |
26880 | 10 ;; Keywords: mule, multilingual, character composition |
110015
280c8ae2476d
Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents:
108705
diff
changeset
|
11 ;; Package: emacs |
26880 | 12 |
13 ;; This file is part of GNU Emacs. | |
14 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92026
diff
changeset
|
15 ;; GNU Emacs is free software: you can redistribute it and/or modify |
26880 | 16 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92026
diff
changeset
|
17 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92026
diff
changeset
|
18 ;; (at your option) any later version. |
26880 | 19 |
20 ;; GNU Emacs is distributed in the hope that it will be useful, | |
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
23 ;; GNU General Public License for more details. | |
24 | |
25 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92026
diff
changeset
|
26 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
26880 | 27 |
38414
67b464da13ec
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37232
diff
changeset
|
28 ;;; Commentary: |
67b464da13ec
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37232
diff
changeset
|
29 |
26880 | 30 ;;; Code: |
31 | |
108705
f7d37c2787ad
* composite.el: Require cl when compiling; fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
108686
diff
changeset
|
32 (eval-when-compile (require 'cl)) |
f7d37c2787ad
* composite.el: Require cl when compiling; fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
108686
diff
changeset
|
33 |
26880 | 34 (defconst reference-point-alist |
35 '((tl . 0) (tc . 1) (tr . 2) | |
36 (Bl . 3) (Bc . 4) (Br . 5) | |
37 (bl . 6) (bc . 7) (br . 8) | |
38 (cl . 9) (cc . 10) (cr . 11) | |
39 (top-left . 0) (top-center . 1) (top-right . 2) | |
40 (base-left . 3) (base-center . 4) (base-right . 5) | |
41 (bottom-left . 6) (bottom-center . 7) (bottom-right . 8) | |
42 (center-left . 9) (center-center . 10) (center-right . 11) | |
43 ;; For backward compatibility... | |
44 (ml . 3) (mc . 10) (mr . 5) | |
45 (mid-left . 3) (mid-center . 10) (mid-right . 5)) | |
46 "Alist of symbols vs integer codes of glyph reference points. | |
47 A glyph reference point symbol is to be used to specify a composition | |
89497 | 48 rule in COMPONENTS argument to such functions as `compose-region'. |
26880 | 49 |
108174
2c1e291a5e1c
Fix typos in doc strings of composite.el.
Eli Zaretskii <eliz@gnu.org>
parents:
108106
diff
changeset
|
50 The meaning of glyph reference point codes is as follows: |
26880 | 51 |
52 0----1----2 <---- ascent 0:tl or top-left | |
53 | | 1:tc or top-center | |
54 | | 2:tr or top-right | |
55 | | 3:Bl or base-left 9:cl or center-left | |
56 9 10 11 <---- center 4:Bc or base-center 10:cc or center-center | |
57 | | 5:Br or base-right 11:cr or center-right | |
58 --3----4----5-- <-- baseline 6:bl or bottom-left | |
59 | | 7:bc or bottom-center | |
60 6----7----8 <---- descent 8:br or bottom-right | |
61 | |
62 Glyph reference point symbols are to be used to specify composition | |
63 rule of the form \(GLOBAL-REF-POINT . NEW-REF-POINT), where | |
64 GLOBAL-REF-POINT is a reference point in the overall glyphs already | |
65 composed, and NEW-REF-POINT is a reference point in the new glyph to | |
66 be added. | |
67 | |
68 For instance, if GLOBAL-REF-POINT is `br' (bottom-right) and | |
37232
cebd635be09b
(reference-point-alist): Doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35075
diff
changeset
|
69 NEW-REF-POINT is `tc' (top-center), the overall glyph is updated as |
26880 | 70 follows (the point `*' corresponds to both reference points): |
71 | |
72 +-------+--+ <--- new ascent | |
73 | | | | |
74 | global| | | |
75 | glyph | | | |
76 -- | | |-- <--- baseline \(doesn't change) | |
77 +----+--*--+ | |
78 | | new | | |
79 | |glyph| | |
80 +----+-----+ <--- new descent | |
89722
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
81 |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
82 A composition rule may have the form \(GLOBAL-REF-POINT |
108705
f7d37c2787ad
* composite.el: Require cl when compiling; fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
108686
diff
changeset
|
83 NEW-REF-POINT XOFF YOFF), where XOFF and YOFF specify how much |
89722
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
84 to shift NEW-REF-POINT from GLOBAL-REF-POINT. In this case, XOFF |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
85 and YOFF are integers in the range -100..100 representing the |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
86 shifting percentage against the font size.") |
26880 | 87 |
88 | |
56985
5eac7cd6d213
(encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents:
54433
diff
changeset
|
89 ;;;###autoload |
26880 | 90 (defun encode-composition-rule (rule) |
56985
5eac7cd6d213
(encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents:
54433
diff
changeset
|
91 "Encode composition rule RULE into an integer value. |
5eac7cd6d213
(encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents:
54433
diff
changeset
|
92 RULE is a cons of global and new reference point symbols |
64530
87bf9c446836
(compose-string, encode-composition-rule, compose-last-chars):
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
93 \(see `reference-point-alist')." |
56985
5eac7cd6d213
(encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents:
54433
diff
changeset
|
94 |
5eac7cd6d213
(encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents:
54433
diff
changeset
|
95 ;; This must be compatible with C macro COMPOSITION_ENCODE_RULE |
5eac7cd6d213
(encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents:
54433
diff
changeset
|
96 ;; defined in composite.h. |
5eac7cd6d213
(encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents:
54433
diff
changeset
|
97 |
26880 | 98 (if (and (integerp rule) (< rule 144)) |
99 ;; Already encoded. | |
100 rule | |
89722
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
101 (if (consp rule) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
102 (let ((gref (car rule)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
103 (nref (cdr rule)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
104 xoff yoff) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
105 (if (consp nref) ; (GREF NREF XOFF YOFF) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
106 (progn |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
107 (setq xoff (nth 1 nref) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
108 yoff (nth 2 nref) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
109 nref (car nref)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
110 (or (and (>= xoff -100) (<= xoff 100) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
111 (>= yoff -100) (<= yoff 100)) |
92026
4ad14ee0d40a
(encode-composition-rule): Fix typo in error message.
Glenn Morris <rgm@gnu.org>
parents:
92000
diff
changeset
|
112 (error "Invalid composition rule: %s" rule)) |
89722
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
113 (setq xoff (+ xoff 128) yoff (+ yoff 128))) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
114 ;; (GREF . NREF) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
115 (setq xoff 0 yoff 0)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
116 (or (integerp gref) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
117 (setq gref (cdr (assq gref reference-point-alist)))) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
118 (or (integerp nref) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
119 (setq nref (cdr (assq nref reference-point-alist)))) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
120 (or (and (>= gref 0) (< gref 12) (>= nref 0) (< nref 12)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
121 (error "Invalid composition rule: %S" rule)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
122 (logior (lsh xoff 16) (lsh yoff 8) (+ (* gref 12) nref))) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
123 (error "Invalid composition rule: %S" rule)))) |
26880 | 124 |
125 ;; Decode encoded composition rule RULE-CODE. The value is a cons of | |
126 ;; global and new reference point symbols. | |
127 ;; This must be compatible with C macro COMPOSITION_DECODE_RULE | |
128 ;; defined in composite.h. | |
129 | |
130 (defun decode-composition-rule (rule-code) | |
89722
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
131 (or (and (natnump rule-code) (< rule-code #x1000000)) |
26880 | 132 (error "Invalid encoded composition rule: %S" rule-code)) |
89722
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
133 (let ((xoff (lsh rule-code -16)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
134 (yoff (logand (lsh rule-code -8) #xFF)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
135 gref nref) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
136 (setq rule-code (logand rule-code #xFF) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
137 gref (car (rassq (/ rule-code 12) reference-point-alist)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
138 nref (car (rassq (% rule-code 12) reference-point-alist))) |
26880 | 139 (or (and gref (symbolp gref) nref (symbolp nref)) |
140 (error "Invalid composition rule code: %S" rule-code)) | |
89722
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
141 (if (and (= xoff 0) (= yoff 0)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
142 (cons gref nref) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
143 (setq xoff (- xoff 128) yoff (- yoff 128)) |
eee9d99444cc
(reference-point-alist): Doc fixed.
Kenichi Handa <handa@m17n.org>
parents:
89664
diff
changeset
|
144 (list gref xoff yoff nref)))) |
26880 | 145 |
146 ;; Encode composition rules in composition components COMPONENTS. The | |
147 ;; value is a copy of COMPONENTS, where composition rules (cons of | |
148 ;; global and new glyph reference point symbols) are replaced with | |
149 ;; encoded composition rules. Optional 2nd argument NOCOPY non-nil | |
150 ;; means don't make a copy but modify COMPONENTS directly. | |
151 | |
152 (defun encode-composition-components (components &optional nocopy) | |
153 (or nocopy | |
154 (setq components (copy-sequence components))) | |
155 (if (vectorp components) | |
156 (let ((len (length components)) | |
157 (i 1)) | |
158 (while (< i len) | |
159 (aset components i | |
160 (encode-composition-rule (aref components i))) | |
161 (setq i (+ i 2)))) | |
162 (let ((tail (cdr components))) | |
163 (while tail | |
164 (setcar tail | |
165 (encode-composition-rule (car tail))) | |
166 (setq tail (nthcdr 2 tail))))) | |
167 components) | |
168 | |
169 ;; Decode composition rule codes in composition components COMPONENTS. | |
170 ;; The value is a copy of COMPONENTS, where composition rule codes are | |
171 ;; replaced with composition rules (cons of global and new glyph | |
172 ;; reference point symbols). Optional 2nd argument NOCOPY non-nil | |
173 ;; means don't make a copy but modify COMPONENTS directly. | |
174 ;; It is assumed that COMPONENTS is a vector and is for rule-base | |
175 ;; composition, thus (2N+1)th elements are rule codes. | |
176 | |
177 (defun decode-composition-components (components &optional nocopy) | |
178 (or nocopy | |
179 (setq components (copy-sequence components))) | |
180 (let ((len (length components)) | |
181 (i 1)) | |
182 (while (< i len) | |
183 (aset components i | |
184 (decode-composition-rule (aref components i))) | |
185 (setq i (+ i 2)))) | |
186 components) | |
187 | |
188 (defun compose-region (start end &optional components modification-func) | |
189 "Compose characters in the current region. | |
190 | |
103436
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
191 Characters are composed relatively, i.e. composed by overstriking |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
192 or stacking depending on ascent, descent and other metrics of |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
193 glyphs. |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
194 |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
195 For instance, if the region has three characters \"XYZ\", X is |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
196 regarded as BASE glyph, and Y is displayed: |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
197 (1) above BASE if Y's descent value is not positive |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
198 (2) below BASE if Y's ascent value is not positive |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
199 (3) on BASE (i.e. at the BASE position) otherwise |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
200 and Z is displayed with the same rule while regarding the whole |
850fd8c37942
(compose-region): Improve the docstring.
Kenichi Handa <handa@m17n.org>
parents:
103367
diff
changeset
|
201 XY glyphs as BASE. |
46963 | 202 |
26880 | 203 When called from a program, expects these four arguments. |
204 | |
205 First two arguments START and END are positions (integers or markers) | |
206 specifying the region. | |
207 | |
89497 | 208 Optional 3rd argument COMPONENTS, if non-nil, is a character, a string |
209 or a vector or list of integers and rules. | |
26880 | 210 |
211 If it is a character, it is an alternate character to display instead | |
212 of the text in the region. | |
213 | |
96418
3dff73218ec3
(compose-region): Mention the special handling of TAB.
Kenichi Handa <handa@m17n.org>
parents:
96324
diff
changeset
|
214 If it is a string, the elements are alternate characters. In |
3dff73218ec3
(compose-region): Mention the special handling of TAB.
Kenichi Handa <handa@m17n.org>
parents:
96324
diff
changeset
|
215 this case, TAB element has a special meaning. If the first |
3dff73218ec3
(compose-region): Mention the special handling of TAB.
Kenichi Handa <handa@m17n.org>
parents:
96324
diff
changeset
|
216 characer is TAB, the glyphs are displayed with left padding space |
3dff73218ec3
(compose-region): Mention the special handling of TAB.
Kenichi Handa <handa@m17n.org>
parents:
96324
diff
changeset
|
217 so that no pixel overlaps with the previous column. If the last |
108174
2c1e291a5e1c
Fix typos in doc strings of composite.el.
Eli Zaretskii <eliz@gnu.org>
parents:
108106
diff
changeset
|
218 character is TAB, the glyphs are displayed with right padding |
96418
3dff73218ec3
(compose-region): Mention the special handling of TAB.
Kenichi Handa <handa@m17n.org>
parents:
96324
diff
changeset
|
219 space so that no pixel overlaps with the following column. |
26880 | 220 |
221 If it is a vector or list, it is a sequence of alternate characters and | |
222 composition rules, where (2N)th elements are characters and (2N+1)th | |
223 elements are composition rules to specify how to compose (2N+2)th | |
224 elements with previously composed N glyphs. | |
225 | |
226 A composition rule is a cons of global and new glyph reference point | |
227 symbols. See the documentation of `reference-point-alist' for more | |
108174
2c1e291a5e1c
Fix typos in doc strings of composite.el.
Eli Zaretskii <eliz@gnu.org>
parents:
108106
diff
changeset
|
228 details. |
26880 | 229 |
230 Optional 4th argument MODIFICATION-FUNC is a function to call to | |
231 adjust the composition when it gets invalid because of a change of | |
232 text in the composition." | |
233 (interactive "r") | |
234 (let ((modified-p (buffer-modified-p)) | |
81073
12cb550b10e4
(compose-region, decompose-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75347
diff
changeset
|
235 (inhibit-read-only t)) |
26880 | 236 (if (or (vectorp components) (listp components)) |
237 (setq components (encode-composition-components components))) | |
238 (compose-region-internal start end components modification-func) | |
54433
a5520bf073bb
(compose-region): Use restore-buffer-modified-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
239 (restore-buffer-modified-p modified-p))) |
26880 | 240 |
241 (defun decompose-region (start end) | |
242 "Decompose text in the current region. | |
243 | |
244 When called from a program, expects two arguments, | |
245 positions (integers or markers) specifying the region." | |
246 (interactive "r") | |
247 (let ((modified-p (buffer-modified-p)) | |
81073
12cb550b10e4
(compose-region, decompose-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75347
diff
changeset
|
248 (inhibit-read-only t)) |
26880 | 249 (remove-text-properties start end '(composition nil)) |
81073
12cb550b10e4
(compose-region, decompose-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75347
diff
changeset
|
250 (restore-buffer-modified-p modified-p))) |
26880 | 251 |
252 (defun compose-string (string &optional start end components modification-func) | |
253 "Compose characters in string STRING. | |
254 | |
88808 | 255 The return value is STRING with the `composition' property put on all |
26880 | 256 the characters in it. |
257 | |
258 Optional 2nd and 3rd arguments START and END specify the range of | |
64530
87bf9c446836
(compose-string, encode-composition-rule, compose-last-chars):
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
259 STRING to be composed. They default to the beginning and the end of |
26880 | 260 STRING respectively. |
261 | |
262 Optional 4th argument COMPONENTS, if non-nil, is a character or a | |
263 sequence (vector, list, or string) of integers. See the function | |
264 `compose-region' for more detail. | |
265 | |
266 Optional 5th argument MODIFICATION-FUNC is a function to call to | |
267 adjust the composition when it gets invalid because of a change of | |
268 text in the composition." | |
269 (if (or (vectorp components) (listp components)) | |
270 (setq components (encode-composition-components components))) | |
271 (or start (setq start 0)) | |
272 (or end (setq end (length string))) | |
273 (compose-string-internal string start end components modification-func) | |
274 string) | |
275 | |
276 (defun decompose-string (string) | |
277 "Return STRING where `composition' property is removed." | |
278 (remove-text-properties 0 (length string) '(composition nil) string) | |
279 string) | |
280 | |
281 (defun compose-chars (&rest args) | |
282 "Return a string from arguments in which all characters are composed. | |
283 For relative composition, arguments are characters. | |
284 For rule-based composition, Mth \(where M is odd) arguments are | |
285 characters, and Nth \(where N is even) arguments are composition rules. | |
286 A composition rule is a cons of glyph reference points of the form | |
287 \(GLOBAL-REF-POINT . NEW-REF-POINT). See the documentation of | |
288 `reference-point-alist' for more detail." | |
289 (let (str components) | |
290 (if (consp (car (cdr args))) | |
291 ;; Rule-base composition. | |
292 (let ((len (length args)) | |
293 (tail (encode-composition-components args 'nocopy))) | |
294 | |
295 (while tail | |
296 (setq str (cons (car tail) str)) | |
297 (setq tail (nthcdr 2 tail))) | |
298 (setq str (concat (nreverse str)) | |
299 components args)) | |
300 ;; Relative composition. | |
301 (setq str (concat args))) | |
302 (compose-string-internal str 0 (length str) components))) | |
303 | |
304 (defun find-composition (pos &optional limit string detail-p) | |
108106
823c35a2846d
composite.el (find-composition): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
106822
diff
changeset
|
305 "Return information about a composition at or near buffer position POS. |
26880 | 306 |
307 If the character at POS has `composition' property, the value is a list | |
108106
823c35a2846d
composite.el (find-composition): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
106822
diff
changeset
|
308 \(FROM TO VALID-P). |
26880 | 309 |
310 FROM and TO specify the range of text that has the same `composition' | |
97985
26069577e76b
(find-composition): Mention about the automatic
Kenichi Handa <handa@m17n.org>
parents:
97836
diff
changeset
|
311 property, VALID-P is t if this composition is valid, and nil if not. |
26880 | 312 |
313 If there's no composition at POS, and the optional 2nd argument LIMIT | |
108106
823c35a2846d
composite.el (find-composition): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
106822
diff
changeset
|
314 is non-nil, search for a composition toward the position given by LIMIT. |
26880 | 315 |
316 If no composition is found, return nil. | |
317 | |
318 Optional 3rd argument STRING, if non-nil, is a string to look for a | |
319 composition in; nil means the current buffer. | |
320 | |
321 If a valid composition is found and the optional 4th argument DETAIL-P | |
108106
823c35a2846d
composite.el (find-composition): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
106822
diff
changeset
|
322 is non-nil, the return value is a list of the form |
823c35a2846d
composite.el (find-composition): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
106822
diff
changeset
|
323 |
823c35a2846d
composite.el (find-composition): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
106822
diff
changeset
|
324 (FROM TO COMPONENTS RELATIVE-P MOD-FUNC WIDTH) |
26880 | 325 |
326 COMPONENTS is a vector of integers, the meaning depends on RELATIVE-P. | |
327 | |
328 RELATIVE-P is t if the composition method is relative, else nil. | |
329 | |
330 If RELATIVE-P is t, COMPONENTS is a vector of characters to be | |
331 composed. If RELATIVE-P is nil, COMPONENTS is a vector of characters | |
332 and composition rules as described in `compose-region'. | |
333 | |
334 MOD-FUNC is a modification function of the composition. | |
335 | |
97985
26069577e76b
(find-composition): Mention about the automatic
Kenichi Handa <handa@m17n.org>
parents:
97836
diff
changeset
|
336 WIDTH is a number of columns the composition occupies on the screen. |
26069577e76b
(find-composition): Mention about the automatic
Kenichi Handa <handa@m17n.org>
parents:
97836
diff
changeset
|
337 |
108203
877cada981cc
composite.el (find-composition): Fix a typo in the doc string.
Eli Zaretskii <eliz@gnu.org>
parents:
108174
diff
changeset
|
338 When Automatic Composition mode is on, this function also finds a |
97985
26069577e76b
(find-composition): Mention about the automatic
Kenichi Handa <handa@m17n.org>
parents:
97836
diff
changeset
|
339 chunk of text that is automatically composed. If such a chunk is |
26069577e76b
(find-composition): Mention about the automatic
Kenichi Handa <handa@m17n.org>
parents:
97836
diff
changeset
|
340 found closer to POS than the position that has `composition' |
108106
823c35a2846d
composite.el (find-composition): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
106822
diff
changeset
|
341 property, the value is a list of FROM, TO, and a glyph-string |
823c35a2846d
composite.el (find-composition): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
106822
diff
changeset
|
342 that specifies how the chunk is to be composed. See the function |
823c35a2846d
composite.el (find-composition): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
106822
diff
changeset
|
343 `composition-get-gstring' for the format of the glyph-string." |
26880 | 344 (let ((result (find-composition-internal pos limit string detail-p))) |
97985
26069577e76b
(find-composition): Mention about the automatic
Kenichi Handa <handa@m17n.org>
parents:
97836
diff
changeset
|
345 (if (and detail-p (> (length result) 3) (nth 2 result) (not (nth 3 result))) |
26880 | 346 ;; This is a valid rule-base composition. |
347 (decode-composition-components (nth 2 result) 'nocopy)) | |
348 result)) | |
349 | |
350 | |
33244
59edd748e69a
(composition-function-table): Variable declaration
Kenichi Handa <handa@m17n.org>
parents:
30485
diff
changeset
|
351 (defun compose-chars-after (pos &optional limit object) |
26880 | 352 "Compose characters in current buffer after position POS. |
353 | |
92000
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
354 It looks up the char-table `composition-function-table' (which |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
355 see) by a character at POS, and compose characters after POS |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
356 according to the contents of `composition-function-table'. |
26880 | 357 |
92000
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
358 Optional 2nd arg LIMIT, if non-nil, limits characters to compose. |
26880 | 359 |
33244
59edd748e69a
(composition-function-table): Variable declaration
Kenichi Handa <handa@m17n.org>
parents:
30485
diff
changeset
|
360 Optional 3rd arg OBJECT, if non-nil, is a string that contains the |
89497 | 361 text to compose. In that case, POS and LIMIT index into the string. |
33244
59edd748e69a
(composition-function-table): Variable declaration
Kenichi Handa <handa@m17n.org>
parents:
30485
diff
changeset
|
362 |
26880 | 363 This function is the default value of `compose-chars-after-function'." |
364 (let ((tail (aref composition-function-table (char-after pos))) | |
92000
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
365 (font-obj (and (display-multi-font-p) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
366 (and (not (stringp object)) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
367 (font-at pos (selected-window))))) |
26880 | 368 pattern func result) |
92000
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
369 (or limit |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
370 (setq limit (if (stringp object) (length object) (point-max)))) |
94955
e22dd2392947
(compose-chars-after): Assume that WINDOW is always non-nil.
Kenichi Handa <handa@m17n.org>
parents:
94734
diff
changeset
|
371 (when (and font-obj tail) |
30485
5551289a9329
(compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents:
29551
diff
changeset
|
372 (save-match-data |
5551289a9329
(compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents:
29551
diff
changeset
|
373 (save-excursion |
92000
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
374 (while tail |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
375 (if (functionp (car tail)) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
376 (setq pattern nil func (car tail)) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
377 (setq pattern (car (car tail)) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
378 func (cdr (car tail)))) |
30485
5551289a9329
(compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents:
29551
diff
changeset
|
379 (goto-char pos) |
92000
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
380 (if pattern |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
381 (if (and (if (stringp object) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
382 (eq (string-match pattern object) 0) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
383 (looking-at pattern)) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
384 (<= (match-end 0) limit)) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
385 (setq result |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
386 (funcall func pos (match-end 0) font-obj object))) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
387 (setq result (funcall func pos limit font-obj object))) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
388 (if result (setq tail nil)))))) |
501d20267e59
(compose-chars-after): Fix arguments for a function
Kenichi Handa <handa@m17n.org>
parents:
91861
diff
changeset
|
389 result)) |
26880 | 390 |
391 (defun compose-last-chars (args) | |
392 "Compose last characters. | |
35075
f49c90fa95d7
(compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents:
33244
diff
changeset
|
393 The argument is a parameterized event of the form |
f49c90fa95d7
(compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents:
33244
diff
changeset
|
394 \(compose-last-chars N COMPONENTS), |
f49c90fa95d7
(compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents:
33244
diff
changeset
|
395 where N is the number of characters before point to compose, |
f49c90fa95d7
(compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents:
33244
diff
changeset
|
396 COMPONENTS, if non-nil, is the same as the argument to `compose-region' |
f49c90fa95d7
(compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents:
33244
diff
changeset
|
397 \(which see). If it is nil, `compose-chars-after' is called, |
64530
87bf9c446836
(compose-string, encode-composition-rule, compose-last-chars):
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
398 and that function finds a proper rule to compose the target characters. |
26880 | 399 This function is intended to be used from input methods. |
400 The global keymap binds special event `compose-last-chars' to this | |
35075
f49c90fa95d7
(compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents:
33244
diff
changeset
|
401 function. Input method may generate an event (compose-last-chars N COMPONENTS) |
64530
87bf9c446836
(compose-string, encode-composition-rule, compose-last-chars):
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
402 after a sequence of character events." |
26880 | 403 (interactive "e") |
404 (let ((chars (nth 1 args))) | |
405 (if (and (numberp chars) | |
406 (>= (- (point) (point-min)) chars)) | |
35075
f49c90fa95d7
(compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents:
33244
diff
changeset
|
407 (if (nth 2 args) |
f49c90fa95d7
(compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents:
33244
diff
changeset
|
408 (compose-region (- (point) chars) (point) (nth 2 args)) |
f49c90fa95d7
(compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents:
33244
diff
changeset
|
409 (compose-chars-after (- (point) chars) (point)))))) |
26880 | 410 |
89290
adbc95471ef8
Remove all autoload cookies.
Kenichi Handa <handa@m17n.org>
parents:
88808
diff
changeset
|
411 (global-set-key [compose-last-chars] 'compose-last-chars) |
adbc95471ef8
Remove all autoload cookies.
Kenichi Handa <handa@m17n.org>
parents:
88808
diff
changeset
|
412 |
adbc95471ef8
Remove all autoload cookies.
Kenichi Handa <handa@m17n.org>
parents:
88808
diff
changeset
|
413 |
adbc95471ef8
Remove all autoload cookies.
Kenichi Handa <handa@m17n.org>
parents:
88808
diff
changeset
|
414 ;;; Automatic character composition. |
adbc95471ef8
Remove all autoload cookies.
Kenichi Handa <handa@m17n.org>
parents:
88808
diff
changeset
|
415 |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
416 ;; These macros must match with C macros LGSTRING_XXX and LGLYPH_XXX in font.h |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
417 (defsubst lgstring-header (gstring) (aref gstring 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
418 (defsubst lgstring-set-header (gstring header) (aset gstring 0 header)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
419 (defsubst lgstring-font (gstring) (aref (lgstring-header gstring) 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
420 (defsubst lgstring-char (gstring i) (aref (lgstring-header gstring) (1+ i))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
421 (defsubst lgstring-char-len (gstring) (1- (length (lgstring-header gstring)))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
422 (defsubst lgstring-shaped-p (gstring) (aref gstring 1)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
423 (defsubst lgstring-set-id (gstring id) (aset gstring 1 id)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
424 (defsubst lgstring-glyph (gstring i) (aref gstring (+ i 2))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
425 (defsubst lgstring-glyph-len (gstring) (- (length gstring) 2)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
426 (defsubst lgstring-set-glyph (gstring i glyph) (aset gstring (+ i 2) glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
427 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
428 (defsubst lglyph-from (glyph) (aref glyph 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
429 (defsubst lglyph-to (glyph) (aref glyph 1)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
430 (defsubst lglyph-char (glyph) (aref glyph 2)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
431 (defsubst lglyph-code (glyph) (aref glyph 3)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
432 (defsubst lglyph-width (glyph) (aref glyph 4)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
433 (defsubst lglyph-lbearing (glyph) (aref glyph 5)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
434 (defsubst lglyph-rbearing (glyph) (aref glyph 6)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
435 (defsubst lglyph-ascent (glyph) (aref glyph 7)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
436 (defsubst lglyph-descent (glyph) (aref glyph 8)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
437 (defsubst lglyph-adjustment (glyph) (aref glyph 9)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
438 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
439 (defsubst lglyph-set-from-to (glyph from to) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
440 (progn (aset glyph 0 from) (aset glyph 1 to))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
441 (defsubst lglyph-set-char (glyph char) (aset glyph 2 char)) |
100788
79c848cc0c06
(lglyph-set-code): New function.
Kenichi Handa <handa@m17n.org>
parents:
98122
diff
changeset
|
442 (defsubst lglyph-set-code (glyph code) (aset glyph 3 code)) |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
443 (defsubst lglyph-set-width (glyph width) (aset glyph 4 width)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
444 (defsubst lglyph-set-adjustment (glyph &optional xoff yoff wadjust) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
445 (aset glyph 9 (vector (or xoff 0) (or yoff 0) (or wadjust 0)))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
446 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
447 (defsubst lglyph-copy (glyph) (copy-sequence glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
448 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
449 (defun lgstring-insert-glyph (gstring idx glyph) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
450 (let ((nglyphs (lgstring-glyph-len gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
451 (i idx) g) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
452 (while (and (< i nglyphs) (setq g (lgstring-glyph gstring i))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
453 (setq i (1+ i))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
454 (if (= i nglyphs) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
455 (setq gstring (vconcat gstring (vector glyph))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
456 (if (< (1+ i) nglyphs) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
457 (lgstring-set-glyph gstring (1+ i) nil))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
458 (while (> i idx) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
459 (lgstring-set-glyph gstring i (lgstring-glyph gstring (1- i))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
460 (setq i (1- i))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
461 (lgstring-set-glyph gstring i glyph) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
462 gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
463 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
464 (defun compose-glyph-string (gstring from to) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
465 (let ((glyph (lgstring-glyph gstring from)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
466 from-pos to-pos |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
467 ascent descent lbearing rbearing) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
468 (setq from-pos (lglyph-from glyph) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
469 to-pos (lglyph-to (lgstring-glyph gstring (1- to)))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
470 (lglyph-set-from-to glyph from-pos to-pos) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
471 (setq from (1+ from)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
472 (while (and (< from to) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
473 (setq glyph (lgstring-glyph gstring from))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
474 (lglyph-set-from-to glyph from-pos to-pos) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
475 (let ((xoff (if (<= (lglyph-rbearing glyph) 0) 0 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
476 (- (lglyph-width glyph))))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
477 (lglyph-set-adjustment glyph xoff 0 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
478 (setq from (1+ from))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
479 gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
480 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
481 (defun compose-glyph-string-relative (gstring from to &optional gap) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
482 (let ((font-object (lgstring-font gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
483 (glyph (lgstring-glyph gstring from)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
484 from-pos to-pos |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
485 ascent descent lbearing rbearing) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
486 (if gap |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
487 (setq gap (floor (* (font-get font-object :size) gap))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
488 (setq gap 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
489 (setq from-pos (lglyph-from glyph) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
490 to-pos (lglyph-to (lgstring-glyph gstring (1- to))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
491 ascent (lglyph-ascent glyph) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
492 descent (lglyph-descent glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
493 (lglyph-set-from-to glyph from-pos to-pos) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
494 (setq from (1+ from)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
495 (while (< from to) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
496 (setq glyph (lgstring-glyph gstring from)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
497 (lglyph-set-from-to glyph from-pos to-pos) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
498 (let ((this-ascent (lglyph-ascent glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
499 (this-descent (lglyph-descent glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
500 xoff yoff wadjust) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
501 (setq xoff (if (<= (lglyph-rbearing glyph) 0) 0 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
502 (- (lglyph-width glyph)))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
503 (if (> this-ascent 0) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
504 (if (< this-descent 0) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
505 (setq yoff (- 0 ascent gap this-descent) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
506 ascent (+ ascent gap this-ascent this-descent)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
507 (setq yoff 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
508 (setq yoff (+ descent gap this-ascent) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
509 descent (+ descent gap this-ascent this-descent))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
510 (if (or (/= xoff 0) (/= yoff 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
511 (lglyph-set-adjustment glyph xoff yoff 0))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
512 (setq from (1+ from))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
513 gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
514 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
515 (defun compose-gstring-for-graphic (gstring) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
516 "Compose glyph-string GSTRING for graphic display. |
108686
50557bcb79ad
composite.el: Register compose-gstring-for-graphic in composition-function-table only for combining characters (Mn, Mc, Me).
Kenichi Handa <handa@etlken>
parents:
108241
diff
changeset
|
517 Combining characters are composed with the preceding base |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
518 character. If the preceding character is not a base character, |
108686
50557bcb79ad
composite.el: Register compose-gstring-for-graphic in composition-function-table only for combining characters (Mn, Mc, Me).
Kenichi Handa <handa@etlken>
parents:
108241
diff
changeset
|
519 each combining character is composed as a spacing character by |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
520 a padding space before and/or after the character. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
521 |
108705
f7d37c2787ad
* composite.el: Require cl when compiling; fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
108686
diff
changeset
|
522 All non-spacing characters have this function in |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
523 `composition-function-table' unless overwritten." |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
524 (let* ((header (lgstring-header gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
525 (nchars (lgstring-char-len gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
526 (nglyphs (lgstring-glyph-len gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
527 (glyph (lgstring-glyph gstring 0))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
528 (cond |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
529 ;; A non-spacing character not following a proper base character. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
530 ((= nchars 1) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
531 (let ((lbearing (lglyph-lbearing glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
532 (rbearing (lglyph-rbearing glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
533 (width (lglyph-width glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
534 xoff wadjust) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
535 (if (< lbearing 0) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
536 (setq xoff (- lbearing)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
537 (setq xoff 0 lbearing 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
538 (if (< rbearing width) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
539 (setq rbearing width)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
540 (lglyph-set-adjustment glyph xoff 0 (- rbearing lbearing)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
541 gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
542 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
543 ;; This sequence doesn't start with a proper base character. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
544 ((memq (get-char-code-property (lgstring-char gstring 0) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
545 'general-category) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
546 '(Mn Mc Me Zs Zl Zp Cc Cf Cs)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
547 nil) |
96301
66839d3799fe
(terminal-composition-base-character-p): New
Kenichi Handa <handa@m17n.org>
parents:
94955
diff
changeset
|
548 |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
549 ;; A base character and the following non-spacing characters. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
550 (t |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
551 (let ((gstr (font-shape-gstring gstring))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
552 (if (and gstr |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
553 (> (lglyph-to (lgstring-glyph gstr 0)) 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
554 gstr |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
555 ;; The shaper of the font couldn't shape the gstring. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
556 ;; Shape them according to canonical-combining-class. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
557 (lgstring-set-id gstring nil) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
558 (let* ((width (lglyph-width glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
559 (ascent (lglyph-ascent glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
560 (descent (lglyph-descent glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
561 (rbearing (lglyph-rbearing glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
562 (lbearing (lglyph-lbearing glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
563 (center (/ (+ lbearing rbearing) 2)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
564 (gap (round (* (font-get (lgstring-font gstring) :size) 0.1))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
565 xoff yoff) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
566 (dotimes (i nchars) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
567 (setq glyph (lgstring-glyph gstring i)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
568 (when (> i 0) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
569 (let* ((class (get-char-code-property |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
570 (lglyph-char glyph) 'canonical-combining-class)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
571 (lb (lglyph-lbearing glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
572 (rb (lglyph-rbearing glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
573 (as (lglyph-ascent glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
574 (de (lglyph-descent glyph)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
575 (ce (/ (+ lb rb) 2)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
576 xoff yoff) |
98122
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
577 (when (and class (>= class 200) (<= class 240)) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
578 (setq xoff 0 yoff 0) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
579 (cond |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
580 ((= class 200) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
581 (setq xoff (- lbearing ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
582 yoff (if (> as 0) 0 (+ descent as)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
583 ((= class 202) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
584 (if (> as 0) (setq as 0)) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
585 (setq xoff (- center ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
586 yoff (if (> as 0) 0 (+ descent as)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
587 ((= class 204) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
588 (if (> as 0) (setq as 0)) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
589 (setq xoff (- rbearing ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
590 yoff (if (> as 0) 0 (+ descent as)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
591 ((= class 208) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
592 (setq xoff (- lbearing rb))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
593 ((= class 210) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
594 (setq xoff (- rbearing lb))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
595 ((= class 212) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
596 (setq xoff (- lbearing ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
597 yoff (if (>= de 0) 0 (- (- ascent) de)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
598 ((= class 214) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
599 (setq xoff (- center ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
600 yoff (if (>= de 0) 0 (- (- ascent) de)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
601 ((= class 216) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
602 (setq xoff (- rbearing ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
603 yoff (if (>= de 0) 0 (- (- ascent) de)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
604 ((= class 218) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
605 (setq xoff (- lbearing ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
606 yoff (if (> as 0) 0 (+ descent as gap)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
607 ((= class 220) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
608 (setq xoff (- center ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
609 yoff (if (> as 0) 0 (+ descent as gap)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
610 ((= class 222) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
611 (setq xoff (- rbearing ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
612 yoff (if (> as 0) 0 (+ descent as gap)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
613 ((= class 224) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
614 (setq xoff (- lbearing rb))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
615 ((= class 226) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
616 (setq xoff (- rbearing lb))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
617 ((= class 228) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
618 (setq xoff (- lbearing ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
619 yoff (if (>= de 0) 0 (- (- ascent) de gap)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
620 ((= class 230) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
621 (setq xoff (- center ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
622 yoff (if (>= de 0) 0 (- (- ascent) de gap)))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
623 ((= class 232) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
624 (setq xoff (- rbearing ce) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
625 yoff (if (>= de 0) 0 (- (+ ascent de) gap))))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
626 (lglyph-set-adjustment glyph (- xoff width) yoff) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
627 (setq lb (+ lb xoff) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
628 rb (+ lb xoff) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
629 as (- as yoff) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
630 de (+ de yoff))) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
631 (if (< ascent as) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
632 (setq ascent as)) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
633 (if (< descent de) |
e3d5c2e9ec89
(compose-gstring-for-graphic): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
98069
diff
changeset
|
634 (setq descent de)))))) |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
635 (let ((i 0)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
636 (while (and (< i nglyphs) (setq glyph (lgstring-glyph gstring i))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
637 (lglyph-set-from-to glyph 0 (1- nchars)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
638 (setq i (1+ i)))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
639 gstring)))))) |
90637
042336f13176
(terminal-composition-function): New function.
Kenichi Handa <handa@m17n.org>
parents:
90627
diff
changeset
|
640 |
105965
3f64b8380468
* textmodes/ispell.el (ispell-skip-region-alist):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104990
diff
changeset
|
641 (let ((elt `([,(purecopy "\\c.\\c^+") 1 compose-gstring-for-graphic] |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
642 [nil 0 compose-gstring-for-graphic]))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
643 (map-char-table |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
644 #'(lambda (key val) |
108686
50557bcb79ad
composite.el: Register compose-gstring-for-graphic in composition-function-table only for combining characters (Mn, Mc, Me).
Kenichi Handa <handa@etlken>
parents:
108241
diff
changeset
|
645 (if (memq val '(Mn Mc Me)) |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
646 (set-char-table-range composition-function-table key elt))) |
108686
50557bcb79ad
composite.el: Register compose-gstring-for-graphic in composition-function-table only for combining characters (Mn, Mc, Me).
Kenichi Handa <handa@etlken>
parents:
108241
diff
changeset
|
647 unicode-category-table)) |
90637
042336f13176
(terminal-composition-function): New function.
Kenichi Handa <handa@m17n.org>
parents:
90627
diff
changeset
|
648 |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
649 (defun compose-gstring-for-terminal (gstring) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
650 "Compose glyph string GSTRING for terminal display. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
651 Non-spacing characters are composed with the preceding base |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
652 character. If the preceding character is not a base character, |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
653 each non-spacing character is composed as a spacing character by |
108705
f7d37c2787ad
* composite.el: Require cl when compiling; fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
108686
diff
changeset
|
654 prepending a space before it." |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
655 (let* ((header (lgstring-header gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
656 (nchars (lgstring-char-len gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
657 (nglyphs (lgstring-glyph-len gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
658 (i 0) |
101780
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
659 (coding (lgstring-font gstring)) |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
660 glyph) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
661 (while (and (< i nglyphs) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
662 (setq glyph (lgstring-glyph gstring i))) |
101780
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
663 (if (not (char-charset (lglyph-char glyph) coding)) |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
664 (progn |
101780
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
665 ;; As the terminal doesn't support this glyph, return a |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
666 ;; gstring in which each glyph is its own graphme-cluster |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
667 ;; of width 1.. |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
668 (setq i 0) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
669 (while (and (< i nglyphs) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
670 (setq glyph (lgstring-glyph gstring i))) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
671 (if (< (lglyph-width glyph) 1) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
672 (lglyph-set-width glyph 1)) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
673 (lglyph-set-from-to glyph i i) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
674 (setq i (1+ i)))) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
675 (if (= (lglyph-width glyph) 0) |
103367
8fb6a5d3b48d
(compose-gstring-for-terminal): For zero-width
Kenichi Handa <handa@m17n.org>
parents:
102727
diff
changeset
|
676 (if (eq (get-char-code-property (lglyph-char glyph) |
8fb6a5d3b48d
(compose-gstring-for-terminal): For zero-width
Kenichi Handa <handa@m17n.org>
parents:
102727
diff
changeset
|
677 'general-category) |
8fb6a5d3b48d
(compose-gstring-for-terminal): For zero-width
Kenichi Handa <handa@m17n.org>
parents:
102727
diff
changeset
|
678 'Cf) |
8fb6a5d3b48d
(compose-gstring-for-terminal): For zero-width
Kenichi Handa <handa@m17n.org>
parents:
102727
diff
changeset
|
679 (progn |
8fb6a5d3b48d
(compose-gstring-for-terminal): For zero-width
Kenichi Handa <handa@m17n.org>
parents:
102727
diff
changeset
|
680 ;; Compose by replacing with a space. |
8fb6a5d3b48d
(compose-gstring-for-terminal): For zero-width
Kenichi Handa <handa@m17n.org>
parents:
102727
diff
changeset
|
681 (lglyph-set-char glyph 32) |
8fb6a5d3b48d
(compose-gstring-for-terminal): For zero-width
Kenichi Handa <handa@m17n.org>
parents:
102727
diff
changeset
|
682 (lglyph-set-width glyph 1) |
8fb6a5d3b48d
(compose-gstring-for-terminal): For zero-width
Kenichi Handa <handa@m17n.org>
parents:
102727
diff
changeset
|
683 (setq i (1+ i))) |
101780
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
684 ;; Compose by prepending a space. |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
685 (setq gstring (lgstring-insert-glyph gstring i |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
686 (lglyph-copy glyph)) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
687 nglyphs (lgstring-glyph-len gstring)) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
688 (setq glyph (lgstring-glyph gstring i)) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
689 (lglyph-set-char glyph 32) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
690 (lglyph-set-width glyph 1) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
691 (setq i (+ 2))) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
692 (let ((from (lglyph-from glyph)) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
693 (to (lglyph-to glyph)) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
694 (j (1+ i))) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
695 (while (and (< j nglyphs) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
696 (setq glyph (lgstring-glyph gstring j)) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
697 (char-charset (lglyph-char glyph) coding) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
698 (= (lglyph-width glyph) 0)) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
699 (setq to (lglyph-to glyph) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
700 j (1+ j))) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
701 (while (< i j) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
702 (setq glyph (lgstring-glyph gstring i)) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
703 (lglyph-set-from-to glyph from to) |
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
704 (setq i (1+ i))))))) |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
705 gstring)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
706 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
707 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
708 (defun auto-compose-chars (func from to font-object string) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
709 "Compose the characters at FROM by FUNC. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
710 FUNC is called with one argument GSTRING which is built for characters |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
711 in the region FROM (inclusive) and TO (exclusive). |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
712 |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
713 If the character are composed on a graphic display, FONT-OBJECT |
102727
519b650e6d27
* composite.el (auto-compose-chars): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
102203
diff
changeset
|
714 is a font to use. Otherwise, FONT-OBJECT is nil, and the function |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
715 `compose-gstring-for-terminal' is used instead of FUNC. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
716 |
91276
1d8d51129d26
(composition-function-table): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents:
91227
diff
changeset
|
717 If STRING is non-nil, it is a string, and FROM and TO are indices |
1d8d51129d26
(composition-function-table): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents:
91227
diff
changeset
|
718 into the string. In that case, compose characters in the string. |
89290
adbc95471ef8
Remove all autoload cookies.
Kenichi Handa <handa@m17n.org>
parents:
88808
diff
changeset
|
719 |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
720 The value is a gstring containing information for shaping the characters. |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
721 |
89290
adbc95471ef8
Remove all autoload cookies.
Kenichi Handa <handa@m17n.org>
parents:
88808
diff
changeset
|
722 This function is the default value of `auto-composition-function' (which see)." |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
723 (let ((gstring (composition-get-gstring from to font-object string))) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
724 (if (lgstring-shaped-p gstring) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
725 gstring |
101780
4c5660c5102c
(compose-gstring-for-terminal): If a character is
Kenichi Handa <handa@m17n.org>
parents:
101080
diff
changeset
|
726 (or (fontp font-object 'font-object) |
97836
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
727 (setq func 'compose-gstring-for-terminal)) |
f5f400126c23
(composition-function-table): Declaration moved to
Kenichi Handa <handa@m17n.org>
parents:
96418
diff
changeset
|
728 (funcall func gstring)))) |
89290
adbc95471ef8
Remove all autoload cookies.
Kenichi Handa <handa@m17n.org>
parents:
88808
diff
changeset
|
729 |
106812
23c562723a8d
Make auto-composition work on all buffers even if they are fundamental mode.
Kenichi Handa <handa@m17n.org>
parents:
105965
diff
changeset
|
730 (put 'auto-composition-mode 'permanent-local t) |
23c562723a8d
Make auto-composition work on all buffers even if they are fundamental mode.
Kenichi Handa <handa@m17n.org>
parents:
105965
diff
changeset
|
731 |
90306
696f125c3c6a
(auto-composition-function): Make it buffer local.
Kenichi Handa <handa@m17n.org>
parents:
90261
diff
changeset
|
732 (make-variable-buffer-local 'auto-composition-function) |
106812
23c562723a8d
Make auto-composition work on all buffers even if they are fundamental mode.
Kenichi Handa <handa@m17n.org>
parents:
105965
diff
changeset
|
733 (setq-default auto-composition-function 'auto-compose-chars) |
90306
696f125c3c6a
(auto-composition-function): Make it buffer local.
Kenichi Handa <handa@m17n.org>
parents:
90261
diff
changeset
|
734 |
90307
a2899387f787
(auto-composition-mode): Add autoload cookie.
Kenichi Handa <handa@m17n.org>
parents:
90306
diff
changeset
|
735 ;;;###autoload |
108220
0b37f86b040e
Use define-minor-mode where applicable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108203
diff
changeset
|
736 (define-minor-mode auto-composition-mode |
92026
4ad14ee0d40a
(encode-composition-rule): Fix typo in error message.
Glenn Morris <rgm@gnu.org>
parents:
92000
diff
changeset
|
737 "Toggle Auto Composition mode. |
4ad14ee0d40a
(encode-composition-rule): Fix typo in error message.
Glenn Morris <rgm@gnu.org>
parents:
92000
diff
changeset
|
738 With ARG, turn Auto Composition mode off if and only if ARG is a non-positive |
4ad14ee0d40a
(encode-composition-rule): Fix typo in error message.
Glenn Morris <rgm@gnu.org>
parents:
92000
diff
changeset
|
739 number; if ARG is nil, toggle Auto Composition mode; anything else turns Auto |
4ad14ee0d40a
(encode-composition-rule): Fix typo in error message.
Glenn Morris <rgm@gnu.org>
parents:
92000
diff
changeset
|
740 Composition on. |
90306
696f125c3c6a
(auto-composition-function): Make it buffer local.
Kenichi Handa <handa@m17n.org>
parents:
90261
diff
changeset
|
741 |
696f125c3c6a
(auto-composition-function): Make it buffer local.
Kenichi Handa <handa@m17n.org>
parents:
90261
diff
changeset
|
742 When Auto Composition is enabled, text characters are automatically composed |
696f125c3c6a
(auto-composition-function): Make it buffer local.
Kenichi Handa <handa@m17n.org>
parents:
90261
diff
changeset
|
743 by functions registered in `composition-function-table' (which see). |
696f125c3c6a
(auto-composition-function): Make it buffer local.
Kenichi Handa <handa@m17n.org>
parents:
90261
diff
changeset
|
744 |
92026
4ad14ee0d40a
(encode-composition-rule): Fix typo in error message.
Glenn Morris <rgm@gnu.org>
parents:
92000
diff
changeset
|
745 You can use `global-auto-composition-mode' to turn on |
108220
0b37f86b040e
Use define-minor-mode where applicable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108203
diff
changeset
|
746 Auto Composition mode in all buffers (this is the default).") |
90306
696f125c3c6a
(auto-composition-function): Make it buffer local.
Kenichi Handa <handa@m17n.org>
parents:
90261
diff
changeset
|
747 |
90307
a2899387f787
(auto-composition-mode): Add autoload cookie.
Kenichi Handa <handa@m17n.org>
parents:
90306
diff
changeset
|
748 ;;;###autoload |
108241
731a16c5bb20
Use define-minor-mode for less obvious cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108220
diff
changeset
|
749 (define-minor-mode global-auto-composition-mode |
106812
23c562723a8d
Make auto-composition work on all buffers even if they are fundamental mode.
Kenichi Handa <handa@m17n.org>
parents:
105965
diff
changeset
|
750 "Toggle Auto-Composition mode in every possible buffer. |
23c562723a8d
Make auto-composition work on all buffers even if they are fundamental mode.
Kenichi Handa <handa@m17n.org>
parents:
105965
diff
changeset
|
751 With prefix arg, turn Global-Auto-Composition mode on if and only if arg |
23c562723a8d
Make auto-composition work on all buffers even if they are fundamental mode.
Kenichi Handa <handa@m17n.org>
parents:
105965
diff
changeset
|
752 is positive. |
23c562723a8d
Make auto-composition work on all buffers even if they are fundamental mode.
Kenichi Handa <handa@m17n.org>
parents:
105965
diff
changeset
|
753 See `auto-composition-mode' for more information on Auto-Composition mode." |
108241
731a16c5bb20
Use define-minor-mode for less obvious cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108220
diff
changeset
|
754 :variable (default-value 'auto-composition-mode)) |
731a16c5bb20
Use define-minor-mode for less obvious cases.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108220
diff
changeset
|
755 |
102203
fa34dcb3d716
(auto-composition-mode): Don't add a hook to
Kenichi Handa <handa@m17n.org>
parents:
101960
diff
changeset
|
756 (defalias 'toggle-auto-composition 'auto-composition-mode) |
26880 | 757 |
758 | |
81073
12cb550b10e4
(compose-region, decompose-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75347
diff
changeset
|
759 ;; The following codes are only for backward compatibility with Emacs |
12cb550b10e4
(compose-region, decompose-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75347
diff
changeset
|
760 ;; 20.4 and earlier. |
26880 | 761 |
762 (defun decompose-composite-char (char &optional type with-composition-rule) | |
763 "Convert CHAR to string. | |
764 | |
765 If optional 2nd arg TYPE is non-nil, it is `string', `list', or | |
49512
6a0305153436
(decompose-composite-char): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
46963
diff
changeset
|
766 `vector'. In this case, CHAR is converted to string, list of CHAR, or |
6a0305153436
(decompose-composite-char): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
46963
diff
changeset
|
767 vector of CHAR respectively. |
6a0305153436
(decompose-composite-char): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
46963
diff
changeset
|
768 Optional 3rd arg WITH-COMPOSITION-RULE is ignored." |
26880 | 769 (cond ((or (null type) (eq type 'string)) (char-to-string char)) |
770 ((eq type 'list) (list char)) | |
771 (t (vector char)))) | |
772 | |
29521
4ad26302d559
(decompose-composite-char): Declare it as obsolete.
Kenichi Handa <handa@m17n.org>
parents:
26880
diff
changeset
|
773 (make-obsolete 'decompose-composite-char 'char-to-string "21.1") |
4ad26302d559
(decompose-composite-char): Declare it as obsolete.
Kenichi Handa <handa@m17n.org>
parents:
26880
diff
changeset
|
774 |
26880 | 775 |
52401 | 776 |
81073
12cb550b10e4
(compose-region, decompose-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75347
diff
changeset
|
777 ;; arch-tag: ee703d77-1723-45d4-a31f-e9f0f867aa33 |
26880 | 778 ;;; composite.el ends here |