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
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
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78299
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105965
diff changeset
4 ;; 2008, 2009, 2010
67658
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 64530
diff changeset
5 ;; National Institute of Advanced Industrial Science and Technology (AIST)
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 64530
diff changeset
6 ;; Registration Number H14PRO021
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
12
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
13 ;; This file is part of GNU Emacs.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
19
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
20 ;; GNU Emacs is distributed in the hope that it will be useful,
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
23 ;; GNU General Public License for more details.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
24
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
30 ;;; Code:
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
34 (defconst reference-point-alist
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
35 '((tl . 0) (tc . 1) (tr . 2)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
36 (Bl . 3) (Bc . 4) (Br . 5)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
37 (bl . 6) (bc . 7) (br . 8)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
38 (cl . 9) (cc . 10) (cr . 11)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
39 (top-left . 0) (top-center . 1) (top-right . 2)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
40 (base-left . 3) (base-center . 4) (base-right . 5)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
41 (bottom-left . 6) (bottom-center . 7) (bottom-right . 8)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
42 (center-left . 9) (center-center . 10) (center-right . 11)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
43 ;; For backward compatibility...
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
44 (ml . 3) (mc . 10) (mr . 5)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
45 (mid-left . 3) (mid-center . 10) (mid-right . 5))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
46 "Alist of symbols vs integer codes of glyph reference points.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
47 A glyph reference point symbol is to be used to specify a composition
89497
76c9d23be7a1 Doc fixes.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
48 rule in COMPONENTS argument to such functions as `compose-region'.
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
51
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
52 0----1----2 <---- ascent 0:tl or top-left
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
53 | | 1:tc or top-center
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
54 | | 2:tr or top-right
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
55 | | 3:Bl or base-left 9:cl or center-left
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
56 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
57 | | 5:Br or base-right 11:cr or center-right
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
58 --3----4----5-- <-- baseline 6:bl or bottom-left
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
59 | | 7:bc or bottom-center
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
60 6----7----8 <---- descent 8:br or bottom-right
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
61
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
62 Glyph reference point symbols are to be used to specify composition
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
63 rule of the form \(GLOBAL-REF-POINT . NEW-REF-POINT), where
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
64 GLOBAL-REF-POINT is a reference point in the overall glyphs already
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
65 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
66 be added.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
67
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
70 follows (the point `*' corresponds to both reference points):
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
71
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
72 +-------+--+ <--- new ascent
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
73 | | |
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
74 | global| |
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
75 | glyph | |
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
76 -- | | |-- <--- baseline \(doesn't change)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
77 +----+--*--+
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
78 | | new |
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
79 | |glyph|
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
87
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
88
56985
5eac7cd6d213 (encode-composition-rule): Add autoload cooky.
Kenichi Handa <handa@m17n.org>
parents: 54433
diff changeset
89 ;;;###autoload
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
98 (if (and (integerp rule) (< rule 144))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
99 ;; Already encoded.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
124
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
125 ;; Decode encoded composition rule RULE-CODE. The value is a cons of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
126 ;; global and new reference point symbols.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
127 ;; This must be compatible with C macro COMPOSITION_DECODE_RULE
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
128 ;; defined in composite.h.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
129
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
139 (or (and gref (symbolp gref) nref (symbolp nref))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
145
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
146 ;; Encode composition rules in composition components COMPONENTS. The
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
147 ;; value is a copy of COMPONENTS, where composition rules (cons of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
148 ;; global and new glyph reference point symbols) are replaced with
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
149 ;; encoded composition rules. Optional 2nd argument NOCOPY non-nil
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
150 ;; means don't make a copy but modify COMPONENTS directly.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
151
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
152 (defun encode-composition-components (components &optional nocopy)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
153 (or nocopy
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
154 (setq components (copy-sequence components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
155 (if (vectorp components)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
156 (let ((len (length components))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
157 (i 1))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
158 (while (< i len)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
159 (aset components i
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
160 (encode-composition-rule (aref components i)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
161 (setq i (+ i 2))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
162 (let ((tail (cdr components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
163 (while tail
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
164 (setcar tail
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
165 (encode-composition-rule (car tail)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
166 (setq tail (nthcdr 2 tail)))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
167 components)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
168
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
169 ;; Decode composition rule codes in composition components COMPONENTS.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
170 ;; The value is a copy of COMPONENTS, where composition rule codes are
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
171 ;; replaced with composition rules (cons of global and new glyph
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
172 ;; reference point symbols). Optional 2nd argument NOCOPY non-nil
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
173 ;; means don't make a copy but modify COMPONENTS directly.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
174 ;; It is assumed that COMPONENTS is a vector and is for rule-base
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
175 ;; composition, thus (2N+1)th elements are rule codes.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
176
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
177 (defun decode-composition-components (components &optional nocopy)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
178 (or nocopy
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
179 (setq components (copy-sequence components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
180 (let ((len (length components))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
181 (i 1))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
182 (while (< i len)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
183 (aset components i
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
184 (decode-composition-rule (aref components i)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
185 (setq i (+ i 2))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
186 components)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
187
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
188 (defun compose-region (start end &optional components modification-func)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
189 "Compose characters in the current region.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
4427c4b0ed3c *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 46513
diff changeset
202
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
203 When called from a program, expects these four arguments.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
204
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
205 First two arguments START and END are positions (integers or markers)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
206 specifying the region.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
207
89497
76c9d23be7a1 Doc fixes.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
208 Optional 3rd argument COMPONENTS, if non-nil, is a character, a string
76c9d23be7a1 Doc fixes.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
209 or a vector or list of integers and rules.
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
210
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
211 If it is a character, it is an alternate character to display instead
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
212 of the text in the region.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
220
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
221 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
222 composition rules, where (2N)th elements are characters and (2N+1)th
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
223 elements are composition rules to specify how to compose (2N+2)th
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
224 elements with previously composed N glyphs.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
225
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
226 A composition rule is a cons of global and new glyph reference point
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
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 4th 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 (interactive "r")
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
236 (if (or (vectorp components) (listp components))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
237 (setq components (encode-composition-components components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
240
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
241 (defun decompose-region (start end)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
242 "Decompose text in the current region.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
243
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
244 When called from a program, expects two arguments,
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
245 positions (integers or markers) specifying the region."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
246 (interactive "r")
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
251
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
252 (defun compose-string (string &optional start end components modification-func)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
253 "Compose characters in string STRING.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
254
88808
8219830269aa (compose-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 38414
diff changeset
255 The return value is STRING with the `composition' property put on all
26880
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
256 the characters in it.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
257
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
260 STRING respectively.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
261
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
262 Optional 4th argument COMPONENTS, if non-nil, is a character or a
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
263 sequence (vector, list, or string) of integers. See the function
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
264 `compose-region' for more detail.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
265
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
266 Optional 5th argument MODIFICATION-FUNC is a function to call to
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
267 adjust the composition when it gets invalid because of a change of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
268 text in the composition."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
269 (if (or (vectorp components) (listp components))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
270 (setq components (encode-composition-components components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
271 (or start (setq start 0))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
272 (or end (setq end (length string)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
273 (compose-string-internal string start end components modification-func)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
274 string)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
275
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
276 (defun decompose-string (string)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
277 "Return STRING where `composition' property is removed."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
278 (remove-text-properties 0 (length string) '(composition nil) string)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
279 string)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
280
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
281 (defun compose-chars (&rest args)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
282 "Return a string from arguments in which all characters are composed.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
283 For relative composition, arguments are characters.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
284 For rule-based composition, Mth \(where M is odd) arguments are
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
285 characters, and Nth \(where N is even) arguments are composition rules.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
286 A composition rule is a cons of glyph reference points of the form
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
287 \(GLOBAL-REF-POINT . NEW-REF-POINT). See the documentation of
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
288 `reference-point-alist' for more detail."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
289 (let (str components)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
290 (if (consp (car (cdr args)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
291 ;; Rule-base composition.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
292 (let ((len (length args))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
293 (tail (encode-composition-components args 'nocopy)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
294
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
295 (while tail
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
296 (setq str (cons (car tail) str))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
297 (setq tail (nthcdr 2 tail)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
298 (setq str (concat (nreverse str))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
299 components args))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
300 ;; Relative composition.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
301 (setq str (concat args)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
302 (compose-string-internal str 0 (length str) components)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
303
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
306
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
309
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
312
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
315
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
316 If no composition is found, return nil.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
317
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
318 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
319 composition in; nil means the current buffer.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
320
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
325
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
326 COMPONENTS is a vector of integers, the meaning depends on RELATIVE-P.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
327
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
328 RELATIVE-P is t if the composition method is relative, else nil.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
329
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
330 If RELATIVE-P is t, COMPONENTS is a vector of characters to be
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
331 composed. If RELATIVE-P is nil, COMPONENTS is a vector of characters
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
332 and composition rules as described in `compose-region'.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
333
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
334 MOD-FUNC is a modification function of the composition.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
346 ;; This is a valid rule-base composition.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
347 (decode-composition-components (nth 2 result) 'nocopy))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
348 result))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
349
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
352 "Compose characters in current buffer after position POS.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
76c9d23be7a1 Doc fixes.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
363 This function is the default value of `compose-chars-after-function'."
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
390
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
391 (defun compose-last-chars (args)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
399 This function is intended to be used from input methods.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
403 (interactive "e")
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
404 (let ((chars (nth 1 args)))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
405 (if (and (numberp chars)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
757
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
761
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
762 (defun decompose-composite-char (char &optional type with-composition-rule)
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
763 "Convert CHAR to string.
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
764
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
769 (cond ((or (null type) (eq type 'string)) (char-to-string char))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
770 ((eq type 'list) (list char))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
771 (t (vector char))))
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
775
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49588
diff changeset
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
98564c5250e4 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
778 ;;; composite.el ends here