Mercurial > hg > xemacs-beta
diff lisp/prim/disp-table.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | ac2d302a0011 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/prim/disp-table.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,178 @@ +;;; disp-table.el --- functions for dealing with char tables. + +;; Copyright (C) 1987, 1994 Free Software Foundation, Inc. +;; Copyright (C) 1995 Sun Microsystems. + +;; Author: Howard Gayle +;; Maintainer: FSF +;; Keywords: i18n + +;; This file is part of XEmacs. + +;; XEmacs is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; XEmacs is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with XEmacs; see the file COPYING. If not, write to the Free +;; Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;;; Synched up with: Not synched with FSF. + +;;; #### Need lots of work. make-display-table depends on a value +;;; that is a define in the C code. Maybe we should just move the +;;; function into C. + +;;; #### display-tables-as-vectors is really evil and a big pain in +;;; the ass. + +;;; Rewritten for XEmacs July 1995, Ben Wing. + +;;; Code: + +(defun describe-display-table (dt) + "Describe the display table DT in a help buffer." + (with-displaying-help-buffer + (princ "\nCharacter display glyph sequences:\n") + (save-excursion + (set-buffer standard-output) + (let ((vector (make-vector 256 nil)) + (i 0)) + (while (< i 256) + (aset vector i (aref dt i)) + (setq i (1+ i))) + (describe-vector vector))))) + +;;;###autoload +(defun describe-current-display-table (&optional domain) + "Describe the display table in use in the selected window and buffer." + (interactive) + (or domain (setq domain (selected-window))) + (let ((disptab (specifier-instance current-display-table domain))) + (if disptab + (describe-display-table disptab) + (message "No display table")))) + +;;;###autoload +(defun make-display-table () + "Return a new, empty display table." + (make-vector 256 nil)) + +;; #### we need a generic frob-specifier function. +;; #### this also needs to be redone like frob-face-property. + +;; Let me say one more time how much dynamic scoping sucks. + +(defun frob-display-table (fdt-function fdt-locale) + (or fdt-locale (setq fdt-locale 'global)) + (or (specifier-spec-list current-display-table fdt-locale) + (add-spec-to-specifier current-display-table (make-display-table) + fdt-locale)) + (add-spec-list-to-specifier + current-display-table + (list (cons fdt-locale + (mapcar + #'(lambda (fdt-x) + (funcall fdt-function (cdr fdt-x)) + fdt-x) + (cdar (specifier-spec-list current-display-table + fdt-locale))))))) + +(defun standard-display-8bit-1 (dt l h) + (while (<= l h) + (aset dt l (char-to-string l)) + (setq l (1+ l)))) + +;;;###autoload +(defun standard-display-8bit (l h &optional locale) + "Display characters in the range L to H literally." + (frob-display-table + #'(lambda (x) + (standard-display-8bit-1 x l h)) + locale)) + +(defun standard-display-default-1 (dt l h) + (while (<= l h) + (aset dt l nil) + (setq l (1+ l)))) + +;;;###autoload +(defun standard-display-default (l h &optional locale) + "Display characters in the range L to H using the default notation." + (frob-display-table + #'(lambda (x) + (standard-display-default-1 x l h)) + locale)) + +;;;###autoload +(defun standard-display-ascii (c s &optional locale) + "Display character C using printable string S." + (frob-display-table + #'(lambda (x) + (aset x c s)) + locale)) + + +;;; #### should frob in a 'tty locale. + +;;;###autoload +(defun standard-display-g1 (c sc &optional locale) + "Display character C as character SC in the g1 character set. +This function assumes that your terminal uses the SO/SI characters; +it is meaningless for an X frame." + (frob-display-table + #'(lambda (x) + (aset x c (concat "\016" (char-to-string sc) "\017"))) + locale)) + + +;;; #### should frob in a 'tty locale. + +;;;###autoload +(defun standard-display-graphic (c gc &optional locale) + "Display character C as character GC in graphics character set. +This function assumes VT100-compatible escapes; it is meaningless for an +X frame." + (frob-display-table + #'(lambda (x) + (aset x c (concat "\e(0" (char-to-string gc) "\e(B"))) + locale)) + +;;; #### should frob in a 'tty locale. +;;; #### the FSF equivalent of this makes this character be displayed +;;; in the 'underline face. There's no current way to do this with +;;; XEmacs display tables. + +;;;###autoload +(defun standard-display-underline (c uc &optional locale) + "Display character C as character UC plus underlining." + (frob-display-table + #'(lambda (x) + (aset x c (concat "\e[4m" (char-to-string uc) "\e[m"))) + locale)) + +;;;###autoload +(defun standard-display-european (arg &optional locale) + "Toggle display of European characters encoded with ISO 8859. +When enabled, characters in the range of 160 to 255 display not +as octal escapes, but as accented characters. +With prefix argument, enable European character display iff arg is positive." + (interactive "P") + (frob-display-table + #'(lambda (x) + (if (or (<= (prefix-numeric-value arg) 0) + (and (null arg) + (equal (aref x 160) (char-to-string 160)))) + (standard-display-default-1 x 160 255) + (standard-display-8bit-1 x 160 255))) + locale)) + +(provide 'disp-table) + +;;; disp-table.el ends here