annotate lisp/composite.el @ 72550:666bd542be19

(get_window_cursor_type): Replace BOX cursor on images with a hollow box cursor if image is larger than 32x32 (or the default frame font if that is bigger). Replace any other cursor on images with hollow box cursor, as redisplay doesn't support bar and hbar cursors on images.
author Kim F. Storm <storm@cua.dk>
date Sun, 27 Aug 2006 22:23:07 +0000
parents 547f2b420666
children 6ee41fdd69ff 7beb78bc1f8e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
2
67658
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 64530
diff changeset
3 ;; Copyright (C) 1999, 2000
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 64530
diff changeset
4 ;; National Institute of Advanced Industrial Science and Technology (AIST)
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 64530
diff changeset
5 ;; Registration Number H14PRO021
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
6
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
7 ;; Keywords: mule, multilingual, character composition
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
8
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
10
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
14 ;; any later version.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
15
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
20
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 56985
diff changeset
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 56985
diff changeset
24 ;; Boston, MA 02110-1301, USA.
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
25
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37232
diff changeset
26 ;;; Commentary:
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37232
diff changeset
27
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
28 ;;; Code:
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
29
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
30 ;;;###autoload
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
31 (defconst reference-point-alist
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
32 '((tl . 0) (tc . 1) (tr . 2)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
33 (Bl . 3) (Bc . 4) (Br . 5)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
34 (bl . 6) (bc . 7) (br . 8)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
35 (cl . 9) (cc . 10) (cr . 11)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
36 (top-left . 0) (top-center . 1) (top-right . 2)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
37 (base-left . 3) (base-center . 4) (base-right . 5)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
38 (bottom-left . 6) (bottom-center . 7) (bottom-right . 8)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
39 (center-left . 9) (center-center . 10) (center-right . 11)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
40 ;; For backward compatibility...
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
41 (ml . 3) (mc . 10) (mr . 5)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
42 (mid-left . 3) (mid-center . 10) (mid-right . 5))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
43 "Alist of symbols vs integer codes of glyph reference points.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
44 A glyph reference point symbol is to be used to specify a composition
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
45 rule in COMPONENTS argument to such functions as `compose-region' and
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
46 `make-composition'.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
47
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
48 Meanings of glyph reference point codes are as follows:
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
49
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
50 0----1----2 <---- ascent 0:tl or top-left
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
51 | | 1:tc or top-center
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
52 | | 2:tr or top-right
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
53 | | 3:Bl or base-left 9:cl or center-left
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
54 9 10 11 <---- center 4:Bc or base-center 10:cc or center-center
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
55 | | 5:Br or base-right 11:cr or center-right
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
56 --3----4----5-- <-- baseline 6:bl or bottom-left
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
57 | | 7:bc or bottom-center
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
58 6----7----8 <---- descent 8:br or bottom-right
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
59
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
60 Glyph reference point symbols are to be used to specify composition
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
61 rule of the form \(GLOBAL-REF-POINT . NEW-REF-POINT), where
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
62 GLOBAL-REF-POINT is a reference point in the overall glyphs already
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
63 composed, and NEW-REF-POINT is a reference point in the new glyph to
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
64 be added.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
65
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
66 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
67 NEW-REF-POINT is `tc' (top-center), the overall glyph is updated as
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
68 follows (the point `*' corresponds to both reference points):
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
69
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
70 +-------+--+ <--- new ascent
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
71 | | |
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
72 | global| |
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
73 | glyph | |
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
74 -- | | |-- <--- baseline \(doesn't change)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
75 +----+--*--+
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
76 | | new |
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
77 | |glyph|
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
78 +----+-----+ <--- new descent
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
79 ")
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
80
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
81
56985
5eac7cd6d213 (encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents: 54433
diff changeset
82 ;;;###autoload
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
83 (defun encode-composition-rule (rule)
56985
5eac7cd6d213 (encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents: 54433
diff changeset
84 "Encode composition rule RULE into an integer value.
5eac7cd6d213 (encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents: 54433
diff changeset
85 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
86 \(see `reference-point-alist')."
56985
5eac7cd6d213 (encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents: 54433
diff changeset
87
5eac7cd6d213 (encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents: 54433
diff changeset
88 ;; 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
89 ;; defined in composite.h.
5eac7cd6d213 (encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents: 54433
diff changeset
90
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
91 (if (and (integerp rule) (< rule 144))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
92 ;; Already encoded.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
93 rule
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
94 (or (consp rule)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
95 (error "Invalid composition rule: %S" rule))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
96 (let ((gref (car rule))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
97 (nref (cdr rule)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
98 (or (integerp gref)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
99 (setq gref (cdr (assq gref reference-point-alist))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
100 (or (integerp nref)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
101 (setq nref (cdr (assq nref reference-point-alist))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
102 (or (and (>= gref 0) (< gref 12) (>= nref 0) (< nref 12))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49512
diff changeset
103 (error "Invalid composition rule: %S" rule))
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
104 (+ (* gref 12) nref))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
105
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
106 ;; Decode encoded composition rule RULE-CODE. The value is a cons of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
107 ;; global and new reference point symbols.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
108 ;; This must be compatible with C macro COMPOSITION_DECODE_RULE
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
109 ;; defined in composite.h.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
110
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
111 (defun decode-composition-rule (rule-code)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
112 (or (and (natnump rule-code) (< rule-code 144))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
113 (error "Invalid encoded composition rule: %S" rule-code))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
114 (let ((gref (car (rassq (/ rule-code 12) reference-point-alist)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
115 (nref (car (rassq (% rule-code 12) reference-point-alist))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
116 (or (and gref (symbolp gref) nref (symbolp nref))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
117 (error "Invalid composition rule code: %S" rule-code))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
118 (cons gref nref)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
119
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
120 ;; Encode composition rules in composition components COMPONENTS. The
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
121 ;; value is a copy of COMPONENTS, where composition rules (cons of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
122 ;; global and new glyph reference point symbols) are replaced with
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
123 ;; encoded composition rules. Optional 2nd argument NOCOPY non-nil
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
124 ;; means don't make a copy but modify COMPONENTS directly.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
125
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
126 (defun encode-composition-components (components &optional nocopy)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
127 (or nocopy
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
128 (setq components (copy-sequence components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
129 (if (vectorp components)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
130 (let ((len (length components))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
131 (i 1))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
132 (while (< i len)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
133 (aset components i
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
134 (encode-composition-rule (aref components i)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
135 (setq i (+ i 2))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
136 (let ((tail (cdr components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
137 (while tail
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
138 (setcar tail
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
139 (encode-composition-rule (car tail)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
140 (setq tail (nthcdr 2 tail)))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
141 components)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
142
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
143 ;; Decode composition rule codes in composition components COMPONENTS.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
144 ;; The value is a copy of COMPONENTS, where composition rule codes are
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
145 ;; replaced with composition rules (cons of global and new glyph
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
146 ;; reference point symbols). Optional 2nd argument NOCOPY non-nil
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
147 ;; means don't make a copy but modify COMPONENTS directly.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
148 ;; It is assumed that COMPONENTS is a vector and is for rule-base
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
149 ;; composition, thus (2N+1)th elements are rule codes.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
150
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
151 (defun decode-composition-components (components &optional nocopy)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
152 (or nocopy
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
153 (setq components (copy-sequence components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
154 (let ((len (length components))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
155 (i 1))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
156 (while (< i len)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
157 (aset components i
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
158 (decode-composition-rule (aref components i)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
159 (setq i (+ i 2))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
160 components)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
161
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
162 ;;;###autoload
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
163 (defun compose-region (start end &optional components modification-func)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
164 "Compose characters in the current region.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
165
46963
4427c4b0ed3c *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 46513
diff changeset
166 Characters are composed relatively, i.e. composed by overstricking or
4427c4b0ed3c *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 46513
diff changeset
167 stacking depending on ascent, descent and other properties.
4427c4b0ed3c *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 46513
diff changeset
168
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
169 When called from a program, expects these four arguments.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
170
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
171 First two arguments START and END are positions (integers or markers)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
172 specifying the region.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
173
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
174 Optional 3rd argument COMPONENTS, if non-nil, is a character or a
46963
4427c4b0ed3c *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 46513
diff changeset
175 sequence (vector, list, or string) of integers. In this case,
4427c4b0ed3c *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 46513
diff changeset
176 characters are composed not relatively but according to COMPONENTS.
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
177
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
178 If it is a character, it is an alternate character to display instead
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
179 of the text in the region.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
180
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
181 If it is a string, the elements are alternate characters.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
182
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
183 If it is a vector or list, it is a sequence of alternate characters and
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
184 composition rules, where (2N)th elements are characters and (2N+1)th
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
185 elements are composition rules to specify how to compose (2N+2)th
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
186 elements with previously composed N glyphs.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
187
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
188 A composition rule is a cons of global and new glyph reference point
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
189 symbols. See the documentation of `reference-point-alist' for more
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
190 detail.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
191
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
192 Optional 4th argument MODIFICATION-FUNC is a function to call to
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
193 adjust the composition when it gets invalid because of a change of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
194 text in the composition."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
195 (interactive "r")
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
196 (let ((modified-p (buffer-modified-p))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
197 (buffer-read-only nil))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
198 (if (or (vectorp components) (listp components))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
199 (setq components (encode-composition-components components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
200 (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
201 (restore-buffer-modified-p modified-p)))
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
202
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
203 ;;;###autoload
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
204 (defun decompose-region (start end)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
205 "Decompose text in the current region.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
206
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
207 When called from a program, expects two arguments,
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
208 positions (integers or markers) specifying the region."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
209 (interactive "r")
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
210 (let ((modified-p (buffer-modified-p))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
211 (buffer-read-only nil))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
212 (remove-text-properties start end '(composition nil))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
213 (set-buffer-modified-p modified-p)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
214
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
215 ;;;###autoload
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
216 (defun compose-string (string &optional start end components modification-func)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
217 "Compose characters in string STRING.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
218
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
219 The return value is STRING where `composition' property is put on all
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
220 the characters in it.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
221
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
222 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
223 STRING to be composed. They default to the beginning and the end of
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
224 STRING respectively.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
225
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
226 Optional 4th argument COMPONENTS, if non-nil, is a character or a
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
227 sequence (vector, list, or string) of integers. See the function
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
228 `compose-region' for more detail.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
229
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
230 Optional 5th argument MODIFICATION-FUNC is a function to call to
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
231 adjust the composition when it gets invalid because of a change of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
232 text in the composition."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
233 (if (or (vectorp components) (listp components))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
234 (setq components (encode-composition-components components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
235 (or start (setq start 0))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
236 (or end (setq end (length string)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
237 (compose-string-internal string start end components modification-func)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
238 string)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
239
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
240 ;;;###autoload
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
241 (defun decompose-string (string)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
242 "Return STRING where `composition' property is removed."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
243 (remove-text-properties 0 (length string) '(composition nil) string)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
244 string)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
245
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
246 ;;;###autoload
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
247 (defun compose-chars (&rest args)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
248 "Return a string from arguments in which all characters are composed.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
249 For relative composition, arguments are characters.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
250 For rule-based composition, Mth \(where M is odd) arguments are
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
251 characters, and Nth \(where N is even) arguments are composition rules.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
252 A composition rule is a cons of glyph reference points of the form
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
253 \(GLOBAL-REF-POINT . NEW-REF-POINT). See the documentation of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
254 `reference-point-alist' for more detail."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
255 (let (str components)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
256 (if (consp (car (cdr args)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
257 ;; Rule-base composition.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
258 (let ((len (length args))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
259 (tail (encode-composition-components args 'nocopy)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
260
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
261 (while tail
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
262 (setq str (cons (car tail) str))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
263 (setq tail (nthcdr 2 tail)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
264 (setq str (concat (nreverse str))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
265 components args))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
266 ;; Relative composition.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
267 (setq str (concat args)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
268 (compose-string-internal str 0 (length str) components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
269
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
270 ;;;###autoload
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
271 (defun find-composition (pos &optional limit string detail-p)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
272 "Return information about a composition at or nearest to buffer position POS.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
273
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
274 If the character at POS has `composition' property, the value is a list
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
275 of FROM, TO, and VALID-P.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
276
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
277 FROM and TO specify the range of text that has the same `composition'
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
278 property, VALID-P is non-nil if and only if this composition is valid.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
279
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
280 If there's no composition at POS, and the optional 2nd argument LIMIT
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
281 is non-nil, search for a composition toward LIMIT.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
282
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
283 If no composition is found, return nil.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
284
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
285 Optional 3rd argument STRING, if non-nil, is a string to look for a
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
286 composition in; nil means the current buffer.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
287
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
288 If a valid composition is found and the optional 4th argument DETAIL-P
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
289 is non-nil, the return value is a list of FROM, TO, COMPONENTS,
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
290 RELATIVE-P, MOD-FUNC, and WIDTH.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
291
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
292 COMPONENTS is a vector of integers, the meaning depends on RELATIVE-P.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
293
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
294 RELATIVE-P is t if the composition method is relative, else nil.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
295
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
296 If RELATIVE-P is t, COMPONENTS is a vector of characters to be
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
297 composed. If RELATIVE-P is nil, COMPONENTS is a vector of characters
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
298 and composition rules as described in `compose-region'.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
299
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
300 MOD-FUNC is a modification function of the composition.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
301
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
302 WIDTH is a number of columns the composition occupies on the screen."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
303 (let ((result (find-composition-internal pos limit string detail-p)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
304 (if (and detail-p result (nth 2 result) (not (nth 3 result)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
305 ;; This is a valid rule-base composition.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
306 (decode-composition-components (nth 2 result) 'nocopy))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
307 result))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
308
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
309
29551
0941692cc11e (composition-function-table): Move the `put'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29521
diff changeset
310 ;;;###autoload
33244
59edd748e69a (composition-function-table): Variable declaration
Kenichi Handa <handa@m17n.org>
parents: 30485
diff changeset
311 (defun compose-chars-after (pos &optional limit object)
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
312 "Compose characters in current buffer after position POS.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
313
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
314 It looks up the char-table `composition-function-table' (which see) by
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
315 a character after POS. If non-nil value is found, the format of the
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
316 value should be an alist of PATTERNs vs FUNCs, where PATTERNs are
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
317 regular expressions and FUNCs are functions. If the text after POS
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
318 matches one of PATTERNs, call the corresponding FUNC with three
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
319 arguments POS, TO, and PATTERN, where TO is the end position of text
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
320 matching PATTERN, and return what FUNC returns. Otherwise, return
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
321 nil.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
322
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
323 FUNC is responsible for composing the text properly. The return value
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
324 is:
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
325 nil -- if no characters were composed.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
326 CHARS (integer) -- if CHARS characters were composed.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
327
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
328 Optional 2nd arg LIMIT, if non-nil, limits the matching of text.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
329
33244
59edd748e69a (composition-function-table): Variable declaration
Kenichi Handa <handa@m17n.org>
parents: 30485
diff changeset
330 Optional 3rd arg OBJECT, if non-nil, is a string that contains the
59edd748e69a (composition-function-table): Variable declaration
Kenichi Handa <handa@m17n.org>
parents: 30485
diff changeset
331 text to compose. In that case, POS and LIMIT index to the string.
59edd748e69a (composition-function-table): Variable declaration
Kenichi Handa <handa@m17n.org>
parents: 30485
diff changeset
332
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
333 This function is the default value of `compose-chars-after-function'."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
334 (let ((tail (aref composition-function-table (char-after pos)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
335 pattern func result)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
336 (when tail
30485
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
337 (save-match-data
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
338 (save-excursion
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49512
diff changeset
339 (while (and tail (not func))
30485
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
340 (setq pattern (car (car tail))
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
341 func (cdr (car tail)))
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
342 (goto-char pos)
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
343 (if (if limit
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
344 (and (re-search-forward pattern limit t)
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
345 (= (match-beginning 0) pos))
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
346 (looking-at pattern))
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
347 (setq result (funcall func pos (match-end 0) pattern nil))
5551289a9329 (compose-chars-after): Preserve match data.
Kenichi Handa <handa@m17n.org>
parents: 29551
diff changeset
348 (setq func nil tail (cdr tail)))))))
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
349 result))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
350
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
351 ;;;###autoload
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
352 (defun compose-last-chars (args)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
353 "Compose last characters.
35075
f49c90fa95d7 (compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents: 33244
diff changeset
354 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
355 \(compose-last-chars N COMPONENTS),
f49c90fa95d7 (compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents: 33244
diff changeset
356 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
357 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
358 \(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
359 and that function finds a proper rule to compose the target characters.
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
360 This function is intended to be used from input methods.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
361 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
362 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
363 after a sequence of character events."
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
364 (interactive "e")
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
365 (let ((chars (nth 1 args)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
366 (if (and (numberp chars)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
367 (>= (- (point) (point-min)) chars))
35075
f49c90fa95d7 (compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents: 33244
diff changeset
368 (if (nth 2 args)
f49c90fa95d7 (compose-last-chars): New argument COMPONENTS. It
Kenichi Handa <handa@m17n.org>
parents: 33244
diff changeset
369 (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
370 (compose-chars-after (- (point) chars) (point))))))
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
371
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
372 ;;;###autoload(global-set-key [compose-last-chars] 'compose-last-chars)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
373
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
374
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
375 ;;; The following codes are only for backward compatibility with Emacs
46045
c74a601c84b3 (decompose-composite-char): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 38414
diff changeset
376 ;;; 20.4 and earlier.
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
377
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
378 ;;;###autoload
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
379 (defun decompose-composite-char (char &optional type with-composition-rule)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
380 "Convert CHAR to string.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
381
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
382 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
383 `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
384 vector of CHAR respectively.
6a0305153436 (decompose-composite-char): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 46963
diff changeset
385 Optional 3rd arg WITH-COMPOSITION-RULE is ignored."
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
386 (cond ((or (null type) (eq type 'string)) (char-to-string char))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
387 ((eq type 'list) (list char))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
388 (t (vector char))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
389
46513
d41a7efb91c9 (decompose-composite-char): Add autoload cookie to obsolescence declaration;
Juanma Barranquero <lekktu@gmail.com>
parents: 46045
diff changeset
390 ;;;###autoload
29521
4ad26302d559 (decompose-composite-char): Declare it as obsolete.
Kenichi Handa <handa@m17n.org>
parents: 26880
diff changeset
391 (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
392
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
393
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49588
diff changeset
394
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49588
diff changeset
395 ;;; arch-tag: ee703d77-1723-45d4-a31f-e9f0f867aa33
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
396 ;;; composite.el ends here