[erc] buffer-file-truename vs. erc [was vs. info.el]
17 years, 11 months
Stephen J. Turnbull
[Adrian, since this affects ERC, too, would you please take a look at
this patch? It's correct in theory, but I don't know anything about
ERC.]
Nelson Ferreira writes:
> I am sorry, but should there have been a patch attached?
Yes; you should have received the resend by now. Very sorry about that!
> This has also happened to me in some ERC buffers, specially the ones
> where part of the history from logs were pulled out from the disk. I
> will try to remember if there were any more cases. Those 2 are
> certainly the ones I encounter repeatedly.
Thanks! I've taken a look at ERC. I have no idea what they think
they're doing here in erc-log.el:
;;;functionality referenced from erc.el
(defun erc-log-setup-logging ()
"Setup the buffer-local logging variables in the current buffer.
This function is destined to be run from `erc-connect-pre-hook'."
(when (erc-logging-enabled)
(auto-save-mode -1)
(setq buffer-offer-save t
buffer-file-name "")
;; code continues ...
The empty string looks very suspicious, I can't see how anything good
might come of it. I propose changing it to nil and setq'ing
buffer-file-truename to nil, too, to maintain the invariant. If that
doesn't work, you might need to change it to something like
(setq buffer-offer-save t
buffer-file-name (erc-current-logfile buffer)
buffer-file-truename (file-truename buffer-file-name))
or you could try
(setq buffer-offer-save t
buffer-file-name ""
buffer-file-truename (file-truename buffer-file-name))
but it all seems very hackish.
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/erc/ChangeLog,v
retrieving revision 1.40
diff -U0 -r1.40 ChangeLog
--- ChangeLog 2 May 2006 06:38:43 -0000 1.40
+++ ChangeLog 14 Nov 2006 09:02:44 -0000
@@ -0,0 +1,5 @@
+2006-11-14 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * erc-dcc.el (erc-dcc-find-file,erc-log-setup-logging):
+ Maintain buffer-file-name invariant.
+
Index: erc-dcc.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/erc/erc-dcc.el,v
retrieving revision 1.9
diff -u -r1.9 erc-dcc.el
--- erc-dcc.el 19 Feb 2006 12:57:28 -0000 1.9
+++ erc-dcc.el 14 Nov 2006 09:02:50 -0000
@@ -776,7 +776,9 @@
(defun erc-dcc-find-file (file)
(with-current-buffer (generate-new-buffer (file-name-nondirectory file))
(insert-file-contents-literally file)
- (setq buffer-file-name file)
+ ;; XEmacs change: maintain invariant for truename vs. name.
+ (setq buffer-file-name file
+ buffer-file-truename (file-truename buffer-file-name))
(current-buffer)))
(defun erc-dcc-file-to-name (file)
Index: erc-log.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/erc/erc-log.el,v
retrieving revision 1.9
diff -u -r1.9 erc-log.el
--- erc-log.el 19 Feb 2006 12:57:29 -0000 1.9
+++ erc-log.el 14 Nov 2006 09:02:51 -0000
@@ -219,7 +219,8 @@
(when (erc-logging-enabled)
(auto-save-mode -1)
(setq buffer-offer-save t
- buffer-file-name "")
+ buffer-file-name nil
+ buffer-file-truename nil)
(cond ((boundp 'write-file-functions)
(set (make-local-variable 'write-file-functions)
'(erc-save-buffer-in-logs)))
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
Re: [PATCH] empty charset registry?
17 years, 11 months
Stephen J. Turnbull
Aidan Kehoe writes:
> The first X11 release with the current server-side font
> architecture, X11R5, shipped with a long list of ISO-8859-1
> fonts. So, I am inclined to add the following. Any comments?
If you can't find any font with "*", why would you expect a match with
"*-iso8859-1"? This is quite unintuitive.
After integrating your patches, I get a crash in temacs in a tree
almost identical to CVS HEAD, in an Xft build on Mac OS X with the
X.org server and libraries, in face initialization. Have you done an
Xft build with this stuff yet?
I dunno, Aidan. It's not your fault that X goes belly-up whenever you
hand it something it doesn't expect, but it is a fact that it does. I
don't really see any good reason to suppose that there aren't several
more crashes lurking, because you've completely changed the model. Up
to now, we assumed that we could choose from the whole list of fonts.
Now we have to get the query right. But querying X servers has always
been less than reliable.
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
[PATCH] Pay more attention to the the locale's coding systems on startup
17 years, 11 months
Aidan Kehoe
Problems with this patch:
1. It doesn’t deal with the @modifier syntax in Unix locale specifications,
which are structured like so:
language[_territory][.codeset][@modifier]
2. It’s relatively complex code to be called so early on startup.
Advantages to this patch:
1. More stuff just works under Unix; in particular, the coding system
reflects the user’s environment much more consistently--it adds some support
for ISO-8859-15 locales, which previously were treated identically to
iso-8859-1.
2. It’s possible for me to start up in, for example, the directory
"/tmp/aidan/за родину!" with a LC_CTYPE setting of en_US.UTF-8, and have
XEmacs treat the current directory’s name as being encoded in UTF-8.
lisp/ChangeLog addition:
2006-11-12 Aidan Kehoe <kehoea(a)parhasard.net>
* mule/mule-cmds.el (get-language-environment-from-locale):
If the Unix locale matches, and the language environment doesn't
use the coding system specified in that locale, create a new one
on the fly that does, and return that language environment.
XEmacs Trunk source patch:
Diff command: cvs -q diff -Nu
Files affected: lisp/mule/mule-cmds.el
===================================================================
RCS
Index: lisp/mule/mule-cmds.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/mule/mule-cmds.el,v
retrieving revision 1.27
diff -u -u -r1.27 mule-cmds.el
--- lisp/mule/mule-cmds.el 2005/12/24 21:59:21 1.27
+++ lisp/mule/mule-cmds.el 2006/11/12 17:59:40
@@ -1018,23 +1018,64 @@
"Convert LOCALE into a language environment.
LOCALE is a C library locale string, as returned by `current-locale'.
Uses the `locale' property of the language environment."
- (or (gethash locale langenv-to-locale-hash)
- (let ((retval
- (block langenv
- (dolist (langcons language-info-alist)
- (let* ((lang (car langcons))
- (locs (get-language-info lang 'locale))
- (case-fold-search t))
- (dolist (loc (if (listp locs) locs (list locs)))
- (if (cond ((functionp loc)
- (funcall loc locale))
- ((stringp loc)
- (string-match
- (concat "^" loc "\\([^A-Za-z0-9]\\|$\\)")
- locale)))
- (return-from langenv lang))))))))
- (puthash locale retval langenv-to-locale-hash)
- retval)))
+ (or
+ (gethash locale langenv-to-locale-hash)
+ (let ((retval
+ (block langenv
+ (dolist (langcons language-info-alist)
+ (let* ((lang (car langcons))
+ (locs (get-language-info lang 'locale))
+ (case-fold-search t)
+ (coding-system-name ""))
+ (dolist (loc (if (listp locs) locs (list locs)))
+ (if (cond ((functionp loc)
+ (funcall loc locale))
+ ((stringp loc)
+ (when (string-match
+ (concat "^" loc
+ "\\([^A-Za-z0-9]\\|$\\)")
+ locale)
+ ; (debug-print "Dealing with language %s"
+ ; loc)
+ (setq coding-system-name
+ (replace-in-string
+ (replace-in-string
+ (or
+ (downcase
+ (or (car-safe
+ (nreverse
+ (split-string locale "\\."
+ t)))
+ locale)) locale)
+ "iso8859" "iso-8859" t)
+ "euc\\([^-]\\)" "euc-\\1"))
+ ; (debug-print "coding system name is %s"
+ ; coding-system-name)
+ (if (eq (find-coding-system
+ (intern coding-system-name))
+ (get-language-info
+ lang 'native-coding-system))
+ lang
+ (set-language-info-alist
+ (setq lang (concat
+ lang " ("
+ coding-system-name ")"))
+ (destructive-plist-to-alist
+ (plist-put
+ (plist-put
+ (alist-to-plist (cdr langcons))
+ 'native-coding-system
+ (intern coding-system-name))
+ 'coding-system
+ (cons
+ (intern coding-system-name)
+ (cdr
+ (assoc 'coding-system
+ (cdr langcons))))))))
+ t)))
+ (return-from langenv lang))))))))
+ (puthash locale retval langenv-to-locale-hash)
+ retval)))
(defun mswindows-get-language-environment-from-locale (ms-locale)
"Convert MS-LOCALE (an MS Windows locale) into a language environment.
--
Santa Maradona, priez pour moi!
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
[PATCH] CVS Emacs syncs for calendar
17 years, 11 months
Jeff Miller
Fixes for determination of Daylight Saving Time start/stop.
Addition of cal-html, creates web pages from your diary
entries.
I intend to commit this tomorrow (Nov 12).
Jeff
ChangeLog addition:
2006-11-11 Jeff Miller <jeff.miller(a)xemacs.org>
* calendar/cal-dst.el: Do not assume DST starts/ends on the same
date in every year.
(calendar-dst-check-each-year-flag): New customizable variable.
(calendar-dst-find-data): New function, extracted from
calendar-current-time-zone.
(calendar-current-time-zone): Use calendar-dst-find-data.
(calendar-dst-transition-cache): New variable.
(calendar-dst-find-startend, calendar-dst-starts)
(calendar-dst-ends): New functions.
(calendar-daylight-savings-starts)
(calendar-daylight-savings-ends): Change value to use
calendar-dst-starts, calendar-dst-ends; respectively.
* calendar/calendar.el (cal-html-cursor-month)
(cal-html-cursor-year): Add autoloads for this new package.
(calendar-mode-map): Bind cal-html-cursor-month,
cal-html-cursor-year.
* calendar/cal-html.el: New file.
* calendar/calendar.el (european-calendar-style): Call
european-calendar or american-calendar as needed when set.
(diary-view-entries, list-calendar-holidays): Move autoloads
before use.
calendar source patch:
Diff command: cvs -q diff -uN
Files affected: calendar.el cal-html.el cal-dst.el Makefile
Index: Makefile
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/calendar/Makefile,v
retrieving revision 1.36
diff -u -u -r1.36 Makefile
--- Makefile 2006/10/31 08:35:27 1.36
+++ Makefile 2006/11/11 23:53:28
@@ -31,7 +31,8 @@
cal-xemacs.elc calendar.elc diary-lib.elc holidays.elc cal-tex.elc \
cal-hebrew.elc cal-islam.elc cal-iso.elc cal-move.elc cal-persia.elc\
cal-china.elc cal-coptic.elc cal-julian.elc lunar.elc solar.elc \
- todo-mode.elc timeclock.elc cal-bahai.elc icalendar.elc cal-compat.elc
+ todo-mode.elc timeclock.elc cal-bahai.elc icalendar.elc cal-compat.elc \
+ cal-html.elc
ifeq ($(BUILD_WITHOUT_MULE),)
ELCS += cal-japanese.elc
Index: cal-dst.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/calendar/cal-dst.el,v
retrieving revision 1.6
diff -u -u -r1.6 cal-dst.el
--- cal-dst.el 2006/10/23 01:25:28 1.6
+++ cal-dst.el 2006/11/11 23:53:28
@@ -44,6 +44,16 @@
(require 'calendar)
(require 'cal-persia)
+(defcustom calendar-dst-check-each-year-flag t
+ "Non-nil means to check each year for DST transitions as needed.
+Otherwise assume the next two transitions found after the
+current date apply to all years. This is faster, but not always
+correct, since the dates of Daylight Saving transitions sometimes
+change."
+:type 'boolean
+:version "22.1"
+:group 'calendar)
+
(defvar calendar-current-time-zone-cache nil
"Cache for result of calendar-current-time-zone.")
@@ -201,6 +211,74 @@
(cdr candidate-rules)))
(car candidate-rules)))
+;; TODO it might be better to extract this information directly from
+;; the system timezone database. But cross-platform...?
+;; See thread
+;; http://lists.gnu.org/archive/html/emacs-pretest-bug/2006-11/msg00060.html
+(defun calendar-dst-find-data (&optional time)
+ "Find data on the first Daylight Saving Time transitions after TIME.
+TIME defaults to `current-time'. Return value is as described
+for `calendar-current-time-zone'."
+ (let* ((t0 (or time (current-time)))
+ (t0-zone (current-time-zone t0))
+ (t0-utc-diff (car t0-zone))
+ (t0-name (car (cdr t0-zone))))
+ (if (not t0-utc-diff)
+ ;; Little or no time zone information is available.
+ (list nil nil t0-name t0-name nil nil nil nil)
+ (let* ((t1 (calendar-next-time-zone-transition t0))
+ (t2 (and t1 (calendar-next-time-zone-transition t1))))
+ (if (not t2)
+ ;; This locale does not have daylight savings time.
+ (list (/ t0-utc-diff 60) 0 t0-name t0-name nil nil 0 0)
+ ;; Use heuristics to find daylight savings parameters.
+ (let* ((t1-zone (current-time-zone t1))
+ (t1-utc-diff (car t1-zone))
+ (t1-name (car (cdr t1-zone)))
+ (t1-date-sec (calendar-absolute-from-time t1 t0-utc-diff))
+ (t2-date-sec (calendar-absolute-from-time t2 t1-utc-diff))
+ ;; TODO When calendar-dst-check-each-year-flag is non-nil,
+ ;; the rules can be simpler than they currently are.
+ (t1-rules (calendar-time-zone-daylight-rules
+ (car t1-date-sec) t0-utc-diff))
+ (t2-rules (calendar-time-zone-daylight-rules
+ (car t2-date-sec) t1-utc-diff))
+ (t1-time (/ (cdr t1-date-sec) 60))
+ (t2-time (/ (cdr t2-date-sec) 60)))
+ (cons
+ (/ (min t0-utc-diff t1-utc-diff) 60)
+ (cons
+ (/ (abs (- t0-utc-diff t1-utc-diff)) 60)
+ (if (< t0-utc-diff t1-utc-diff)
+ (list t0-name t1-name t1-rules t2-rules t1-time t2-time)
+ (list t1-name t0-name t2-rules t1-rules t2-time t1-time)
+ )))))))))
+
+(defvar calendar-dst-transition-cache nil
+ "Internal cal-dst variable storing date of Daylight Saving Time transitions.
+Value is a list with elements of the form (YEAR START END), where
+START and END are expressions that when evaluated return the
+start and end dates (respectively) for DST in YEAR. Used by the
+function `calendar-dst-find-startend'.")
+
+(defun calendar-dst-find-startend (year)
+ "Find the dates in YEAR on which Daylight Saving Time starts and ends.
+Returns a list (YEAR START END), where START and END are
+expressions that when evaluated return the start and end dates,
+respectively. This function first attempts to use pre-calculated
+data from `calendar-dst-transition-cache', otherwise it calls
+`calendar-dst-find-data' (and adds the results to the cache)."
+ (let ((e (assoc year calendar-dst-transition-cache))
+ f)
+ (or e
+ (progn
+ (setq e (calendar-dst-find-data (encode-time 1 0 0 1 1 year))
+ f (nth 4 e)
+ e (list year f (nth 5 e))
+ calendar-dst-transition-cache
+ (append calendar-dst-transition-cache (list e)))
+ e))))
+
(defun calendar-current-time-zone ()
"Return UTC difference, dst offset, names and rules for current time zone.
@@ -228,42 +306,8 @@
Some operating systems cannot provide all this information to Emacs; in this
case, `calendar-current-time-zone' returns a list containing nil for the data
it can't find."
- (or
- calendar-current-time-zone-cache
- (setq
- calendar-current-time-zone-cache
- (let* ((t0 (current-time))
- (t0-zone (current-time-zone t0))
- (t0-utc-diff (car t0-zone))
- (t0-name (car (cdr t0-zone))))
- (if (not t0-utc-diff)
- ;; Little or no time zone information is available.
- (list nil nil t0-name t0-name nil nil nil nil)
- (let* ((t1 (calendar-next-time-zone-transition t0))
- (t2 (and t1 (calendar-next-time-zone-transition t1))))
- (if (not t2)
- ;; This locale does not have daylight savings time.
- (list (/ t0-utc-diff 60) 0 t0-name t0-name nil nil 0 0)
- ;; Use heuristics to find daylight savings parameters.
- (let* ((t1-zone (current-time-zone t1))
- (t1-utc-diff (car t1-zone))
- (t1-name (car (cdr t1-zone)))
- (t1-date-sec (calendar-absolute-from-time t1 t0-utc-diff))
- (t2-date-sec (calendar-absolute-from-time t2 t1-utc-diff))
- (t1-rules (calendar-time-zone-daylight-rules
- (car t1-date-sec) t0-utc-diff))
- (t2-rules (calendar-time-zone-daylight-rules
- (car t2-date-sec) t1-utc-diff))
- (t1-time (/ (cdr t1-date-sec) 60))
- (t2-time (/ (cdr t2-date-sec) 60)))
- (cons
- (/ (min t0-utc-diff t1-utc-diff) 60)
- (cons
- (/ (abs (- t0-utc-diff t1-utc-diff)) 60)
- (if (< t0-utc-diff t1-utc-diff)
- (list t0-name t1-name t1-rules t2-rules t1-time t2-time)
- (list t1-name t0-name t2-rules t1-rules t2-time t1-time)
- )))))))))))
+ (unless calendar-current-time-zone-cache
+ (setq calendar-current-time-zone-cache (calendar-dst-find-data))))
;;; The following eight defvars relating to daylight savings time should NOT be
;;; marked to go into loaddefs.el where they would be evaluated when Emacs is
@@ -295,12 +339,32 @@
"*Abbreviated name of daylight-savings time zone at `calendar-location-name'.
For example, \"EDT\" in New York City, \"PDT\" for Los Angeles.")
+
+(defun calendar-dst-starts (year)
+ "Return the date of YEAR on which Daylight Saving Time starts.
+This function respects the value of `calendar-dst-check-each-year-flag'."
+ (or (let ((expr (if calendar-dst-check-each-year-flag
+ (cadr (calendar-dst-find-startend year))
+ (nth 4 calendar-current-time-zone-cache))))
+ (if expr (eval expr)))
+ (and (not (zerop calendar-daylight-time-offset))
+ (calendar-nth-named-day 1 0 4 year))))
+
+(defun calendar-dst-ends (year)
+ "Return the date of YEAR on which Daylight Saving Time ends.
+This function respects the value of `calendar-dst-check-each-year-flag'."
+ (or (let ((expr (if calendar-dst-check-each-year-flag
+ (nth 2 (calendar-dst-find-startend year))
+ (nth 5 calendar-current-time-zone-cache))))
+ (if expr (eval expr)))
+ (and (not (zerop calendar-daylight-time-offset))
+ (calendar-nth-named-day -1 0 10 year))))
+
+
;;;###autoload
(put 'calendar-daylight-savings-starts 'risky-local-variable t)
(defvar calendar-daylight-savings-starts
- (or (car (nthcdr 4 calendar-current-time-zone-cache))
- (and (not (zerop calendar-daylight-time-offset))
- '(calendar-nth-named-day 1 0 4 year)))
+ '(calendar-dst-starts year)
"*Sexp giving the date on which daylight savings time starts.
This is an expression in the variable `year' whose value gives the Gregorian
date in the form (month day year) on which daylight savings time starts. It is
@@ -321,9 +385,7 @@
;;;###autoload
(put 'calendar-daylight-savings-ends 'risky-local-variable t)
(defvar calendar-daylight-savings-ends
- (or (car (nthcdr 5 calendar-current-time-zone-cache))
- (and (not (zerop calendar-daylight-time-offset))
- '(calendar-nth-named-day -1 0 10 year)))
+ '(calendar-dst-ends year)
"*Sexp giving the date on which daylight savings time ends.
This is an expression in the variable `year' whose value gives the Gregorian
date in the form (month day year) on which daylight savings time ends. It is
Index: cal-html.el
===================================================================
RCS file: cal-html.el
diff -N cal-html.el
--- /dev/null Sun Nov 12 00:53:25 2006
+++ cal-html.el Sun Nov 12 00:53:28 2006
@@ -0,0 +1,445 @@
+;;; cal-html.el --- functions for printing HTML calendars
+
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+;; Author: Anna M. Bigatti <bigatti(a)dima.unige.it>
+;; Keywords: calendar
+;; Human-Keywords: calendar, diary, HTML
+;; Created: 23 Aug 2002
+
+;; 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, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; This package writes HTML calendar files using the user's diary
+;; file. See the XEmacs manual for details.
+
+
+;;; Code:
+
+(require 'calendar)
+
+
+(defgroup calendar-html nil
+ "Options for HTML calendars."
+:prefix "cal-html-"
+:group 'calendar)
+
+(defcustom cal-html-directory "~/public_html"
+ "Directory for HTML pages generated by cal-html."
+:type 'string
+:group 'calendar-html)
+
+(defcustom cal-html-print-day-number-flag nil
+ "Non-nil means print the day-of-the-year number in the monthly cal-html page."
+:type 'boolean
+:group 'calendar-html)
+
+(defcustom cal-html-year-index-cols 3
+ "Number of columns in the cal-html yearly index page."
+:type 'integer
+:group 'calendar-html)
+
+(defcustom cal-html-day-abbrev-array
+ (calendar-abbrev-construct calendar-day-abbrev-array
+ calendar-day-name-array)
+ "Array of seven strings for abbreviated day names (starting with Sunday)."
+:type '(vector string string string string string string string)
+:group 'calendar-html)
+
+(defcustom cal-html-css-default
+ (concat
+ "<STYLE TYPE=\"text/css\">\n"
+ " BODY { background: #bde; }\n"
+ " H1 { text-align: center; }\n"
+ " TABLE { padding: 2pt; }\n"
+ " TH { background: #dee; }\n"
+ " TABLE.year { width: 100%; }\n"
+ " TABLE.agenda { width: 100%; }\n"
+ " TABLE.header { width: 100%; text-align: center; }\n"
+ " TABLE.minical TD { background: white; text-align: center; }\n"
+ " TABLE.agenda TD { background: white; text-align: left; }\n"
+ " TABLE.agenda TH { text-align: left; width: 20%; }\n"
+ " SPAN.NO-YEAR { color: #0b3; font-weight: bold; }\n"
+ " SPAN.ANN { color: #0bb; font-weight: bold; }\n"
+ " SPAN.BLOCK { color: #048; font-style: italic; }\n"
+ "</STYLE>\n\n")
+ "Default cal-html css style. You can override this with a \"cal.css\" file."
+:type 'string
+:group 'calendar-html)
+
+;;; End customizable variables.
+
+
+;;; HTML and CSS code constants.
+
+(defconst cal-html-e-document-string "<BR><BR>\n</BODY>\n</HTML>"
+ "HTML code for end of page.")
+
+(defconst cal-html-b-tablerow-string "<TR>\n"
+ "HTML code for beginning of table row.")
+
+(defconst cal-html-e-tablerow-string "</TR>\n"
+ "HTML code for end of table row.")
+
+(defconst cal-html-b-tabledata-string " <TD>"
+ "HTML code for beginning of table data.")
+
+(defconst cal-html-e-tabledata-string " </TD>\n"
+ "HTML code for end of table data.")
+
+(defconst cal-html-b-tableheader-string " <TH>"
+ "HTML code for beginning of table header.")
+
+(defconst cal-html-e-tableheader-string " </TH>\n"
+ "HTML code for end of table header.")
+
+(defconst cal-html-e-table-string
+ "</TABLE>\n<!-- ================================================== -->\n"
+ "HTML code for end of table.")
+
+(defconst cal-html-minical-day-format " <TD><a href=%s#%d>%d</TD>\n"
+ "HTML code for a day in the minical - links NUM to month-page#NUM.")
+
+(defconst cal-html-b-document-string
+ (concat
+ "<HTML>\n"
+ "<HEAD>\n"
+ "<TITLE>Calendar</TITLE>\n"
+ "<!--This buffer was produced by cal-html.el-->\n\n"
+ cal-html-css-default
+ "<LINK REL=\"stylesheet\" TYPE=\"text/css\" HREF=\"cal.css\">\n"
+ "</HEAD>\n\n"
+ "<BODY>\n\n")
+ "Initial block for html page.")
+
+(defconst cal-html-html-subst-list
+ '(("&" . "&")
+ ("\n" . "<BR>\n"))
+ "Alist of symbols and their HTML replacements.")
+
+
+
+(defun cal-html-comment (string)
+ "Return STRING as html comment."
+ (format "<!-- ====== %s ====== -->\n"
+ (replace-regexp-in-string "--" "++" string)))
+
+(defun cal-html-href (link string)
+ "Return a hyperlink to url LINK with text STRING."
+ (format "<A HREF=\"%s\">%s</A>" link string))
+
+(defun cal-html-h3 (string)
+ "Return STRING as html header h3."
+ (format "\n <H3>%s</H3>\n" string))
+
+(defun cal-html-h1 (string)
+ "Return STRING as html header h1."
+ (format "\n <H1>%s</H1>\n" string))
+
+(defun cal-html-th (string)
+ "Return STRING as html table header."
+ (format "%s%s%s" cal-html-b-tableheader-string string
+ cal-html-e-tableheader-string))
+
+(defun cal-html-b-table (arg)
+ "Return table tag with attribute ARG."
+ (format "\n<TABLE %s>\n" arg))
+
+(defun cal-html-monthpage-name (month year)
+ "Return name of html page for numeric MONTH and four-digit YEAR.
+For example, \"2006-08.html\" for 8 2006."
+ (format "%d-%.2d.html" year month))
+
+
+(defun cal-html-insert-link-monthpage (month year &optional change-dir)
+ "Insert a link to the html page for numeric MONTH and four-digit YEAR.
+If optional argument CHANGE-DIR is non-nil and MONTH is 1 or 2,
+the link points to a different year and so has a directory part."
+ (insert (cal-html-h3
+ (cal-html-href
+ (concat (and change-dir
+ (member month '(1 12))
+ (format "../%d/" year))
+ (cal-html-monthpage-name month year))
+ (calendar-month-name month)))))
+
+
+(defun cal-html-insert-link-yearpage (month year)
+ "Insert a link to index page for four-digit YEAR, tagged using MONTH name."
+ (insert (cal-html-h1
+ (format "%s %s"
+ (calendar-month-name month)
+ (cal-html-href "index.html" (number-to-string year))))))
+
+
+(defun cal-html-year-dir-ask-user (year)
+ "Prompt for the html calendar output directory for four-digit YEAR.
+Return the expanded directory name, which is based on
+`cal-html-directory' by default."
+ (expand-file-name (read-directory-name
+ "Enter HTML calendar directory name: "
+ (expand-file-name (format "%d" year)
+ cal-html-directory))))
+
+;;------------------------------------------------------------
+;; page header
+;;------------------------------------------------------------
+(defun cal-html-insert-month-header (month year)
+ "Insert the header for the numeric MONTH page for four-digit YEAR.
+Contains links to previous and next month and year, and current minical."
+ (insert (cal-html-b-table "class=header"))
+ (insert cal-html-b-tablerow-string)
+ (insert cal-html-b-tabledata-string) ; month links
+ (increment-calendar-month month year -1) ; previous month
+ (cal-html-insert-link-monthpage month year t) ; t --> change-dir
+ (increment-calendar-month month year 1) ; current month
+ (cal-html-insert-link-yearpage month year)
+ (increment-calendar-month month year 1) ; next month
+ (cal-html-insert-link-monthpage month year t) ; t --> change-dir
+ (insert cal-html-e-tabledata-string)
+ (insert cal-html-b-tabledata-string) ; minical
+ (increment-calendar-month month year -1)
+ (cal-html-insert-minical month year)
+ (insert cal-html-e-tabledata-string)
+ (insert cal-html-e-tablerow-string) ; end
+ (insert cal-html-e-table-string))
+
+;;------------------------------------------------------------
+;; minical: a small month calendar with links
+;;------------------------------------------------------------
+(defun cal-html-insert-minical (month year)
+ "Insert a minical for numeric MONTH of YEAR."
+ (let* ((blank-days ; at start of month
+ (mod (- (calendar-day-of-week (list month 1 year))
+ calendar-week-start-day)
+ 7))
+ (last (calendar-last-day-of-month month year))
+ (end-blank-days ; at end of month
+ (mod (- 6 (- (calendar-day-of-week (list month last year))
+ calendar-week-start-day))
+ 7))
+ (monthpage-name (cal-html-monthpage-name month year))
+ date)
+ ;; Start writing table.
+ (insert (cal-html-comment "MINICAL")
+ (cal-html-b-table "class=minical border=1 align=center"))
+ ;; Weekdays row.
+ (insert cal-html-b-tablerow-string)
+ (dotimes (i 7)
+ (insert (cal-html-th
+ (aref cal-html-day-abbrev-array
+ (mod (+ i calendar-week-start-day) 7)))))
+ (insert cal-html-e-tablerow-string)
+ ;; Initial empty slots.
+ (insert cal-html-b-tablerow-string)
+ (dotimes (i blank-days)
+ (insert
+ cal-html-b-tabledata-string
+ cal-html-e-tabledata-string))
+ ;; Numbers.
+ (dotimes (i last)
+ (insert (format cal-html-minical-day-format monthpage-name i (1+ i)))
+ ;; New row?
+ (if (and (zerop (mod (+ i 1 blank-days) 7))
+ (/= (1+ i) last))
+ (insert cal-html-e-tablerow-string
+ cal-html-b-tablerow-string)))
+ ;; End empty slots (for some browsers like konqueror).
+ (dotimes (i end-blank-days)
+ (insert
+ cal-html-b-tabledata-string
+ cal-html-e-tabledata-string)))
+ (insert cal-html-e-tablerow-string
+ cal-html-e-table-string
+ (cal-html-comment "MINICAL end")))
+
+
+;;------------------------------------------------------------
+;; year index page with minicals
+;;------------------------------------------------------------
+(defun cal-html-insert-year-minicals (year cols)
+ "Make a one page yearly mini-calendar for four-digit YEAR.
+There are 12/cols rows of COLS months each."
+ (insert cal-html-b-document-string)
+ (insert (cal-html-h1 (number-to-string year)))
+ (insert (cal-html-b-table "class=year")
+ cal-html-b-tablerow-string)
+ (dotimes (i 12)
+ (insert cal-html-b-tabledata-string)
+ (cal-html-insert-link-monthpage (1+ i) year)
+ (cal-html-insert-minical (1+ i) year)
+ (insert cal-html-e-tabledata-string)
+ (if (zerop (mod (1+ i) cols))
+ (insert cal-html-e-tablerow-string
+ cal-html-b-tablerow-string)))
+ (insert cal-html-e-tablerow-string
+ cal-html-e-table-string
+ cal-html-e-document-string))
+
+
+;;------------------------------------------------------------
+;; HTMLify
+;;------------------------------------------------------------
+
+(defun cal-html-htmlify-string (string)
+ "Protect special characters in STRING from HTML.
+Characters are replaced according to `cal-html-html-subst-list'."
+ (if (stringp string)
+ (replace-regexp-in-string
+ (regexp-opt (mapcar 'car cal-html-html-subst-list))
+ (lambda (x)
+ (cdr (assoc x cal-html-html-subst-list)))
+ string)
+ ""))
+
+
+(defun cal-html-htmlify-entry (entry)
+ "Convert a diary entry ENTRY to html with the appropriate class specifier."
+ (let ((start
+ (cond
+ ((string-match "block" (car (cddr entry))) "BLOCK")
+ ((string-match "anniversary" (car (cddr entry))) "ANN")
+ ((not (string-match
+ (number-to-string (car (cddr (car entry))))
+ (car (cddr entry))))
+ "NO-YEAR")
+ (t "NORMAL"))))
+ (format "<span class=%s>%s</span>" start
+ (cal-html-htmlify-string (cadr entry)))))
+
+
+(defun cal-html-htmlify-list (date-list date)
+ "Return a string of concatenated, HTMLified diary entries.
+DATE-LIST is a list of diary entries. Return only those matching DATE."
+ (mapconcat (lambda (x) (cal-html-htmlify-entry x))
+ (let (result)
+ (dolist (p date-list (reverse result))
+ (and (car p)
+ (calendar-date-equal date (car p))
+ (setq result (cons p result)))))
+ "<BR>\n "))
+
+
+;;------------------------------------------------------------
+;; Monthly calendar
+;;------------------------------------------------------------
+
+(autoload 'diary-list-entries "diary-lib" nil t)
+
+(defun cal-html-list-diary-entries (d1 d2)
+ "Generate a list of all diary-entries from absolute date D1 to D2."
+ (let (diary-display-hook)
+ (diary-list-entries
+ (calendar-gregorian-from-absolute d1)
+ (1+ (- d2 d1)))))
+
+
+(defun cal-html-insert-agenda-days (month year diary-list)
+ "Insert HTML commands for a range of days in monthly calendars.
+HTML commands are inserted for the days of the numeric MONTH in
+four-digit YEAR. Diary entries in DIARY-LIST are included."
+ (let ((blank-days ; at start of month
+ (mod (- (calendar-day-of-week (list month 1 year))
+ calendar-week-start-day)
+ 7))
+ (last (calendar-last-day-of-month month year))
+ date)
+ (insert "<a name=0>\n")
+ (insert (cal-html-b-table "class=agenda border=1"))
+ (dotimes (i last)
+ (setq date (list month (1+ i) year))
+ (insert
+ (format "<a name=%d></a>\n" (1+ i)) ; link
+ cal-html-b-tablerow-string
+ ;; Number & day name.
+ cal-html-b-tableheader-string
+ (if cal-html-print-day-number-flag
+ (format "<em>%d</em> "
+ (calendar-day-number date))
+ "")
+ (format "%d %s" (1+ i)
+ (aref calendar-day-name-array
+ (calendar-day-of-week date)))
+ cal-html-e-tableheader-string
+ ;; Diary entries.
+ cal-html-b-tabledata-string
+ (cal-html-htmlify-list diary-list date)
+ cal-html-e-tabledata-string
+ cal-html-e-tablerow-string)
+ ;; If end of week and not end of month, make new table.
+ (if (and (zerop (mod (+ i 1 blank-days) 7))
+ (/= (1+ i) last))
+ (insert cal-html-e-table-string
+ (cal-html-b-table
+ "class=agenda border=1")))))
+ (insert cal-html-e-table-string))
+
+
+(defun cal-html-one-month (month year dir)
+ "Write an HTML calendar file for numeric MONTH of YEAR in directory DIR."
+ (let ((diary-list (cal-html-list-diary-entries
+ (calendar-absolute-from-gregorian (list month 1 year))
+ (calendar-absolute-from-gregorian
+ (list month
+ (calendar-last-day-of-month month year)
+ year)))))
+ (with-temp-buffer
+ (insert cal-html-b-document-string)
+ (cal-html-insert-month-header month year)
+ (cal-html-insert-agenda-days month year diary-list)
+ (insert cal-html-e-document-string)
+ (write-file (expand-file-name
+ (cal-html-monthpage-name month year) dir)))))
+
+
+;;; User commands.
+
+(defun cal-html-cursor-month (month year dir)
+ "Write an HTML calendar file for numeric MONTH of four-digit YEAR.
+The output directory DIR is created if necessary. Interactively,
+MONTH and YEAR are taken from the calendar cursor position. Note
+that any existing output files are overwritten."
+ (interactive (let* ((date (calendar-cursor-to-date t))
+ (month (extract-calendar-month date))
+ (year (extract-calendar-year date)))
+ (list month year (cal-html-year-dir-ask-user year))))
+ (make-directory dir t)
+ (cal-html-one-month month year dir))
+
+(defun cal-html-cursor-year (year dir)
+ "Write HTML calendar files (index and monthly pages) for four-digit YEAR.
+The output directory DIR is created if necessary. Interactively,
+YEAR is taken from the calendar cursor position. Note that any
+existing output files are overwritten."
+ (interactive (let ((year (extract-calendar-year
+ (calendar-cursor-to-date t))))
+ (list year (cal-html-year-dir-ask-user year))))
+ (make-directory dir t)
+ (with-temp-buffer
+ (cal-html-insert-year-minicals year cal-html-year-index-cols)
+ (write-file (expand-file-name "index.html" dir)))
+ (dotimes (i 12)
+ (cal-html-one-month (1+ i) year dir)))
+
+
+(provide 'cal-html)
+
+
+;; arch-tag: 4e73377d-d2c1-46ea-a103-02c111da5f57
+;;; cal-html.el ends here
Index: calendar.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/calendar/calendar.el,v
retrieving revision 1.11
diff -u -u -r1.11 calendar.el
--- calendar.el 2006/10/23 01:25:29 1.11
+++ calendar.el 2006/11/11 23:53:28
@@ -571,11 +571,20 @@
Names can be capitalized or not, written in full (as specified by the
variable `calendar-day-name-array'), or abbreviated (as specified by
-`calendar-day-abbrev-array') with or without a period. To take effect,
-this variable should be set before the calendar package and its associates
-are loaded. Otherwise, use one of the functions `european-calendar' or
-`american-calendar' to force the appropriate update."
+`calendar-day-abbrev-array') with or without a period.
+
+Setting this variable directly does not take effect (if the
+calendar package is already loaded). Rather, use either
+\\[customize] or the functions `european-calendar' and
+`american-calendar'."
:type 'boolean
+ ;; Without :initialize (require 'calendar) throws an error because
+ ;; american-calendar is undefined at this point.
+:initialize 'custom-initialize-default
+:set (lambda (symbol value)
+ (if value
+ (european-calendar)
+ (american-calendar)))
:group 'diary)
;;;###autoload
@@ -1586,6 +1595,19 @@
(calendar-only-one-frame-setup arg))
(t (calendar-basic-setup arg))))
+(autoload 'diary-view-entries "diary-lib"
+ "Prepare and display a buffer with diary entries.
+Searches your diary file for entries that match ARG days starting with
+the date indicated by the cursor position in the displayed three-month
+calendar."
+ t)
+
+(autoload 'list-calendar-holidays "holidays"
+ "Create a buffer containing the holidays for the current calendar window.
+The holidays are those in the list `calendar-notable-days'. Returns t if any
+holidays are found, nil if not."
+ t)
+
(defun calendar-basic-setup (&optional arg)
"Display a three-month calendar in another window.
The three months appear side by side, with the current month in the middle
@@ -1653,13 +1675,6 @@
(list-calendar-holidays)))
(run-hooks 'initial-calendar-window-hook))
-(autoload 'diary-view-entries "diary-lib"
- "Prepare and display a buffer with diary entries.
-Searches your diary file for entries that match ARG days starting with
-the date indicated by the cursor position in the displayed three-month
-calendar."
- t)
-
(autoload 'view-other-diary-entries "diary-lib"
"Prepare and display buffer of diary entries from an alternative diary file.
Searches for entries that match ARG days, starting with the date indicated
@@ -1934,12 +1949,6 @@
to the date indicated by point."
t)
-(autoload 'list-calendar-holidays "holidays"
- "Create a buffer containing the holidays for the current calendar window.
-The holidays are those in the list `calendar-notable-days'. Returns t if any
-holidays are found, nil if not."
- t)
-
(autoload 'cal-tex-cursor-month "cal-tex"
"Make a buffer with LaTeX commands for the month cursor is on.
Optional prefix argument specifies number of months to be produced.
@@ -2007,6 +2016,18 @@
"Make a buffer with LaTeX commands for a year's calendar (Filofax).
Optional prefix argument specifies number of years." t)
+(autoload 'cal-html-cursor-month "cal-html"
+ "Write an HTML calendar file for numeric MONTH of four-digit YEAR.
+The output directory DIR is created if necessary. Interactively,
+MONTH and YEAR are taken from the calendar cursor position. Note
+that any existing output files are overwritten." t)
+
+(autoload 'cal-html-cursor-year "cal-html"
+ "Write HTML calendar files (index and monthly pages) for four-digit YEAR.
+The output directory DIR is created if necessary. Interactively,
+YEAR is taken from the calendar cursor position. Note that any
+existing output files are overwritten." t)
+
(autoload 'mark-calendar-holidays "holidays"
"Mark notable days in the calendar window."
t)
@@ -2294,6 +2315,8 @@
(define-key map "iBm" 'insert-monthly-bahai-diary-entry)
(define-key map "iBy" 'insert-yearly-bahai-diary-entry)
(define-key map "?" 'calendar-goto-info-node)
+ (define-key map "Hm" 'cal-html-cursor-month)
+ (define-key map "Hy" 'cal-html-cursor-year)
(define-key map "tm" 'cal-tex-cursor-month)
(define-key map "tM" 'cal-tex-cursor-month-landscape)
(define-key map "td" 'cal-tex-cursor-day)
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
[COMMIT] Update some documentation, comments; add some entries to etc/NEWS
17 years, 11 months
Aidan Kehoe
Ar an t-ochtú lá de mí na Samhain, scríobh Ilya N. Golubev:
> Your `objects.c' revision 1.32 of 2006/11/05 22:31:45 +0 changed the
> allowed MATCHSPEC values when instancing fonts. Still
> `specifier-matching-instance' docstring describes old MATCHSPEC
> format. (Let alone any `NEWS' entry.) Please fix.
Fixed, thank you for the bug report.
> Never checked whether this is the only item that depends on that
> executable code change.
APPROVE COMMIT
NOTE: This patch has been committed.
etc/ChangeLog addition:
2006-11-11 Aidan Kehoe <kehoea(a)parhasard.net>
* NEWS:
Add information on set-charset-registries, and the change to
define-specifier-tag.
man/ChangeLog addition:
2006-11-11 Aidan Kehoe <kehoea(a)parhasard.net>
* lispref/faces.texi (Face Convenience Functions):
Add information on how to specify a face's font for a given Mule
charset.
* lispref/specifiers.texi (Specifiers):
* lispref/specifiers.texi (Simple Specifier Usage):
* lispref/specifiers.texi (Specifiers In-Depth):
* lispref/specifiers.texi (Specifier Tag Functions):
* lispref/specifiers.texi (Specifier Instantiation Functions):
Update the documentation of specifiers to reflect the new support
for Mule character sets and associating tags with them.
src/ChangeLog addition:
2006-11-11 Aidan Kehoe <kehoea(a)parhasard.net>
* specifier.c:
Update the specifier-matching-instance documentation to reflect
the new format of font-specifier MATCHSPECs.
XEmacs Trunk source patch:
Diff command: cvs -q diff -Nu
Files affected: src/specifier.c
===================================================================
RCS man/lispref/specifiers.texi
===================================================================
RCS man/lispref/faces.texi
===================================================================
RCS etc/NEWS
===================================================================
RCS
Index: etc/NEWS
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/etc/NEWS,v
retrieving revision 1.76
diff -u -u -r1.76 NEWS
--- etc/NEWS 2005/07/17 20:08:40 1.76
+++ etc/NEWS 2006/11/11 15:40:46
@@ -67,6 +67,19 @@
type of mapping between characters and keysyms that it affected is no longer
in place.
+** The set-charset-registry function is deprecated.
+
+set-charset-registries replaces it; this function takes a vector of X11
+CHARSET_REGISTRY and CHARSET_ENCODINGs, and doesn't support regexp or XLFD
+wildcarding. It improves lookup performance (especially failures) for those
+X servers with large numbers of fonts.
+
+** define-specifier-tag now has an optional CHARSET-PREDICATE parameter.
+
+This allows you to create specifier tags that match over Mule character sets
+when instantiating fonts, finally making it possible to explicitly set a
+font for a charset in given face with set-face-font.
+
* Changes in XEmacs 21.4
========================
Index: man/lispref/faces.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/faces.texi,v
retrieving revision 1.7
diff -u -u -r1.7 faces.texi
--- man/lispref/faces.texi 2005/07/20 07:36:44 1.7
+++ man/lispref/faces.texi 2006/11/11 15:40:56
@@ -404,6 +404,11 @@
This function sets the font of face @var{face}. The argument @var{font}
should be a string or a font object as returned by @code{make-font}
(@pxref{Fonts}).
+
+If you want to set a face's font for a given Mule character set, you
+need to include some tags in @var{tag-set} that match that character
+set. See the documentation of @code{define-specifier-tag} and its
+@code{charset-predicate} argument.
@end deffn
@deffn Command set-face-underline-p face underline-p &optional locale tag-set how-to-add
@@ -453,8 +458,10 @@
@var{face}.
@end defun
-@defun face-font-instance face &optional domain
-This function returns the font specifier of face @var{face}.
+@defun face-font-instance face &optional domain charset
+This function returns the font specifier of face @var{face} in domain
+@var{domain} (defaulting to the selected device) with Mule charset
+@var{charset} (defaulting to ASCII).
@xref{Fonts}.
@end defun
Index: man/lispref/specifiers.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/specifiers.texi,v
retrieving revision 1.15
diff -u -u -r1.15 specifiers.texi
--- man/lispref/specifiers.texi 2005/09/26 08:41:57 1.15
+++ man/lispref/specifiers.texi 2006/11/11 15:41:06
@@ -10,9 +10,9 @@
A specifier is an object used to keep track of a property whose value
should vary according to @emph{display context}, a window, a frame, or
-device. The value of many built-in properties, such as the font,
-foreground, background, and such properties of a face and variables
-such as @code{modeline-shadow-thickness} and
+device, or a Mule character set. The value of many built-in properties,
+such as the font, foreground, background, and such properties of a face
+and variables such as @code{modeline-shadow-thickness} and
@code{top-toolbar-height}, is actually a specifier object. The
specifier object, in turn, is ``instantiated'' in a particular situation
to yield the real value of the property in the current context.
@@ -213,7 +213,7 @@
@end example
In this case, @code{specifier-instance} returns an opaque object;
-programs can't work on it, they can only pass it around. Worse, in some
+Lisp programs can't work on it, they can only pass it around. Worse, in some
environments the instantiation will fail, resulting in a different value
(when another instantiation succeeds), or worse yet, an error, if all
attempts to instantiate the specifier fail. @code{specifier-instance} is
@@ -361,29 +361,54 @@
the type of specifier). In a given specification, there may be more
than one inst-pair with the same tag set; this is unlike for locales.
-The tag set is used to restrict the sorts of devices over which the
-instantiator is valid and to uniquely identify instantiators added by a
-particular application, so that different applications can work on the
-same specifier and not interfere with each other. Each tag can have a
-@dfn{predicate} associated with it, which is a function of one argument
-(a device) that specifies whether the tag matches that particular
-device. (If a tag does not have a predicate, it matches all devices.)
-All tags in a tag set must match a device for the associated inst-pair
-to be instantiable over that device. (A null tag set is perfectly
-valid, and trivially matches all devices.)
-
-The valid device types (normally @code{x}, @code{tty}, @code{stream},
-@code{mswindows}, @code{msprinter}, and possibly @code{carbon}) and
-device classes (normally @code{color}, @code{grayscale}, and
-@code{mono}) can always be used as tags, and match devices of the
-associated type or class (@pxref{Consoles and Devices}). User-defined
-tags may be defined, with an optional predicate specified. An
-application can create its own tag, use it to mark all its
-instantiators, and be fairly confident that it will not interfere with
-other applications that modify the same specifier---Functions that add
-a specification to a specifier usually only overwrite existing
-inst-pairs with the same tag set as was given, and a particular tag or
-tag set can be specified when removing instantiators.
+The tag set is used to restrict the sorts of devices and character sets
+over which the instantiator is valid and to uniquely identify
+instantiators added by a particular application, so that different
+applications can work on the same specifier and not interfere with each
+other.
+
+Each tag can have a @dfn{device-predicate} associated with it, which is
+a function of one argument (a device) that specifies whether the tag
+matches that particular device. (If a tag does not have a predicate, it
+matches all devices.) All tags in a tag set must match a device for the
+associated inst-pair to be instantiable over that device. (A null tag
+set is perfectly valid, and trivially matches all devices.)
+
+Each tag can also have a @dfn{charset-predicate} associated with it;
+this is a function that takes one charset argument, and specifies
+whether that tag matches that particular charset. When instantiating a
+face over a given domain with a given charset, the
+@code{charset-predicate} attribute of a tag is consulted@footnote{Not
+quite the case; the result of the functions are pre-calculated and
+cached whenever @code{define-specifier-tag} or @code{make-charset} is
+called.} to decide whether this inst-pair matches the charset. If the
+@code{charset-predicate} function of a tag is unspecified, that tag
+defaults to matching all charsets.
+
+When @code{charset-predicate}s are being taken into account, the
+matching process becomes two-stage. The first stage pays attention to
+the charset predicates and the device predicates; only if there is no
+match does the second stage take place, in which charset predicates are
+ignored, and only the device predicates are relevant.
+
+The valid device types in a build (normally @code{x}, @code{tty},
+@code{stream}, @code{mswindows}, @code{msprinter}, and possibly
+@code{carbon}) and device classes (normally @code{color},
+@code{grayscale}, and @code{mono}) can always be used as tags, and match
+devices of the associated type or class (@pxref{Consoles and Devices}).
+There are also built-in tags related to font instantiation and
+translation to Unicode; they are identical to the symbols used with
+@code{specifier-matching-instance}, see the documentation of that
+function for their names.
+
+User-defined tags may be defined, with optional device and charset
+predicates specified. An application can create its own tag, use it to
+mark all its instantiators, and be fairly confident that it will not
+interfere with other applications that modify the same
+specifier---functions that add a specification to a specifier usually
+only overwrite existing inst-pairs with the same tag set as was given,
+and a particular tag or tag set can be specified when removing
+instantiators.
When a specifier is instantiated in a domain, both the locale and the tag
set can be viewed as specifying necessary conditions that must apply in
@@ -1141,16 +1166,24 @@
opposed to a list) because the order of the tags or the number of times
a particular tag occurs does not matter.
-Each tag has a predicate associated with it, which specifies whether
+Each tag has a device predicate associated with it, which specifies whether
that tag applies to a particular device. The tags which are device
types and classes match devices of that type or class. User-defined
-tags can have any predicate, or none (meaning that all devices match).
+tags can have any device predicate, or none (meaning that all devices match).
When attempting to instantiate a specifier, a particular instantiator is
only considered if the device of the domain being instantiated over matches
all tags in the tag set attached to that instantiator.
+Each tag can also have a charset predicate, specifying whether that tag
+applies to a particular charset. There are a few tags with predefined
+charset predicates created to allow sensible fallbacks in the face
+code---see the output of @code{(specifier-fallback (face-font
+'default))} for these.
+
Most of the time, a tag set is not specified, and the instantiator gets
-a null tag set, which matches all devices.
+a null tag set, which matches all devices and all character sets (when
+possible; fonts with an inappropriate repertoire will not match, for
+example).
@defun valid-specifier-tag-p tag
This function returns non-@code{nil} if @var{tag} is a valid specifier
@@ -1175,11 +1208,15 @@
the tag set.
@end defun
-@defun define-specifier-tag tag &optional predicate
-This function defines a new specifier tag. If @var{predicate} is
+@defun define-specifier-tag tag &optional device-predicate charset-predicate
+This function defines a new specifier tag. If @var{device-predicate} is
specified, it should be a function of one argument (a device) that
specifies whether the tag matches that particular device. If
-@var{predicate} is omitted, the tag matches all devices.
+@var{device-predicate} is omitted, the tag matches all devices.
+
+If @var{charset-predicate} is specified, it should be a function taking
+one character set argument that specifies whether the tag matches that
+particular character set.
You can redefine an existing user-defined specifier tag. However, you
cannot redefine the built-in specifier tags (the device types and
@@ -1196,9 +1233,13 @@
This function returns a list of all currently-defined specifier tags.
This includes the built-in ones (the device types and classes).
@end defun
+
+@defun specifier-tag-device-predicate tag
+This function returns the device predicate for the given specifier tag.
+@end defun
-@defun specifier-tag-predicate tag
-This function returns the predicate for the given specifier tag.
+@defun specifier-tag-charset-predicate tag
+This function returns the charset predicate for the given specifier tag.
@end defun
@node Specifier Instantiation Functions
@@ -1280,13 +1321,29 @@
implemented.)
@item
For font specifiers, @var{matchspec} should be a list (@var{charset}
-. @var{second-stage-p}), and the specification (a font string) must have
-a registry that matches the charset's registry. (This only makes sense
-with Mule support.) This makes it easy to choose a font that can
-display a particular character. (This is what redisplay does, in fact.)
-@var{second-stage-p} means to ignore the font's registry and instead
-look at the characters in the font to see if the font can support the
-charset. This currently only makes sense under MS Windows.
+. @var{stage}). On X11 the specification (a font string) should, for
+clarity, have a registry that matches the charset's registry, but the
+redisplay code will specify the XLFD CHARSET_REGISTRY and
+CHARSET_ENCODING fields itself. This makes minimal sense without Mule
+support. @var{stage} can be one of the symbols @code{'initial} and
+@code{'final}; on X11, @code{'initial} means ``search for fonts using
+the charset registry of this charset'' and @code{'final} means ``search
+for fonts using `iso10646-1' as their charset registries, with the
+expectation that characters will be translated to Unicode at
+redisplay.'' Their meanings are similar on MS Windows, with the
+difference that the actual repertoire of the font is checked when
+deciding if a matchspec with @code{'final} matches.
+
+For example, the following code emulates what redisplay does when
+deciding what font to use for ethiopic with the default face (ignoring,
+for the moment, fallbacks):
+@example
+(or
+ (specifier-matching-instance (face-font 'default)
+ (cons 'ethiopic 'initial))
+ (specifier-matching-instance (face-font 'default)
+ (cons 'ethiopic 'final)))
+@end example
@end itemize
@end defun
Index: src/specifier.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/specifier.c,v
retrieving revision 1.48
diff -u -u -r1.48 specifier.c
--- src/specifier.c 2006/11/11 09:50:34 1.48
+++ src/specifier.c 2006/11/11 15:41:18
@@ -3241,14 +3241,21 @@
display table is not there. (Chartable specifiers are not yet
implemented.)
--- For font specifiers, MATCHSPEC should be a list (CHARSET . SECOND-STAGE-P),
- and the specification (a font string) must have a registry that matches
- the charset's registry. (This only makes sense with Mule support.) This
- makes it easy to choose a font that can display a particular
- character. (This is what redisplay does, in fact.) SECOND-STAGE-P means
- to ignore the font's registry and instead look at the characters in the
- font to see if the font can support the charset. This currently only makes
- sense under MS Windows.
+-- For font specifiers, MATCHSPEC should be a cons (CHARSET . STAGE).
+ The defined stages are currently `initial' and `final'. On X11, 'initial
+ is used when the font matching process is looking for fonts that match
+ the desired registries of the charset--see the `charset-registries'
+ function. If that match process fails, then the 'final stage comes into
+ play; this means that a more general lookup is desired, and that a font
+ doesn't necessarily have to match the desired XLFD for the face, just the
+ charset repertoire for this charset. It also means that the charset
+ registry and encoding used will be `iso10646-1', and the characters will
+ be converted to display using that registry.
+
+ See `define-specifier-tag' for details on how to create a tag that
+ specifies a given character set and stage combination. You can supply
+ such a tag to `set-face-font' in order to set a face's font for that
+ character set and stage combination.
*/
(specifier, matchspec, domain, default_, no_fallback))
{
--
Santa Maradona, priez pour moi!
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
[COMMIT] Make device-matching-specifier-tag-list available again
17 years, 11 months
Aidan Kehoe
APPROVE COMMIT
NOTE: This patch has been committed.
src/ChangeLog addition:
2006-11-11 Aidan Kehoe <kehoea(a)parhasard.net>
* specifier.c:
VM calls device-matching-specifier-tag-list; my taking it out of
non-debug builds was misjudged, this change puts it back in. I've
also reverted a couple of incidental and wrong whitespace changes.
XEmacs Trunk source patch:
Diff command: cvs -q diff -Nu
Files affected: src/specifier.c
===================================================================
RCS
Index: src/specifier.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/specifier.c,v
retrieving revision 1.47
diff -u -u -r1.47 specifier.c
--- src/specifier.c 2006/11/09 12:47:47 1.47
+++ src/specifier.c 2006/11/11 09:47:02
@@ -1372,17 +1372,15 @@
= charset_tag_list;
}
-#ifdef DEBUG_XEMACS
-
-/* Nothing's calling this, I see no reason to keep it in the production
- builds. */
+/* VM calls this, in vm-multiple-frames-possible-p, in the event that you're
+ considering taking it out. */
DEFUN ("device-matching-specifier-tag-list",
Fdevice_matching_specifier_tag_list,
0, 1, 0, /*
- Return a list of all specifier tags matching DEVICE.
- DEVICE defaults to the selected device if omitted.
- */
+Return a list of all specifier tags matching DEVICE.
+DEVICE defaults to the selected device if omitted.
+*/
(device))
{
struct device *d = decode_device (device);
@@ -1404,8 +1402,6 @@
RETURN_UNGCPRO (list);
}
-#endif /* DEBUG_XEMACS */
-
DEFUN ("specifier-tag-list", Fspecifier_tag_list, 0, 0, 0, /*
Return a list of all currently-defined specifier tags.
This includes the built-in ones (the device types and classes).
@@ -1457,8 +1453,8 @@
DEFUN ("specifier-tag-charset-predicate", Fspecifier_tag_charset_predicate,
1, 1, 0, /*
- Return the charset predicate for the given specifier tag.
- */
+Return the charset predicate for the given specifier tag.
+*/
(tag))
{
/* The return value of this function must be GCPRO'd. */
@@ -3809,9 +3805,8 @@
DEFSUBR (Fcanonicalize_tag_set);
DEFSUBR (Fdevice_matches_specifier_tag_set_p);
DEFSUBR (Fdefine_specifier_tag);
-#ifdef DEBUG_XEMACS
DEFSUBR (Fdevice_matching_specifier_tag_list);
-#endif /* DEBUG_XEMACS */
+
DEFSUBR (Fspecifier_tag_list);
DEFSUBR (Fspecifier_tag_device_predicate);
DEFSUBR (Fspecifier_tag_charset_predicate);
--
Santa Maradona, priez pour moi!
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
[COMMIT] Make charset symbols equivalent to charsets in specifier matchspecs
17 years, 11 months
Aidan Kehoe
Ar an naoiú lá de mí na Samhain, scríobh Aidan Kehoe:
> > So, now `specifier-matching-instance' MATCHSPEC `car' must be
> > `(get-charset 'jit-ucs-charset-0)', and this does make difference with
> > just `'jit-ucs-charset-0'? If so, please document.
>
> I’m sorry, you’re right here; at the moment the car of MATCHSPEC must be a
> charset object, not a symbol. I didn’t change that intentionally; it is
> needlessly confusing and I intend changing it back.
This puts that change in place.
APPROVE COMMIT
NOTE: This patch has been committed.
src/ChangeLog addition:
2006-11-09 Aidan Kehoe <kehoea(a)parhasard.net>
* specifier.c (specifier_instance_from_inst_list):
Accept symbols as well as charset objects as the cons of a
font-related specifier matchspec. Thank you Ilya.
XEmacs Trunk source patch:
Diff command: cvs -q diff -u
Files affected: src/specifier.c
===================================================================
RCS
Index: src/specifier.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/specifier.c,v
retrieving revision 1.46
diff -u -r1.46 specifier.c
--- src/specifier.c 2006/11/06 19:35:45 1.46
+++ src/specifier.c 2006/11/09 12:35:38
@@ -2829,7 +2829,7 @@
specbind (Qinhibit_quit, Qt);
#ifdef MULE
- if (CONSP(matchspec) && (CHARSETP(XCAR(matchspec))))
+ if (CONSP(matchspec) && (CHARSETP(Ffind_charset(XCAR(matchspec)))))
{
charset = Ffind_charset(XCAR(matchspec));
--
Santa Maradona, priez pour moi!
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
Re: [PATCH] empty charset registry?
17 years, 11 months
Aidan Kehoe
Ar an t-ochtú lá de mí na Samhain, scríobh Aidan Kehoe:
> [...] The equivalent code on 21.4.19,
>
> (set-charset-registry 'ascii "a very long pattern that won't match at all")
>
> doesn’t crash. That’s because of a special-case for ASCII, and the fact that
> the XLFD is not edited to include the charset registry. I would like to
> special-case ASCII too; is it reasonable to require that every X11 server we
> run on have one font with its XLFD ending in iso8859-1 ?
The first X11 release with the current server-side font architecture, X11R5,
shipped with a long list of ISO-8859-1 fonts. So, I am inclined to add the
following. Any comments?
Index: src/charset.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/charset.h,v
retrieving revision 1.15
diff -u -r1.15 charset.h
--- src/charset.h 2006/11/05 22:31:43 1.15
+++ src/charset.h 2006/11/08 16:14:54
@@ -574,6 +574,8 @@
int USED_IF_MULE (l), unsigned_char_dynarr *dst,
enum unicode_type type, unsigned int little_endian);
+void set_charset_registries(Lisp_Object charset, Lisp_Object registries);
+
EXFUN (Funicode_to_char, 2);
EXFUN (Fchar_to_unicode, 1);
Index: src/mule-charset.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/mule-charset.c,v
retrieving revision 1.50
diff -u -r1.50 mule-charset.c
--- src/mule-charset.c 2006/11/07 14:04:56 1.50
+++ src/mule-charset.c 2006/11/08 16:14:54
@@ -883,6 +883,14 @@
return Qnil;
}
+void
+set_charset_registries(Lisp_Object charset, Lisp_Object registries)
+{
+ XCHARSET_REGISTRIES (charset) = registries;
+ invalidate_charset_font_caches (charset);
+ face_property_was_changed (Vdefault_face, Qfont, Qglobal);
+}
+
DEFUN ("set-charset-registries", Fset_charset_registries, 2, 2, 0, /*
Set the `registries' property of CHARSET to REGISTRIES.
@@ -913,11 +921,19 @@
invalid_argument("Not an X11 REGISTRY-ENCODING combination",
XVECTOR_DATA(registries)[i]);
}
+
+ if (qxestrchr(XSTRING_DATA(XVECTOR_DATA(registries)[i]), '*') ||
+ qxestrchr(XSTRING_DATA(XVECTOR_DATA(registries)[i]), '?'))
+ {
+ invalid_argument
+ ("XLFD wildcards not allowed in charset-registries",
+ XVECTOR_DATA(registries)[i]);
+
+ }
}
- XCHARSET_REGISTRIES (charset) = registries;
- invalidate_charset_font_caches (charset);
- face_property_was_changed (Vdefault_face, Qfont, Qglobal);
+ set_charset_registries(charset, registries);
+
return Qnil;
}
Index: src/objects-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/objects-gtk.c,v
retrieving revision 1.18
diff -u -r1.18 objects-gtk.c
--- src/objects-gtk.c 2006/11/05 22:31:44 1.18
+++ src/objects-gtk.c 2006/11/08 16:14:54
@@ -31,6 +31,7 @@
#include "lisp.h"
#include "buffer.h"
+#include "charset.h"
#include "device-impl.h"
#include "insdel.h"
Index: src/objects-xlike-inc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/objects-xlike-inc.c,v
retrieving revision 1.3
diff -u -r1.3 objects-xlike-inc.c
--- src/objects-xlike-inc.c 2006/11/05 22:31:45 1.3
+++ src/objects-xlike-inc.c 2006/11/08 16:14:54
@@ -764,6 +764,78 @@
charset, stage);
}
+ /* In the event that the charset is ASCII and we haven't matched
+ anything up to now, even with a pattern of "*", add "iso8859-1"
+ to the charset's registry and try again. Not returning a result
+ for ASCII means our frame geometry calculations are
+ inconsistent, and means we crash. */
+
+ if (1 == xlfd_length && NILP(result) && EQ(charset, Vcharset_ascii)
+ && ('*' == eigetch(ei_xlfd_without_registry, 0)))
+
+ {
+ int have_latin1 = 0;
+
+ /* Set this to, for example, is08859-1 if you want to see the
+ error behaviour. */
+
+#define FALLBACK_ASCII_REGISTRY "iso8859-1"
+
+ for (j = 0; j < registries_len; ++j)
+ {
+ if (0 == qxestrcasecmp(XSTRING_DATA(XVECTOR_DATA(registries)[j]),
+ FALLBACK_ASCII_REGISTRY))
+ {
+ have_latin1 = 1;
+ break;
+ }
+ }
+
+ if (!have_latin1)
+ {
+ Lisp_Object new_registries = make_vector(registries_len + 1, Qnil);
+
+ warn_when_safe (Qxintl, Qwarning,
+ "Your ASCII charset registries contain nothing "
+ "sensible. Adding `" FALLBACK_ASCII_REGISTRY "'.");
+
+ XVECTOR_DATA(new_registries)[0]
+ = build_string(FALLBACK_ASCII_REGISTRY);
+
+ memcpy(XVECTOR_DATA(new_registries) + 1,
+ XVECTOR_DATA(registries),
+ sizeof XVECTOR_DATA(registries)[0] *
+ XVECTOR_LENGTH(registries));
+
+ /* Calling set_charset_registries instead of overwriting the
+ value directly, to allow the charset font caches to be
+ invalidated and a change to the default face to be
+ noted. */
+ set_charset_registries(charset, new_registries);
+
+ /* And recurse. */
+ result =
+ DEVMETH_OR_GIVEN (XDEVICE (device), find_charset_font,
+ (device, font, charset, stage),
+ result);
+ }
+ else
+ {
+ stderr_out("Cannot find a font for ASCII, deleting device on %s\n",
+ XSTRING_DATA(DEVICE_CONNECTION (XDEVICE(device))));
+
+ io_error_delete_device(device);
+
+ /* Do a normal warning in the event that we have other,
+ non-X frames available. */
+ warn_when_safe
+ (Qxintl, Qwarning,
+ "Cannot find a font for ASCII, deleting device on %s\n",
+ XSTRING_DATA(DEVICE_CONNECTION (XDEVICE(device))));
+ }
+
+ }
+
/* This function used to return the font spec, in the case where a font
didn't exist on the X server but it did match the charset. We're not
doing that any more, because none of the other platform code does, and
--
Santa Maradona, priez pour moi!
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
[COMMIT] Re-introduce ccl-encode-to-ucs-2
17 years, 11 months
Aidan Kehoe
Ar an seachtú lá de mí na Samhain, scríobh Ilya N. Golubev:
> Please fix.
Fixed. Thank you for the bug report.
APPROVE COMMIT
NOTE: This patch has been committed.
lisp/ChangeLog addition:
2006-11-07 Aidan Kehoe <kehoea(a)parhasard.net>
* unicode.el:
Re-introduce ccl-encode-to-ucs-2; it's still being used by the
JIT-UCS charsets, despite what I thought. Thank you Ilya.
XEmacs Trunk source patch:
Diff command: cvs -q diff -Nu
Files affected: lisp/unicode.el
===================================================================
RCS
Index: lisp/unicode.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/unicode.el,v
retrieving revision 1.17
diff -u -u -r1.17 unicode.el
--- lisp/unicode.el 2006/11/07 15:58:21 1.17
+++ lisp/unicode.el 2006/11/07 18:49:23
@@ -283,6 +283,32 @@
"Sorry, encode-char doesn't yet support anything but the UCS. ")
(char-to-unicode char))
+(when (featurep 'mule)
+ ;; This CCL program is used for displaying the fallback UCS character set,
+ ;; and can be repurposed to lao and the IPA, all going well.
+ ;;
+ ;; define-ccl-program is available after mule-ccl is loaded, much later
+ ;; than this file in the build process. The below is the result of
+ ;;
+ ;; (macroexpand
+ ;; '(define-ccl-program ccl-encode-to-ucs-2
+ ;; `(1
+ ;; ((r1 = (r1 << 8))
+ ;; (r1 = (r1 | r2))
+ ;; (mule-to-unicode r0 r1)
+ ;; (r1 = (r0 >> 8))
+ ;; (r2 = (r0 & 255))))
+ ;; "CCL program to transform Mule characters to UCS-2."))
+ ;;
+ ;; and it should occasionally be confirmed that the correspondence still
+ ;; holds.
+
+ (let ((prog [1 10 131127 8 98872 65823 147513 8 82009 255 22]))
+ (defconst ccl-encode-to-ucs-2 prog
+ "CCL program to transform Mule characters to UCS-2.")
+ (put (quote ccl-encode-to-ucs-2) (quote ccl-program-idx)
+ (register-ccl-program (quote ccl-encode-to-ucs-2) prog)) nil))
+
;; #### UTF-7 is not yet implemented, and it's tricky to do. There's
;; an implementation in appendix A.1 of the Unicode Standard, Version
;; 2.0, but I don't know its licensing characteristics.
--
Santa Maradona, priez pour moi!
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
[COMMIT] Take the declaration of Qfinal out of mule-charset.c
17 years, 11 months
Aidan Kehoe
Ar an séiú lá de mí na Samhain, scríobh Vin Shelton:
> After updating to the latest CVS, I'm now getting a link error:
>
> link.exe @c:\DOCUME~1\vshelton\LOCALS~1\Temp\nmb02264.
> general.obj : error LNK2005: _Qfinal already defined in mule-charset.obj
> e:\cygwin\usr\local\src\xemacs-21.5-2006-11-06\src\temacs.exe : fatal
> error LNK1169: one or more multiply defined symbols found
> NMAKE : fatal error U1077: 'link.exe' : return code '0x491'
> Stop.
After the below commit, with Visual C++ 2005 Express Edition, make-docfile
segfaults. I touch lib-src/DOC to have the compile continue, and then I get
this:
[...]
Dumping under the name xemacs
NMAKE: fatal error U1077: '"D:\Cygwin\home\Aidan\xemacs-21.5\lib-src\i"'
: return code '0x80000003'
Stop.
D:\Cygwin\home\Aidan\xemacs-21.5\nt>
This seems to be something specific to my install; if you’ve seen it before
I’d love a pointer to how to avoid it.
APPROVE COMMIT
NOTE: This patch has been committed.
src/ChangeLog addition:
2006-11-07 Aidan Kehoe <kehoea(a)parhasard.net>
* mule-charset.c:
Take the Qfinal declaration out of mule-charset.c; fixes the MSVC
build. Sorry Vin!
XEmacs Trunk source patch:
Diff command: cvs -q diff -u
Files affected: src/mule-charset.c
===================================================================
RCS
Index: src/mule-charset.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/mule-charset.c,v
retrieving revision 1.49
diff -u -r1.49 mule-charset.c
--- src/mule-charset.c 2006/11/06 19:35:45 1.49
+++ src/mule-charset.c 2006/11/07 14:02:46
@@ -79,8 +79,8 @@
Lisp_Object Qcharsetp;
-/* Qdoc_string, Qdimension, Qchars defined in general.c */
-Lisp_Object Qregistries, Qfinal, Qgraphic, Qregistry;
+/* Qdoc_string, Qdimension, Qchars, Qfinal defined in general.c */
+Lisp_Object Qregistries, Qgraphic, Qregistry;
Lisp_Object Qdirection;
Lisp_Object Qreverse_direction_charset;
Lisp_Object Qshort_name, Qlong_name;
--
Santa Maradona, priez pour moi!
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches