annotate lisp/mule/mule-charset.el @ 412:697ef44129c6 r21-2-14

Import from CVS: tag r21-2-14
author cvs
date Mon, 13 Aug 2007 11:20:41 +0200
parents 2f8bb876ab1d
children da8ed4261e83
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
392
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
1 ;;; mule-charset.el --- Charset functions for Mule.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
2 ;; Copyright (C) 1992 Free Software Foundation, Inc.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
3 ;; Copyright (C) 1995 Amdahl Corporation.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
4 ;; Copyright (C) 1996 Sun Microsystems.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
5
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
6 ;; This file is part of XEmacs.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
7
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
8 ;; XEmacs is free software; you can redistribute it and/or modify it
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
9 ;; under the terms of the GNU General Public License as published by
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
10 ;; the Free Software Foundation; either version 2, or (at your option)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
11 ;; any later version.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
12
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
13 ;; XEmacs is distributed in the hope that it will be useful, but
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
14 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
16 ;; General Public License for more details.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
17
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
18 ;; You should have received a copy of the GNU General Public License
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
19 ;; along with XEmacs; see the file COPYING. If not, write to the
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
20 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
21 ;; Boston, MA 02111-1307, USA.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
22
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
23
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
24 ;;;; Composite character support
392
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
25
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
26 (defun compose-region (start end &optional buffer)
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
27 "Compose characters in the current region into one composite character.
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
28 From a Lisp program, pass two arguments, START to END.
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
29 The composite character replaces the composed characters.
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
30 BUFFER defaults to the current buffer if omitted."
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
31 (interactive "r")
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
32 (let ((ch (make-composite-char (buffer-substring start end buffer))))
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
33 (delete-region start end buffer)
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
34 (insert-char ch nil nil buffer)))
392
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
35
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
36 (defun decompose-region (start end &optional buffer)
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
37 "Decompose any composite characters in the current region.
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
38 From a Lisp program, pass two arguments, START to END.
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
39 This converts each composite character into one or more characters,
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
40 the individual characters out of which the composite character was formed.
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
41 Non-composite characters are left as-is. BUFFER defaults to the current
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
42 buffer if omitted."
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
43 (interactive "r")
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
44 (save-excursion
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
45 (set-buffer buffer)
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
46 (save-restriction
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
47 (narrow-to-region start end)
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
48 (goto-char (point-min))
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
49 (let ((compcharset (get-charset 'composite)))
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
50 (while (< (point) (point-max))
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
51 (let ((ch (char-after (point))))
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
52 (if (eq compcharset (char-charset ch))
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
53 (progn
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
54 (delete-char 1)
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
55 (insert (composite-char-string ch))))))))))
392
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
56
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
57
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
58 ;;;; Classifying text according to charsets
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
59
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
60 (defun charsets-in-region (start end &optional buffer)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
61 "Return a list of the charsets in the region between START and END.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
62 BUFFER defaults to the current buffer if omitted."
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
63 (let (list)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
64 (save-excursion
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
65 (if buffer
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
66 (set-buffer buffer))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
67 (save-restriction
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
68 (narrow-to-region start end)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
69 (goto-char (point-min))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
70 (while (not (eobp))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
71 (let* (prev-charset
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
72 (ch (char-after (point)))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
73 (charset (char-charset ch)))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
74 (if (not (eq prev-charset charset))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
75 (progn
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
76 (setq prev-charset charset)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
77 (or (memq charset list)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
78 (setq list (cons charset list))))))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
79 (forward-char))))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
80 list))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
81
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
82 (defun charsets-in-string (string)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
83 "Return a list of the charsets in STRING."
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
84 (let ((i 0)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
85 (len (length string))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
86 prev-charset charset list)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
87 (while (< i len)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
88 (setq charset (char-charset (aref string i)))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
89 (if (not (eq prev-charset charset))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
90 (progn
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
91 (setq prev-charset charset)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
92 (or (memq charset list)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
93 (setq list (cons charset list)))))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
94 (setq i (1+ i)))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
95 list))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
96
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
97
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
98 ;;;; Charset accessors
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
99
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
100 (defun charset-iso-graphic-plane (charset)
392
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
101 "Return the `graphic' property of CHARSET.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
102 See `make-charset'."
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
103 (charset-property charset 'graphic))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
104
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
105 (defun charset-iso-final-char (charset)
392
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
106 "Return the final byte of the ISO 2022 escape sequence designating CHARSET."
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
107 (charset-property charset 'final))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
108
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
109 (defun charset-chars (charset)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
110 "Return the number of characters per dimension of CHARSET."
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
111 (charset-property charset 'chars))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
112
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
113 (defun charset-width (charset)
392
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
114 "Return the number of display columns per character of CHARSET.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
115 This only applies to TTY mode (under X, the actual display width can
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
116 be automatically determined)."
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
117 (charset-property charset 'columns))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
118
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
119 (defun charset-direction (charset)
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
120 "Return the display direction (`l2r' or `r2l') of CHARSET."
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 404
diff changeset
121 (charset-property charset 'direction))
392
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
122
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
123 (defun charset-registry (charset)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
124 "Return the registry of CHARSET.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
125 This is a regular expression matching the registry field of fonts
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
126 that can display the characters in CHARSET."
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
127 (charset-property charset 'registry))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
128
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
129 (defun charset-ccl-program (charset)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
130 "Return the CCL program of CHARSET.
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
131 See `make-charset'."
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
132 (charset-property charset 'ccl-program))
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
133
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
134 (defun charset-bytes (charset)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
135 "Useless in XEmacs, returns 1."
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
136 1)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
137
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
138 (define-obsolete-function-alias 'charset-columns 'charset-width) ;; 19990409
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
139 (define-obsolete-function-alias 'charset-final 'charset-iso-final-char) ;; 19990409
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
140 (define-obsolete-function-alias 'charset-graphic 'charset-iso-graphic-plane) ;; 19990409
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 392
diff changeset
141 (define-obsolete-function-alias 'charset-doc-string 'charset-description) ;; 19990409
392
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
142
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
143 ;;;; Define setf methods for all settable Charset properties
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
144
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
145 (defsetf charset-registry set-charset-registry)
1f50e6fe4f3f Import from CVS: tag r21-2-11
cvs
parents:
diff changeset
146 (defsetf charset-ccl-program set-charset-ccl-program)