comparison lisp/packages/lispm-fonts.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children 0293115a14e9
comparison
equal deleted inserted replaced
-1:000000000000 0:376386a54a3c
1 ;;; lispm-fonts.el --- quick hack to parse LISPM-style font-shift codes
2
3 ;; Keywords: faces
4
5 ;; Copyright (C) 1992-1993 Free Software Foundation, Inc.
6
7 ;; This file is part of XEmacs.
8
9 ;; XEmacs is free software; you can redistribute it and/or modify it
10 ;; under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 2, or (at your option)
12 ;; any later version.
13
14 ;; XEmacs is distributed in the hope that it will be useful, but
15 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 ;; General Public License for more details.
18
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with XEmacs; see the file COPYING. If not, write to the Free
21 ;; Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22
23 ;;; Synched up with: Not in FSF.
24
25 ;; This only copes with MIT/LMI/TI style font shifts, not Symbolics.
26 ;; It doesn't do diagram lines (ha ha). It doesn't do output. That
27 ;; has to wait until it is possible to attach faces to characters
28 ;; instead of just intervals, since this code is really talking about
29 ;; attributes of the text instead of attributes of regions of the
30 ;; buffer. We could do it by mapping over the extents and hacking
31 ;; the overlaps by hand, but that would be hard.
32
33 (make-face 'variable)
34 (or (face-differs-from-default-p 'variable)
35 (set-face-font 'variable
36 "-*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*"))
37
38 (make-face 'variable-bold)
39 (or (face-differs-from-default-p 'variable-bold)
40 (progn
41 ;; This is no good because helvetica-12-bold is a LOT larger than
42 ;; helvetica-12-medium. Someone really blew it there.
43 ;; (copy-face 'variable 'variable-bold)
44 ;; (make-face-bold 'variable-bold)
45 (set-face-font 'variable-bold
46 "-*-helvetica-bold-r-*-*-*-100-*-*-*-*-*-*")))
47
48 (make-face 'variable-italic)
49 (or (face-differs-from-default-p 'variable-italic)
50 (progn
51 (copy-face 'variable-bold 'variable-italic) ; see above
52 (make-face-unbold 'variable-italic)
53 (make-face-italic 'variable-italic)))
54
55 (make-face 'variable-bold-italic)
56 (or (face-differs-from-default-p 'variable-bold-italic)
57 (progn
58 (copy-face 'variable-bold 'variable-bold-italic)
59 (make-face-italic 'variable-bold-italic)))
60
61 (defconst lispm-font-to-face
62 '(("tvfont" . default)
63 ("cptfont" . default)
64 ("cptfontb" . bold)
65 ("cptfonti" . italic)
66 ("cptfontbi" . bold-italic)
67 ("base-font" . default)
68 ("bigfnt" . bold)
69 ("cmb8" . variable-bold)
70 ("higher-medfnb" . bold)
71 ("higher-tr8" . default)
72 ("medfnb" . bold)
73 ("medfnt" . normal)
74 ("medfntb" . bold)
75 ("wider-font" . bold)
76 ("wider-medfnt" . bold)
77 ("mets" . variable-large)
78 ("metsb" . variable-large-bold)
79 ("metsbi" . variable-large-bold-italic)
80 ("metsi" . variable-large-italic)
81 ("cmr5" . variable)
82 ("cmr10" . variable)
83 ("cmr18" . variable)
84 ("cmold" . variable)
85 ("cmdunh" . variable)
86 ("hl10" . variable)
87 ("hl10b" . variable-bold)
88 ("hl12" . variable)
89 ("hl12b" . variable-bold)
90 ("hl12bi" . variable-bold-italic)
91 ("hl12i" . variable-italic)
92 ("hl6" . variable)
93 ("hl7" . variable)
94 ("tr10" . variable)
95 ("tr10b" . variable-bold)
96 ("tr10bi" . variable-bold-italic)
97 ("tr10i" . variable-italic)
98 ("tr12" . variable)
99 ("tr12b" . variable-bold)
100 ("tr12bi" . variable-bold-italic)
101 ("tr12i" . variable-italic)
102 ("tr18" . variable-large)
103 ("tr18b" . variable-large-bold)
104 ("tr8" . variable)
105 ("tr8b" . variable-bold)
106 ("tr8i" . variable-italic)
107 ("5x5" . small)
108 ("tiny" . small)
109 ("43vxms" . variable-large)
110 ("courier" . bold)
111 ("adobe-courier10" . default)
112 ("adobe-courier14" . bold)
113 ("adobe-courier10b" . bold)
114 ("adobe-courier14b" . bold)
115 ("adobe-hl12" . variable)
116 ("adobe-hl14" . variable)
117 ("adobe-hl14b" . variable-bold)
118 )
119 "Alist of LISPM font names to Emacs face names.")
120
121
122 (defun lispm-font-to-face (lispm-font)
123 (if (symbolp lispm-font)
124 (setq lispm-font (symbol-name lispm-font)))
125 (let ((case-fold-search t)
126 face)
127 (setq lispm-font (downcase lispm-font))
128 (if (string-match "^fonts:+" lispm-font)
129 (setq lispm-font (substring lispm-font (match-end 0))))
130 (if (setq face (cdr (assoc lispm-font lispm-font-to-face)))
131 (if (find-face face)
132 face
133 (message "warning: unknown face %s" face)
134 'default)
135 (message "warning: unknown Lispm font %s" (upcase lispm-font))
136 'default)))
137
138 (defvar fonts) ; the -*- line of the file will set this.
139
140 (defun lispm-fontify-hack-local-variables ()
141 ;; Sometimes code has font-shifts in the -*- line, which means that the
142 ;; local variables will have been read incorrectly by the emacs-lisp reader.
143 ;; In particular, the `fonts' variable might be corrupted. So if there
144 ;; are font-shifts in the prop line, re-parse it.
145 (if (or (not (boundp 'fonts))
146 (null 'fonts)
147 (let ((case-fold-search t))
148 (and (looking-at "[ \t]*;.*-\\*-.*fonts[ \t]*:.*-\\*-")
149 (looking-at ".*\^F"))))
150 (save-excursion
151 (save-restriction
152 (end-of-line)
153 (narrow-to-region (point-min) (point))
154 (goto-char (point-min))
155 (while (re-search-forward "\^F[0-9a-zA-Z*]" nil t)
156 (delete-region (match-beginning 0) (match-end 0)))
157 (let ((enable-local-variables 'query))
158 (hack-local-variables))))))
159
160 (defun lispm-fontify-buffer ()
161 (save-excursion
162 (goto-char (point-min))
163 (if (fboundp 'font-lock-mode) (font-lock-mode 0))
164 (lispm-fontify-hack-local-variables)
165 (let ((font-stack nil)
166 (p (point))
167 c)
168 (while (search-forward "\^F" nil t)
169 (delete-char -1)
170 (setq c (following-char))
171 (delete-char 1)
172 (cond ((= c ?\^F)
173 (insert "\^F"))
174 ((= c ?*)
175 (if (and font-stack (/= p (point)))
176 (set-extent-face (make-extent p (point)) (car font-stack)))
177 (setq p (point))
178 (setq font-stack (cdr font-stack)))
179 ((or (< c ?0) (> c ?Z)) ; error...
180 nil)
181 ((>= (setq c (- c ?0)) (length fonts)) ; error...
182 nil)
183 (t
184 (if (and font-stack (/= p (point)))
185 (set-extent-face (make-extent p (point)) (car font-stack)))
186 (setq font-stack (cons (lispm-font-to-face (nth c fonts))
187 font-stack))
188 (setq p (point)))))
189 (if (and font-stack (/= p (point)))
190 (set-extent-face (make-extent p (point)) (car font-stack))))))