Mercurial > hg > xemacs-beta
annotate lisp/disp-table.el @ 5117:3742ea8250b5 ben-lisp-object ben-lisp-object-final-ws-year-2005
Checking in final CVS version of workspace 'ben-lisp-object'
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sat, 26 Dec 2009 00:20:27 -0600 |
parents | 262b8bb4a523 |
children | e0db3c197671 |
rev | line source |
---|---|
219 | 1 ;;; disp-table.el --- functions for dealing with char tables. |
2 | |
3 ;; Copyright (C) 1987, 1994, 1997 Free Software Foundation, Inc. | |
4 ;; Copyright (C) 1995 Sun Microsystems. | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
5 ;; Copyright (C) 2005 Ben Wing. |
219 | 6 |
7 ;; Maintainer: XEmacs Development Team | |
8 ;; Keywords: i18n, internal | |
9 | |
10 ;; This file is part of XEmacs. | |
11 | |
12 ;; XEmacs is free software; you can redistribute it and/or modify it | |
13 ;; under the terms of the GNU General Public License as published by | |
14 ;; the Free Software Foundation; either version 2, or (at your option) | |
15 ;; any later version. | |
16 | |
17 ;; XEmacs is distributed in the hope that it will be useful, but | |
18 ;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
20 ;; General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
23 ;; along with XEmacs; see the file COPYING. If not, write to the | |
24 ;; Free Software Foundation, 59 Temple Place - Suite 330, | |
25 ;; Boston, MA 02111-1307, USA. | |
26 | |
27 ;;; Synched up with: Not synched with FSF. | |
28 | |
29 ;;; Commentary: | |
30 | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
31 ;; #### Needs work. |
219 | 32 |
33 ;; Rewritten for XEmacs July 1995, Ben Wing. | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
34 ;; November 1998?, display tables generalized to char/range tables, Hrvoje |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
35 ;; Niksic. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
36 ;; February 2005, rewrite this file to handle generalized display tables, |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
37 ;; Ben Wing. |
219 | 38 |
39 ;;; Code: | |
40 | |
41 (defun describe-display-table (dt) | |
42 "Describe the display table DT in a help buffer." | |
43 (with-displaying-help-buffer | |
44 (lambda () | |
45 (princ "\nCharacter display glyph sequences:\n") | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
46 (flet ((describe-display-table-entry |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
47 (entry stream) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
48 ;; #### Write better version |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
49 (princ entry stream)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
50 (describe-display-table-range |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
51 (first last entry) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
52 (if (eq first last) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
53 (princ (format "%s\t\t" |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
54 (single-key-description (int-char first)))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
55 (let ((str (format "%s - %s" |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
56 (single-key-description (int-char first)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
57 (single-key-description (int-char last))))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
58 (princ str) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
59 (princ (make-string (max (- 2 (/ (length str) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
60 tab-width)) 1) ?\t)))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
61 (describe-display-table-entry entry standard-output) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
62 (terpri))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
63 (cond ((vectorp dt) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
64 (save-excursion |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
65 (let ((vector (make-vector 256 nil)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
66 (i 0)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
67 (while (< i 256) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
68 (aset vector i (aref dt i)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
69 (incf i)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
70 ;; FSF calls `describe-vector' here, but it is so incredibly |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
71 ;; lame a function for that name that I cannot bring myself |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
72 ;; to port it. Here is what `describe-vector' does: |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
73 (terpri) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
74 (let ((old (aref vector 0)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
75 (oldpos 0) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
76 (i 1)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
77 (while (<= i 256) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
78 (when (or (= i 256) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
79 (not (equal old (aref vector i)))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
80 (describe-display-table-range oldpos (1- i) old) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
81 (or (= i 256) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
82 (setq old (aref vector i) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
83 oldpos i))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
84 (incf i)))))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
85 ((char-table-p dt) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
86 (describe-char-table dt 'map-char-table |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
87 'describe-display-table-entry |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
88 standard-output)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
89 ((range-table-p dt) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
90 (map-range-table |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
91 #'(lambda (beg end value) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
92 (describe-display-table-range beg end value)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
93 dt))))))) |
219 | 94 |
95 ;;;###autoload | |
96 (defun describe-current-display-table (&optional domain) | |
97 "Describe the display table in use in the selected window and buffer." | |
98 (interactive) | |
99 (or domain (setq domain (selected-window))) | |
100 (let ((disptab (specifier-instance current-display-table domain))) | |
101 (if disptab | |
102 (describe-display-table disptab) | |
103 (message "No display table")))) | |
104 | |
105 ;;;###autoload | |
106 (defun make-display-table () | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
107 "Return a new, empty display table. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
108 Modify a display table using `put-display-table'. Look up in display tables |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
109 using `get-display-table'. The exact format of display tables and their |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
110 specs is described in `current-display-table'." |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
111 ;; #### This should do something smarter. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
112 ;; #### Should use range table but there are bugs in range table and |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
113 ;; perhaps in callers not expecting this. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
114 ;(make-range-table 'start-closed-end-closed) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
115 ;(make-vector 256 nil) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
116 ;; #### Should be type `display-table' |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
117 (make-char-table 'generic)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
118 |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
119 (defun display-table-p (object) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
120 "Return t if OBJECT is a display table. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
121 See `make-display-table'." |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
122 (or (and (vectorp object) (= (length object) 256)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
123 (and (char-table-p object) (memq (char-table-type object) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
124 '(char generic display))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
125 (range-table-p object))) |
219 | 126 |
127 ;; #### we need a generic frob-specifier function. | |
128 ;; #### this also needs to be redone like frob-face-property. | |
129 | |
130 ;; Let me say one more time how much dynamic scoping sucks. | |
131 | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
132 ;; #### Need more thinking about basic primitives for modifying a specifier. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
133 ;; cf `modify-specifier-instances'. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
134 |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
135 (defun frob-display-table (fdt-function fdt-locale &optional tag-set) |
219 | 136 (or fdt-locale (setq fdt-locale 'global)) |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
137 (or (specifier-spec-list current-display-table fdt-locale tag-set) |
219 | 138 (add-spec-to-specifier current-display-table (make-display-table) |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
139 fdt-locale tag-set)) |
219 | 140 (add-spec-list-to-specifier |
141 current-display-table | |
142 (list (cons fdt-locale | |
143 (mapcar | |
144 (lambda (fdt-x) | |
145 (funcall fdt-function (cdr fdt-x)) | |
146 fdt-x) | |
147 (cdar (specifier-spec-list current-display-table | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
148 fdt-locale tag-set))))))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
149 |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
150 (defun put-display-table-range (l h spec display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
151 "Display characters in range L .. H, inclusive, in DISPLAY-TABLE using SPEC. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
152 Display tables are described in `current-display-table'." |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
153 (check-argument-type 'display-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
154 (cond ((vectorp display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
155 (while (<= l h) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
156 (aset display-table l spec) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
157 (setq l (1+ l)))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
158 ((char-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
159 (while (<= l h) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
160 (put-char-table l spec display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
161 (setq l (1+ l)))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
162 ((range-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
163 (put-range-table l h spec display-table)))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
164 |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
165 (defun put-display-table (ch spec display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
166 "Display character spec CH in DISPLAY-TABLE using SPEC. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
167 CH can be a character, a charset, or t for all characters. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
168 Display tables are described in `current-display-table'." |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
169 (cond ((eq ch t) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
170 (cond ((vectorp display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
171 (put-display-table-range 0 (1- (length display-table)) spec |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
172 display-table)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
173 ((range-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
174 ; major hack |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
175 (put-display-table-range 0 (string-to-int "3FFFFFFF" 16) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
176 spec display-table)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
177 ((char-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
178 (put-char-table t spec display-table)))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
179 ((charsetp ch) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
180 (cond ((vectorp display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
181 ;; #### fix |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
182 nil) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
183 ((range-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
184 ;; #### fix |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
185 nil) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
186 ((char-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
187 (put-char-table ch spec display-table)))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
188 (t (put-display-table-range ch ch spec display-table)))) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
189 |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
190 (defun get-display-table (char display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
191 "Return SPEC of CHAR in DISPLAY-TABLE. |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
192 See `current-display-table'." |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
193 (check-argument-type 'display-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
194 (cond ((vectorp display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
195 (aref display-table char)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
196 ((char-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
197 (get-char-table char display-table)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
198 ((range-table-p display-table) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
199 (get-range-table char display-table)))) |
219 | 200 |
201 (defun standard-display-8bit-1 (dt l h) | |
202 (while (<= l h) | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
203 (put-display-table l (char-to-string l) dt) |
219 | 204 (setq l (1+ l)))) |
205 | |
206 ;;;###autoload | |
207 (defun standard-display-8bit (l h &optional locale) | |
208 "Display characters in the range L to H literally." | |
209 (frob-display-table | |
210 (lambda (x) | |
211 (standard-display-8bit-1 x l h)) | |
212 locale)) | |
213 | |
214 (defun standard-display-default-1 (dt l h) | |
215 (while (<= l h) | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
216 (put-display-table l nil dt) |
219 | 217 (setq l (1+ l)))) |
218 | |
219 ;;;###autoload | |
220 (defun standard-display-default (l h &optional locale) | |
221 "Display characters in the range L to H using the default notation." | |
222 (frob-display-table | |
223 (lambda (x) | |
224 (standard-display-default-1 x l h)) | |
225 locale)) | |
226 | |
227 ;;;###autoload | |
228 (defun standard-display-ascii (c s &optional locale) | |
229 "Display character C using printable string S." | |
230 (frob-display-table | |
231 (lambda (x) | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
232 (put-display-table c s x)) |
219 | 233 locale)) |
234 | |
235 ;;;###autoload | |
236 (defun standard-display-g1 (c sc &optional locale) | |
237 "Display character C as character SC in the g1 character set. | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
238 This only has an effect on TTY devices and assumes that your terminal uses |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
239 the SO/SI characters." |
219 | 240 (frob-display-table |
241 (lambda (x) | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
242 (put-display-table c (concat "\016" (char-to-string sc) "\017") x)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
243 locale |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
244 'tty)) |
219 | 245 |
246 ;;;###autoload | |
247 (defun standard-display-graphic (c gc &optional locale) | |
248 "Display character C as character GC in graphics character set. | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
249 This only has an effect on TTY devices and assumes VT100-compatible escapes." |
219 | 250 (frob-display-table |
251 (lambda (x) | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
252 (put-display-table c (concat "\e(0" (char-to-string gc) "\e(B") x)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
253 locale |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
254 'tty)) |
219 | 255 |
256 ;;; #### the FSF equivalent of this makes this character be displayed | |
257 ;;; in the 'underline face. There's no current way to do this with | |
258 ;;; XEmacs display tables. | |
259 | |
260 ;;;###autoload | |
261 (defun standard-display-underline (c uc &optional locale) | |
262 "Display character C as character UC plus underlining." | |
263 (frob-display-table | |
264 (lambda (x) | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
265 (put-display-table c (concat "\e[4m" (char-to-string uc) "\e[m") x)) |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
266 locale |
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
267 'tty)) |
219 | 268 |
269 ;;;###autoload | |
270 (defun standard-display-european (arg &optional locale) | |
271 "Toggle display of European characters encoded with ISO 8859. | |
272 When enabled, characters in the range of 160 to 255 display not | |
273 as octal escapes, but as accented characters. | |
274 With prefix argument, enable European character display iff arg is positive." | |
275 (interactive "P") | |
276 (frob-display-table | |
277 (lambda (x) | |
278 (if (or (<= (prefix-numeric-value arg) 0) | |
279 (and (null arg) | |
5117
3742ea8250b5
Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents:
219
diff
changeset
|
280 (equal (get-display-table 160 x) (char-to-string 160)))) |
219 | 281 (standard-display-default-1 x 160 255) |
282 (standard-display-8bit-1 x 160 255))) | |
283 locale)) | |
284 | |
285 (provide 'disp-table) | |
286 | |
287 ;;; disp-table.el ends here |