Mercurial > hg > xemacs-beta
view etc/xemacs-fe.sh @ 4690:257b468bf2ca
Move the #'query-coding-region implementation to C.
This is necessary because there is no reasonable way to access the
corresponding mswindows-multibyte functionality from Lisp, and we need such
functionality if we're going to have a reliable and portable
#'query-coding-region implementation. However, this change doesn't yet
provide #'query-coding-region for the mswindow-multibyte coding systems,
there should be no functional differences between an XEmacs with this change
and one without it.
src/ChangeLog addition:
2009-09-19 Aidan Kehoe <kehoea@parhasard.net>
Move the #'query-coding-region implementation to C.
This is necessary because there is no reasonable way to access the
corresponding mswindows-multibyte functionality from Lisp, and we
need such functionality if we're going to have a reliable and
portable #'query-coding-region implementation. However, this
change doesn't yet provide #'query-coding-region for the
mswindow-multibyte coding systems, there should be no functional
differences between an XEmacs with this change and one without it.
* mule-coding.c (struct fixed_width_coding_system):
Add a new coding system type, fixed_width, and implement it. It
uses the CCL infrastructure but has a much simpler creation API,
and its own query_method, formerly in lisp/mule/mule-coding.el.
* unicode.c:
Move the Unicode query method implementation here from
unicode.el.
* lisp.h: Declare Fmake_coding_system_internal, Fcopy_range_table
here.
* intl-win32.c (complex_vars_of_intl_win32):
Use Fmake_coding_system_internal, not Fmake_coding_system.
* general-slots.h: Add Qsucceeded, Qunencodable, Qinvalid_sequence
here.
* file-coding.h (enum coding_system_variant):
Add fixed_width_coding_system here.
(struct coding_system_methods):
Add query_method and query_lstream_method to the coding system
methods.
Provide flags for the query methods.
Declare the default query method; initialise it correctly in
INITIALIZE_CODING_SYSTEM_TYPE.
* file-coding.c (default_query_method):
New function, the default query method for coding systems that do
not set it. Moved from coding.el.
(make_coding_system_1):
Accept new elements in PROPS in #'make-coding-system; aliases, a
list of aliases; safe-chars and safe-charsets (these were
previously accepted but not saved); and category.
(Fmake_coding_system_internal):
New function, what used to be #'make-coding-system--on Mule
builds, we've now moved some of the functionality of this to
Lisp.
(Fcoding_system_canonical_name_p):
Move this earlier in the file, since it's now called from within
make_coding_system_1.
(Fquery_coding_region):
Move the implementation of this here, from coding.el.
(complex_vars_of_file_coding):
Call Fmake_coding_system_internal, not Fmake_coding_system;
specify safe-charsets properties when we're a mule build.
* extents.h (mouse_highlight_priority, Fset_extent_priority,
Fset_extent_face, Fmap_extents):
Make these available to other C files.
lisp/ChangeLog addition:
2009-09-19 Aidan Kehoe <kehoea@parhasard.net>
Move the #'query-coding-region implementation to C.
* coding.el:
Consolidate code that depends on the presence or absence of Mule
at the end of this file.
(default-query-coding-region, query-coding-region):
Move these functions to C.
(default-query-coding-region-safe-charset-skip-chars-map):
Remove this variable, the corresponding C variable is
Vdefault_query_coding_region_chartab_cache in file-coding.c.
(query-coding-string): Update docstring to reflect actual multiple
values, be more careful about not modifying a range table that
we're currently mapping over.
(encode-coding-char): Make the implementation of this simpler.
(featurep 'mule): Autoload #'make-coding-system from
mule/make-coding-system.el if we're a mule build; provide an
appropriate compiler macro.
Do various non-mule compatibility things if we're not a mule
build.
* update-elc.el (additional-dump-dependencies):
Add mule/make-coding-system as a dump time dependency if we're a
mule build.
* unicode.el (ccl-encode-to-ucs-2):
(decode-char):
(encode-char):
Move these earlier in the file, for the sake of some byte compile
warnings.
(unicode-query-coding-region):
Move this to unicode.c
* mule/make-coding-system.el:
New file, not dumped. Contains the functionality to rework the
arguments necessary for fixed-width coding systems, and contains
the implementation of #'make-coding-system, which now calls
#'make-coding-system-internal.
* mule/vietnamese.el (viscii):
* mule/latin.el (iso-8859-2):
(windows-1250):
(iso-8859-3):
(iso-8859-4):
(iso-8859-14):
(iso-8859-15):
(iso-8859-16):
(iso-8859-9):
(macintosh):
(windows-1252):
* mule/hebrew.el (iso-8859-8):
* mule/greek.el (iso-8859-7):
(windows-1253):
* mule/cyrillic.el (iso-8859-5):
(koi8-r):
(koi8-u):
(windows-1251):
(alternativnyj):
(koi8-ru):
(koi8-t):
(koi8-c):
(koi8-o):
* mule/arabic.el (iso-8859-6):
(windows-1256):
Move all these coding systems to being of type fixed-width, not of
type CCL. This allows the distinct query-coding-region for them to
be in C, something which will eventually allow us to implement
query-coding-region for the mswindows-multibyte coding systems.
* mule/general-late.el (posix-charset-to-coding-system-hash):
Document why we're pre-emptively persuading the byte compiler that
the ELC for this file needs to be written using escape-quoted.
Call #'set-unicode-query-skip-chars-args, now the Unicode
query-coding-region implementation is in C.
* mule/thai-xtis.el (tis-620):
Don't bother checking whether we're XEmacs or not here.
* mule/mule-coding.el:
Move the eight bit fixed-width functionality from this file to
make-coding-system.el.
tests/ChangeLog addition:
2009-09-19 Aidan Kehoe <kehoea@parhasard.net>
* automated/mule-tests.el:
Check a coding system's type, not an 8-bit-fixed property, for
whether that coding system should be treated as a fixed-width
coding system.
* automated/query-coding-tests.el:
Don't test the query coding functionality for mswindows-multibyte
coding systems, it's not yet implemented.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sat, 19 Sep 2009 22:53:13 +0100 |
parents | a4f53d9b3154 |
children | cc15677e0335 308d34e9f07d |
line wrap: on
line source
#! /bin/sh # emacs-fe --- front end driver for `emacs' and other programs # Copyright (C) 1995, 1996 Noah S. Friedman # Author: Noah Friedman <friedman@prep.ai.mit.edu> # Created: 1995-09-11 # $.Id: emacs-fe,v 1.8 1996/03/07 04:32:33 friedman Exp $ # This program 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. # # This program 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 this program; if not, you can either send email to this # program's maintainer or write to: The Free Software Foundation, # Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. # Commentary: # Inspired by a similar set of scripts by Charles Sandel <sandel@cli.com>, # but generalized into this single script. # Front-end shell script for GNU Emacs, used to manage multiple versions of # Emacs and its associated utilities. # # Strategy: Install this script as "$prefix/bin/[progname]", for each # program named [progname], (e.g. "emacs", "ispell", "etags", etc). These # are the commands users would normally execute to run them. # Give each version of emacs/xemacs/mule/ispell a separate hierarchy under # $prefix/[emacs|xemacs|mule|ispell], with the name # "[emacs|xemacs|mule|ispell]-NN.NN" where NN.NN is the version number. # This script looks at what versions are available, and selects a version, # currently whatever is specified by $DEFAULTLVERSION. # However, users can specify their own choice to force the selection of a # particular version by setting the environment variable PROGNAMEVERSION # (e.g. EMACSVERSION, MULEVERSION, XEMACSVERSION, etc.) to have a value # which is the version number of the program that they want to use (just # the numeric value), or to specify either the NEWEST or OLDEST versions. # Code: # Name by which this script was invoked. progname=`echo "$0" | sed -e 's/[^\/]*\///g'` # To prevent hairy quoting and escaping later. bq='`' eq="'" case "$progname" in emacs-fe-print ) case $# in 1 ) : ;; * ) echo "$progname: Exactly one argument is required." 1>&2 exit 1 ;; esac # sed is more portable than `dirname' dir=`echo "$0" | sed -e 's/\/*$//' -e 's/\/[^\/]*$//'` if test -f "$dir/$1"; then EMACS_FE_PRINT=t export EMACS_FE_PRINT exec "$dir/$1" fi echo "$progname: $bq$dir/$1$eq does not seem to exist." 1>&2 exit 1 ;; esac DEFAULTVERSION="${DEFAULTVERSION-NEWEST}" VARIANT="${EMACSVARIANT-emacs}" if [ "$prefix" = "" ] ; then # root of the GNU installed tree prefix=/usr/local/gnu fi if [ ! -d "$prefix" ] ; then echo "Cannot find root of GNU tree ($prefix)." exit 1 fi case "$progname" in emacs | lemacs | xemacs | mule | ispell ) if [ "$eprefix" = "" ] ; then # prefix name of the subdirectory eprefix="${progname}/${progname}-" fi ;; * ) eprefix="$VARIANT/${VARIANT}-" ;; esac # Find out which versions are available on the system and sort them # in numeric order. # # The largish sed script prefixes all version numbers with a sort key. # That key is constructed by padding out any single or double digits to 3 # digits from the version number, then converting all occurrences of `.' to # `0', and prefixing and suffixing the entire result with an additional # zero. After sorting, the sort key is stripped from the output. # We do all this because `sort' cannot numerically sort decimal numbers and # will stop on the first `.'. # This may not work correctly if the version number has more than 4 levels # of minor versions (e.g. "1.2.3.4.5" may cause problems). availversions=`ls -1d $prefix/${eprefix}*/. 2> /dev/null \ | sed -n \ -e "s#^$prefix/$eprefix\([0-9.][0-9.]*\)/\.*#\1#" \ -e 'h s/[^.]*[^0-9.][^.]*\.//g :0 /[0-9.][0-9.]*\.[0-9.][0-9.]*\.[0-9.][0-9.]*\.[0-9.][0-9.]*/!{ s/$/.0/ b 0 } s/^/./ s/$/./ :1 s/\.\([0-9]\)\./.00\1./g s/\.\([0-9][0-9]\)\./.0\1./g t 1 s/\./0/g G s/\n/ /' \ -e 'p' \ | sort -nu \ | sed -e 's/.* //'` if [ "$availversions" = "" ] ; then echo "No version of $progname found in $prefix/$eprefix*." exit 1 fi # This sets `oldest' to the oldest version available, and `newest' # to the newest version available. # On line 1, we save the original pattern in the hold space and restore it # in case it is the only line of input. eval `echo "$availversions" \ | sed -ne '1{h;s/^/oldest=/p;g;} ${s/^/newest=/p;} '` # The environment variable [progname]VERSION can have a value which specifies # a version number, OR it can contain the values "NEWEST" or "OLDEST" to # specify the newest or oldest version which was found. sed_upcase='y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' PROGNAME=`echo "$progname" | sed -e "$sed_upcase" -e 's/-/_/g'` eval version=\"\$${PROGNAME}VERSION\" # If there is no ETAGSVERSION, EMACSCLIENTVERSION, etc, then look for # EMACSVERSION, XEMACSVERSION, or whatever the current variant is. case "$version" in '' ) case "$progname" in ispell ) # If this is ispell and ISPELLVERSION isn't set, just use 3.1. # We could run this script recursively with a flag indicating to # find the current emacs variant and version and just print it out, # but that is a very pathological case and is a lot of work. version=3.1 ;; * ) variant=`echo "$VARIANT" | sed -e "$sed_upcase"` eval version=\"\$${variant}VERSION\" case "$version" in '' ) version="$DEFAULTVERSION" ;; esac ;; esac esac case "$version" in [Oo][Ll][Dd][Ee][Ss][Tt]) version="$oldest" ;; [Nn][Ee][Ww][Ee][Ss][Tt]) version="$newest" ;; '') version="$oldest" ;; *) if [ ! -d "$prefix/$eprefix$version" ] ; then echo "$progname: $version: Cannot find requested version." 1>&2 version= fi ;; esac # If we don't have a version by now, then give up. if [ "$version" = "" ] ; then exec 1>&2 echo "$progname: Cannot determine which version to use." case "$availversions" in */* ) echo "Available versions are:" for f in $availversions; do echo " $f" done | sort ;; * ) echo "Available versions are:" $availversions ;; esac exit 1 fi case "$progname" in emacs | lemacs | xemacs | mule ) EMACSVARIANT=$progname eval ${PROGNAME}VERSION=$version eval export EMACSVARIANT ${PROGNAME}VERSION case "$EMACSVARIANT-$version" in emacs-18* ) ISPELLVERSION=4.0 ;; emacs-19.[0-9] ) ISPELLVERSION=4.0 ;; emacs-19.1[0-9] ) ISPELLVERSION=4.0 ;; emacs-19.2[0-2] ) ISPELLVERSION=4.0 ;; emacs-19.2[3-9] ) ISPELLVERSION=3.1 ;; emacs-* ) ISPELLVERSION=3.1 ;; lemacs-19.[0-9] ) ISPELLVERSION=3.0.09 ;; lemacs-19.10 ) ISPELLVERSION=3.1 ;; xemacs-* ) ISPELLVERSION=3.1 ;; mule-* ) ISPELLVERSION=3.1 ;; esac export ISPELLVERSION ;; esac case "$progname" in xemacs ) # xemacs expects to use the keysym database in /usr/openwin, but that # database doesn't define many of the keysyms it uses. Unless the user # has already defined their own, specify the keysym database in X11. XKEYSYMDB="${XKEYSYMDB-/usr/local/X11/lib/X11/XKeysymDB}" export XKEYSYMDB # Some versions of xemacs (e.g. 19.12) are dynamically linked against # the openwin tooltalk library (libtt.so), so add openwin to the # dynamic load path if necessary. case "$LD_LIBRARY_PATH" in *'/usr/openwin/lib'* ) : ;; '' ) LD_LIBRARY_PATH=/usr/local/X11R5/lib:/usr/openwin/lib:/lib export LD_LIBRARY_PATH ;; * ) LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/openwin/lib" export LD_LIBRARY_PATH ;; esac ;; esac # Set up the MANPATH so that the man pages for this version # are searched first if [ -d $prefix/$eprefix$version/man ] ; then MANPATH=$prefix/$eprefix$version/man:$MANPATH export MANPATH fi # There is no need to do this, and it can potentially cause problems, # especially if a program like `xemacs' exists in that directory and gets # run in subshells instead of this script. #PATH=$prefix/$eprefix$version/bin:$PATH #export PATH searchdirs=`exec 2> /dev/null cd $prefix/$eprefix$version \ && find bin \ libexec/$VARIANT/$version/* \ lib/$VARIANT/$version/* \ lib/$VARIANT-$version/* \ lib/$VARIANT/etc \ lib/etc \ -type d -print` for dir in $searchdirs ; do for p in $progname-$version $progname ; do prog="$prefix/$eprefix$version/$dir/$p" if test -f "$prog" ; then case "${EMACS_FE_PRINT+set}" in set ) echo "$prog" exit 0 ;; esac exec "$prog" ${1+"$@"} fi done done exec 1>&2 echo "$progname: Cannot find $bq$progname-$version$eq or $bq$progname$eq in" for d in $searchdirs ; do ls -1d $prefix/$eprefix$version/$d 2> /dev/null \ | sed -e "s/^/$progname: /" done exit 1 # emacs-fe ends here